Skip to content

Commit

Permalink
internal/apmhostutil: relax k8s cgroup regex (#819)
Browse files Browse the repository at this point in the history
* internal/apmhostutil: relax k8s cgroup regex

Relax the regular expression to match additional paths like:

- 12:pids:/kubepods/kubepods/besteffort/pod0e886e9a-3879-45f9-b44d-86ef9df03224/244a65edefdffe31685c42317c9054e71dc1193048cf9459e2a4dd35cbc1dba4
- 10:cpuset:/kubepods/pod5eadac96-ab58-11ea-b82b-0242ac110009/7fe41c8a2d1da09420117894f11dd91f6c3a44dfeb7d125dc594bd53468861df
  • Loading branch information
axw committed Sep 21, 2020
1 parent 7af7e15 commit 3764442
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 26 deletions.
9 changes: 9 additions & 0 deletions CHANGELOG.asciidoc
Expand Up @@ -23,6 +23,15 @@ endif::[]
https://github.com/elastic/apm-agent-go/compare/v1.8.0...master[View commits]
- module/apmgoredisv8: introduce new package to support go-redis v8 {pull}780[#(780)]
- module/apmhttp: introduce httptrace client option {pull}788[#(788)]
- module/apmsql: add support for database/sql/driver.Validator {pull}791[#(791)]
- Record sample rate on transactions and spans, propagate through `tracestate` {pull}804[#(804)]
- module/apmredigo: change redigo dependency to v1.8.2 {pull}807[#(807)]
- Deprecate IGNORE_URLS, replace with TRANSACTION_IGNORE_URLS {pull}811[(#811)]
- Tracer.Close now waits for the transport goroutine to end before returning {pull}816[#(816)]
- Relax Kubernetes pod UID discovery rules {pull}819[#(819)]
[[release-notes-1.x]]
=== Go Agent version 1.x
Expand Down
2 changes: 1 addition & 1 deletion internal/apmhostutil/container_linux.go
Expand Up @@ -44,7 +44,7 @@ var (

kubepodsRegexp = regexp.MustCompile(
"" +
`(?:^/kubepods/[^/]+/pod([^/]+)/$)|` +
`(?:^/kubepods[\S]*/pod([^/]+)/$)|` +
`(?:^/kubepods\.slice/kubepods-[^/]+\.slice/kubepods-[^/]+-pod([^/]+)\.slice/$)`,
)

Expand Down
59 changes: 34 additions & 25 deletions internal/apmhostutil/container_linux_test.go
Expand Up @@ -114,33 +114,42 @@ func TestCgroupContainerInfoNonHex(t *testing.T) {
}

func TestCgroupContainerInfoKubernetes(t *testing.T) {
hostname, err := os.Hostname()
require.NoError(t, err)
container, kubernetes, err := readCgroupContainerInfo(strings.NewReader(`
1:name=systemd:/kubepods/besteffort/pode9b90526-f47d-11e8-b2a5-080027b9f4fb/15aa6e53-b09a-40c7-8558-c6c31e36c88a`[1:]))

assert.NoError(t, err)
assert.Equal(t, &model.Container{ID: "15aa6e53-b09a-40c7-8558-c6c31e36c88a"}, container)
assert.Equal(t, &model.Kubernetes{
Pod: &model.KubernetesPod{
UID: "e9b90526-f47d-11e8-b2a5-080027b9f4fb",
Name: hostname,
},
}, kubernetes)
}
type testcase struct {
input string
containerID string
kubernetesPodUID string
}

testscases := []testcase{{
input: "1:name=systemd:/kubepods/besteffort/pode9b90526-f47d-11e8-b2a5-080027b9f4fb/15aa6e53-b09a-40c7-8558-c6c31e36c88a",
containerID: "15aa6e53-b09a-40c7-8558-c6c31e36c88a",
kubernetesPodUID: "e9b90526-f47d-11e8-b2a5-080027b9f4fb",
}, {
input: "1:name=systemd:/kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod90d81341_92de_11e7_8cf2_507b9d4141fa.slice/crio-2227daf62df6694645fee5df53c1f91271546a9560e8600a525690ae252b7f63.scope",
containerID: "2227daf62df6694645fee5df53c1f91271546a9560e8600a525690ae252b7f63",
kubernetesPodUID: "90d81341-92de-11e7-8cf2-507b9d4141fa",
}, {
input: "12:pids:/kubepods/kubepods/besteffort/pod0e886e9a-3879-45f9-b44d-86ef9df03224/244a65edefdffe31685c42317c9054e71dc1193048cf9459e2a4dd35cbc1dba4",
containerID: "244a65edefdffe31685c42317c9054e71dc1193048cf9459e2a4dd35cbc1dba4",
kubernetesPodUID: "0e886e9a-3879-45f9-b44d-86ef9df03224",
}, {
input: "10:cpuset:/kubepods/pod5eadac96-ab58-11ea-b82b-0242ac110009/7fe41c8a2d1da09420117894f11dd91f6c3a44dfeb7d125dc594bd53468861df",
containerID: "7fe41c8a2d1da09420117894f11dd91f6c3a44dfeb7d125dc594bd53468861df",
kubernetesPodUID: "5eadac96-ab58-11ea-b82b-0242ac110009",
}}

func TestCgroupContainerInfoKubernetesSystemd(t *testing.T) {
hostname, err := os.Hostname()
require.NoError(t, err)
container, kubernetes, err := readCgroupContainerInfo(strings.NewReader(`
1:name=systemd:/kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod90d81341_92de_11e7_8cf2_507b9d4141fa.slice/crio-2227daf62df6694645fee5df53c1f91271546a9560e8600a525690ae252b7f63.scope`[1:]))

assert.NoError(t, err)
assert.Equal(t, &model.Container{ID: "2227daf62df6694645fee5df53c1f91271546a9560e8600a525690ae252b7f63"}, container)
assert.Equal(t, &model.Kubernetes{
Pod: &model.KubernetesPod{
UID: "90d81341-92de-11e7-8cf2-507b9d4141fa",
Name: hostname,
},
}, kubernetes)
for _, testcase := range testscases {
container, kubernetes, err := readCgroupContainerInfo(strings.NewReader(testcase.input))
assert.NoError(t, err)
assert.Equal(t, &model.Container{ID: testcase.containerID}, container)
assert.Equal(t, &model.Kubernetes{
Pod: &model.KubernetesPod{
UID: testcase.kubernetesPodUID,
Name: hostname,
},
}, kubernetes)
}
}

0 comments on commit 3764442

Please sign in to comment.