From 79988e31d620ebd08bd2c6d6c75bdb248e4d318f Mon Sep 17 00:00:00 2001 From: liurui-1 Date: Sat, 2 Mar 2024 22:59:28 +0800 Subject: [PATCH 1/5] Fix the logic to get container.id resource attribute --- .../CgroupV2ContainerIdExtractor.java | 35 +++++++---- .../CgroupV2ContainerIdExtractorTest.java | 58 +++++++++++++------ .../resources/containerd_proc_self_mountinfo | 38 ++++++++++++ .../test/resources/crio_proc_self_mountinfo | 26 +++++++++ .../test/resources/crio_proc_self_mountinfo1 | 39 +++++++++++++ .../resources/docker_proc_self_mountinfo1 | 36 ++++++++++++ 6 files changed, 204 insertions(+), 28 deletions(-) create mode 100644 instrumentation/resources/library/src/test/resources/containerd_proc_self_mountinfo create mode 100644 instrumentation/resources/library/src/test/resources/crio_proc_self_mountinfo create mode 100644 instrumentation/resources/library/src/test/resources/crio_proc_self_mountinfo1 create mode 100644 instrumentation/resources/library/src/test/resources/docker_proc_self_mountinfo1 diff --git a/instrumentation/resources/library/src/main/java/io/opentelemetry/instrumentation/resources/CgroupV2ContainerIdExtractor.java b/instrumentation/resources/library/src/main/java/io/opentelemetry/instrumentation/resources/CgroupV2ContainerIdExtractor.java index f7fc784d1a77..b12dcae32753 100644 --- a/instrumentation/resources/library/src/main/java/io/opentelemetry/instrumentation/resources/CgroupV2ContainerIdExtractor.java +++ b/instrumentation/resources/library/src/main/java/io/opentelemetry/instrumentation/resources/CgroupV2ContainerIdExtractor.java @@ -7,7 +7,6 @@ import static java.util.Optional.empty; -import java.io.IOException; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Optional; @@ -25,7 +24,7 @@ class CgroupV2ContainerIdExtractor { static final Path V2_CGROUP_PATH = Paths.get("/proc/self/mountinfo"); private static final Pattern CONTAINER_ID_RE = Pattern.compile("^[0-9a-f]{64}$"); - + private static final Pattern CONTAINER_ID_RE1 = Pattern.compile("cri-containerd:[0-9a-f]{64}"); private final ContainerResource.Filesystem filesystem; CgroupV2ContainerIdExtractor() { @@ -42,15 +41,29 @@ Optional extractContainerId() { return empty(); } try { - return filesystem - .lines(V2_CGROUP_PATH) - .filter(line -> line.contains("hostname")) - .flatMap(line -> Stream.of(line.split("/"))) - .map(CONTAINER_ID_RE::matcher) - .filter(Matcher::matches) - .findFirst() - .map(matcher -> matcher.group(0)); - } catch (IOException e) { + try (Stream lines = filesystem.lines(V2_CGROUP_PATH)) { + Optional optCid = + lines + .filter(line -> line.contains("/containers/")) + .flatMap(line -> Stream.of(line.split("/"))) + .map(CONTAINER_ID_RE::matcher) + .filter(Matcher::matches) + .reduce((first, second) -> second) + .map(matcher -> matcher.group(0)); + if (optCid.isPresent()) { + return optCid; + } + } + + try (Stream lines = filesystem.lines(V2_CGROUP_PATH)) { + return lines + .filter(line -> line.contains("cri-containerd:")) + .map(CONTAINER_ID_RE1::matcher) + .filter(Matcher::find) + .findFirst() + .map(matcher -> matcher.group(0).substring(15)); + } + } catch (Exception e) { logger.log(Level.WARNING, "Unable to read v2 cgroup path", e); } return empty(); diff --git a/instrumentation/resources/library/src/test/java/io/opentelemetry/instrumentation/resources/CgroupV2ContainerIdExtractorTest.java b/instrumentation/resources/library/src/test/java/io/opentelemetry/instrumentation/resources/CgroupV2ContainerIdExtractorTest.java index 141ce0cf1683..c0269c6f7b51 100644 --- a/instrumentation/resources/library/src/test/java/io/opentelemetry/instrumentation/resources/CgroupV2ContainerIdExtractorTest.java +++ b/instrumentation/resources/library/src/test/java/io/opentelemetry/instrumentation/resources/CgroupV2ContainerIdExtractorTest.java @@ -33,34 +33,58 @@ void fileNotReadable() { assertThat(result).isSameAs(Optional.empty()); } - @Test - void extractSuccess_docker() throws Exception { + @SuppressWarnings("unchecked") + private void verifyContainerId(String rawFileContent, String containerId) throws Exception { when(filesystem.isReadable(V2_CGROUP_PATH)).thenReturn(true); - Stream fileContent = getTestDockerFileContent(); - when(filesystem.lines(V2_CGROUP_PATH)).thenReturn(fileContent); + Stream fileContent = fileToStreamOfLines(rawFileContent); + Stream fileContent1 = fileToStreamOfLines(rawFileContent); + when(filesystem.lines(V2_CGROUP_PATH)).thenReturn(fileContent, fileContent1); CgroupV2ContainerIdExtractor extractor = new CgroupV2ContainerIdExtractor(filesystem); Optional result = extractor.extractContainerId(); - assertThat(result.orElse("fail")) - .isEqualTo("be522444b60caf2d3934b8b24b916a8a314f4b68d4595aa419874657e8d103f2"); + assertThat(result.orElse("fail")).isEqualTo(containerId); + } + + @Test + void extractSuccess_docker() throws Exception { + verifyContainerId( + "docker_proc_self_mountinfo", + "be522444b60caf2d3934b8b24b916a8a314f4b68d4595aa419874657e8d103f2"); + } + + @Test + void extractSuccess_docker1() throws Exception { + verifyContainerId( + "docker_proc_self_mountinfo1", + "188329f95b930c32eeeffd34658ed2538960947e166743fa3743f5ce3d739b40"); + } + + @SuppressWarnings("unchecked") + @Test + void extractSuccess_containerd() throws Exception { + verifyContainerId( + "containerd_proc_self_mountinfo", + "f2a44bc8e090f93a2b4d7f510bdaff0615ad52906e3287ee956dcf5aa5012a91"); } @Test void extractSuccess_podman() throws Exception { - when(filesystem.isReadable(V2_CGROUP_PATH)).thenReturn(true); - Stream fileContent = getTestPodmanFileContent(); - when(filesystem.lines(V2_CGROUP_PATH)).thenReturn(fileContent); - CgroupV2ContainerIdExtractor extractor = new CgroupV2ContainerIdExtractor(filesystem); - Optional result = extractor.extractContainerId(); - assertThat(result.orElse("fail")) - .isEqualTo("2a33efc76e519c137fe6093179653788bed6162d4a15e5131c8e835c968afbe6"); + verifyContainerId( + "podman_proc_self_mountinfo", + "2a33efc76e519c137fe6093179653788bed6162d4a15e5131c8e835c968afbe6"); } - private static Stream getTestDockerFileContent() throws Exception { - return fileToStreamOfLines("docker_proc_self_mountinfo"); + @Test + void extractSuccess_crio() throws Exception { + verifyContainerId( + "crio_proc_self_mountinfo", + "a8f62e52ed7c2cd85242dcf0eb1d727b643540ceca7f328ad7d2f31aedf07731"); } - private static Stream getTestPodmanFileContent() throws Exception { - return fileToStreamOfLines("podman_proc_self_mountinfo"); + @Test + void extractSuccess_crio1() throws Exception { + verifyContainerId( + "crio_proc_self_mountinfo1", + "f23ec1d4b715c6531a17e9c549222fbbe1f7ffff697a29a2212b3b4cdc37f52e"); } private static Stream fileToStreamOfLines(String filename) { diff --git a/instrumentation/resources/library/src/test/resources/containerd_proc_self_mountinfo b/instrumentation/resources/library/src/test/resources/containerd_proc_self_mountinfo new file mode 100644 index 000000000000..a8281ad76738 --- /dev/null +++ b/instrumentation/resources/library/src/test/resources/containerd_proc_self_mountinfo @@ -0,0 +1,38 @@ +2002 1895 0:226 / / rw,relatime master:629 - overlay overlay rw,lowerdir=/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/75438/fs:/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/75437/fs:/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/75394/fs,upperdir=/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/75439/fs,workdir=/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/75439/work,xino=off +2003 2002 0:227 / /proc rw,nosuid,nodev,noexec,relatime - proc proc rw +2004 2002 0:228 / /dev rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755 +2005 2004 0:229 / /dev/pts rw,nosuid,noexec,relatime - devpts devpts rw,gid=5,mode=620,ptmxmode=666 +2006 2004 0:117 / /dev/mqueue rw,nosuid,nodev,noexec,relatime - mqueue mqueue rw +2007 2002 0:124 / /sys ro,nosuid,nodev,noexec,relatime - sysfs sysfs ro +2008 2007 0:230 / /sys/fs/cgroup rw,nosuid,nodev,noexec,relatime - tmpfs tmpfs rw,mode=755 +2009 2008 0:32 /system.slice/containerd.service/kubepods-burstable-pod321c09bf_282b_44e4_a467_39daf144ef1f.slice:cri-containerd:f2a44bc8e090f93a2b4d7f510bdaff0615ad52906e3287ee956dcf5aa5012a91 /sys/fs/cgroup/systemd ro,nosuid,nodev,noexec,relatime master:11 - cgroup cgroup rw,xattr,name=systemd +2010 2008 0:35 /system.slice/containerd.service/kubepods-burstable-pod321c09bf_282b_44e4_a467_39daf144ef1f.slice:cri-containerd:f2a44bc8e090f93a2b4d7f510bdaff0615ad52906e3287ee956dcf5aa5012a91 /sys/fs/cgroup/pids ro,nosuid,nodev,noexec,relatime master:15 - cgroup cgroup rw,pids +2011 2008 0:36 /kubepods-burstable-pod321c09bf_282b_44e4_a467_39daf144ef1f.slice:cri-containerd:f2a44bc8e090f93a2b4d7f510bdaff0615ad52906e3287ee956dcf5aa5012a91 /sys/fs/cgroup/freezer ro,nosuid,nodev,noexec,relatime master:16 - cgroup cgroup rw,freezer +2012 2008 0:37 /system.slice/containerd.service/kubepods-burstable-pod321c09bf_282b_44e4_a467_39daf144ef1f.slice:cri-containerd:f2a44bc8e090f93a2b4d7f510bdaff0615ad52906e3287ee956dcf5aa5012a91 /sys/fs/cgroup/cpu,cpuacct ro,nosuid,nodev,noexec,relatime master:17 - cgroup cgroup rw,cpu,cpuacct +2013 2008 0:38 /system.slice/containerd.service/kubepods-burstable-pod321c09bf_282b_44e4_a467_39daf144ef1f.slice:cri-containerd:f2a44bc8e090f93a2b4d7f510bdaff0615ad52906e3287ee956dcf5aa5012a91 /sys/fs/cgroup/blkio ro,nosuid,nodev,noexec,relatime master:18 - cgroup cgroup rw,blkio +2014 2008 0:39 /kubepods-burstable-pod321c09bf_282b_44e4_a467_39daf144ef1f.slice:cri-containerd:f2a44bc8e090f93a2b4d7f510bdaff0615ad52906e3287ee956dcf5aa5012a91 /sys/fs/cgroup/cpuset ro,nosuid,nodev,noexec,relatime master:19 - cgroup cgroup rw,cpuset +2015 2008 0:40 /kubepods-burstable-pod321c09bf_282b_44e4_a467_39daf144ef1f.slice:cri-containerd:f2a44bc8e090f93a2b4d7f510bdaff0615ad52906e3287ee956dcf5aa5012a91 /sys/fs/cgroup/hugetlb ro,nosuid,nodev,noexec,relatime master:20 - cgroup cgroup rw,hugetlb +2016 2008 0:41 /system.slice/containerd.service/kubepods-burstable-pod321c09bf_282b_44e4_a467_39daf144ef1f.slice:cri-containerd:f2a44bc8e090f93a2b4d7f510bdaff0615ad52906e3287ee956dcf5aa5012a91 /sys/fs/cgroup/memory ro,nosuid,nodev,noexec,relatime master:21 - cgroup cgroup rw,memory +2017 2008 0:42 /kubepods-burstable-pod321c09bf_282b_44e4_a467_39daf144ef1f.slice:cri-containerd:f2a44bc8e090f93a2b4d7f510bdaff0615ad52906e3287ee956dcf5aa5012a91 /sys/fs/cgroup/net_cls,net_prio ro,nosuid,nodev,noexec,relatime master:22 - cgroup cgroup rw,net_cls,net_prio +2018 2008 0:43 /system.slice/containerd.service/kubepods-burstable-pod321c09bf_282b_44e4_a467_39daf144ef1f.slice:cri-containerd:f2a44bc8e090f93a2b4d7f510bdaff0615ad52906e3287ee956dcf5aa5012a91 /sys/fs/cgroup/devices ro,nosuid,nodev,noexec,relatime master:23 - cgroup cgroup rw,devices +2019 2008 0:44 /kubepods-burstable-pod321c09bf_282b_44e4_a467_39daf144ef1f.slice:cri-containerd:f2a44bc8e090f93a2b4d7f510bdaff0615ad52906e3287ee956dcf5aa5012a91 /sys/fs/cgroup/rdma ro,nosuid,nodev,noexec,relatime master:24 - cgroup cgroup rw,rdma +2020 2008 0:45 /kubepods-burstable-pod321c09bf_282b_44e4_a467_39daf144ef1f.slice:cri-containerd:f2a44bc8e090f93a2b4d7f510bdaff0615ad52906e3287ee956dcf5aa5012a91 /sys/fs/cgroup/perf_event ro,nosuid,nodev,noexec,relatime master:25 - cgroup cgroup rw,perf_event +2021 2002 253:1 /var/lib/kubelet/pods/321c09bf-282b-44e4-a467-39daf144ef1f/etc-hosts /etc/hosts rw,relatime - xfs /dev/mapper/ubuntu--vg-root rw,attr2,inode64,logbufs=8,logbsize=32k,noquota +2022 2004 253:1 /var/lib/kubelet/pods/321c09bf-282b-44e4-a467-39daf144ef1f/containers/accountingservice/82b03b66 /dev/termination-log rw,relatime - xfs /dev/mapper/ubuntu--vg-root rw,attr2,inode64,logbufs=8,logbsize=32k,noquota +2023 2002 253:1 /var/lib/containerd/io.containerd.grpc.v1.cri/sandboxes/b136f3d296b4c2024b3e7ad816f2a804a47cf1acc3d445075c6d78cf159ef58d/hostname /etc/hostname rw,relatime - xfs /dev/mapper/ubuntu--vg-root rw,attr2,inode64,logbufs=8,logbsize=32k,noquota +2024 2002 253:1 /var/lib/containerd/io.containerd.grpc.v1.cri/sandboxes/b136f3d296b4c2024b3e7ad816f2a804a47cf1acc3d445075c6d78cf159ef58d/resolv.conf /etc/resolv.conf rw,relatime - xfs /dev/mapper/ubuntu--vg-root rw,attr2,inode64,logbufs=8,logbsize=32k,noquota +2025 2004 0:115 / /dev/shm rw,nosuid,nodev,noexec,relatime - tmpfs shm rw,size=65536k +2026 2002 0:96 / /run/secrets/kubernetes.io/serviceaccount ro,relatime - tmpfs tmpfs rw,size=32768456k +1896 2003 0:227 /bus /proc/bus ro,nosuid,nodev,noexec,relatime - proc proc rw +1897 2003 0:227 /fs /proc/fs ro,nosuid,nodev,noexec,relatime - proc proc rw +1898 2003 0:227 /irq /proc/irq ro,nosuid,nodev,noexec,relatime - proc proc rw +1899 2003 0:227 /sys /proc/sys ro,nosuid,nodev,noexec,relatime - proc proc rw +1900 2003 0:227 /sysrq-trigger /proc/sysrq-trigger ro,nosuid,nodev,noexec,relatime - proc proc rw +1901 2003 0:231 / /proc/asound ro,relatime - tmpfs tmpfs ro +1902 2003 0:232 / /proc/acpi ro,relatime - tmpfs tmpfs ro +1903 2003 0:228 /null /proc/kcore rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755 +1904 2003 0:228 /null /proc/keys rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755 +1905 2003 0:228 /null /proc/timer_list rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755 +1906 2003 0:228 /null /proc/sched_debug rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755 +1907 2003 0:233 / /proc/scsi ro,relatime - tmpfs tmpfs ro +1908 2007 0:234 / /sys/firmware ro,relatime - tmpfs tmpfs ro diff --git a/instrumentation/resources/library/src/test/resources/crio_proc_self_mountinfo b/instrumentation/resources/library/src/test/resources/crio_proc_self_mountinfo new file mode 100644 index 000000000000..8f94c3bee579 --- /dev/null +++ b/instrumentation/resources/library/src/test/resources/crio_proc_self_mountinfo @@ -0,0 +1,26 @@ +10303 9025 0:676 / / rw,relatime master:2633 - overlay overlay rw,context="system_u:object_r:container_file_t:s0:c285,c353",lowerdir=/var/lib/containers/storage/overlay/l/MOUYF2QTVBFHJCEJ7L4FQSJBYL:/var/lib/containers/storage/overlay/l/G6UHPBRIDD4LUQGKZ3B3LQNNBF:/var/lib/containers/storage/overlay/l/NYLNBZF5BPFKTTPCUH2NV2CI76,upperdir=/var/lib/containers/storage/overlay/7af2ec0ca188ec1e39e53f5a89d81ddcc721d39b6d2b818d0b00c6accf871382/diff,workdir=/var/lib/containers/storage/overlay/7af2ec0ca188ec1e39e53f5a89d81ddcc721d39b6d2b818d0b00c6accf871382/work,volatile +10304 10303 0:680 / /proc rw,nosuid,nodev,noexec,relatime - proc proc rw +10305 10303 0:681 / /dev rw,nosuid - tmpfs tmpfs rw,context="system_u:object_r:container_file_t:s0:c285,c353",size=65536k,mode=755,inode64 +10306 10305 0:689 / /dev/pts rw,nosuid,noexec,relatime - devpts devpts rw,context="system_u:object_r:container_file_t:s0:c285,c353",gid=5,mode=620,ptmxmode=666 +10307 10305 0:668 / /dev/mqueue rw,nosuid,nodev,noexec,relatime - mqueue mqueue rw,seclabel +10308 10303 0:690 / /sys ro,nosuid,nodev,noexec,relatime - sysfs sysfs ro,seclabel +10309 10308 0:26 / /sys/fs/cgroup ro,nosuid,nodev,noexec,relatime - cgroup2 cgroup rw,seclabel +10310 10305 0:667 / /dev/shm rw,nosuid,nodev,noexec,relatime master:2583 - tmpfs shm rw,context="system_u:object_r:container_file_t:s0:c285,c353",size=65536k,inode64 +10311 10303 0:25 /containers/storage/overlay-containers/2ac4c84cb0d3c3beb04beeef6ccf71c17b5fdd0252ce3a2b66bc2fdd0aaa1814/userdata/resolv.conf /etc/resolv.conf rw,nosuid,nodev,noexec master:15 - tmpfs tmpfs rw,seclabel,size=6416204k,nr_inodes=819200,mode=755,inode64 +10312 10303 0:25 /containers/storage/overlay-containers/2ac4c84cb0d3c3beb04beeef6ccf71c17b5fdd0252ce3a2b66bc2fdd0aaa1814/userdata/hostname /etc/hostname rw,nosuid,nodev master:15 - tmpfs tmpfs rw,seclabel,size=6416204k,nr_inodes=819200,mode=755,inode64 +10313 10303 0:25 /containers/storage/overlay-containers/2ac4c84cb0d3c3beb04beeef6ccf71c17b5fdd0252ce3a2b66bc2fdd0aaa1814/userdata/.containerenv /run/.containerenv rw,nosuid,nodev master:15 - tmpfs tmpfs rw,seclabel,size=6416204k,nr_inodes=819200,mode=755,inode64 +10314 10303 252:4 /ostree/deploy/rhcos/var/lib/kubelet/pods/0a947273-7214-4824-8411-875ebd7626e4/etc-hosts /etc/hosts rw,relatime - xfs /dev/vda4 rw,seclabel,attr2,inode64,logbufs=8,logbsize=32k,prjquota +10315 10305 252:4 /ostree/deploy/rhcos/var/lib/kubelet/pods/0a947273-7214-4824-8411-875ebd7626e4/containers/ubuntu23/354653d0 /dev/termination-log rw,relatime - xfs /dev/vda4 rw,seclabel,attr2,inode64,logbufs=8,logbsize=32k,prjquota +10316 10303 0:25 /containers/storage/overlay-containers/a8f62e52ed7c2cd85242dcf0eb1d727b643540ceca7f328ad7d2f31aedf07731/userdata/run/secrets /run/secrets rw,nosuid,nodev - tmpfs tmpfs rw,seclabel,size=6416204k,nr_inodes=819200,mode=755,inode64 +10317 10316 0:666 / /run/secrets/kubernetes.io/serviceaccount ro,relatime - tmpfs tmpfs rw,seclabel,size=30930028k,inode64 +9026 10304 0:680 /bus /proc/bus ro,nosuid,nodev,noexec,relatime - proc proc rw +9027 10304 0:680 /fs /proc/fs ro,nosuid,nodev,noexec,relatime - proc proc rw +9029 10304 0:680 /irq /proc/irq ro,nosuid,nodev,noexec,relatime - proc proc rw +9030 10304 0:680 /sys /proc/sys ro,nosuid,nodev,noexec,relatime - proc proc rw +9031 10304 0:680 /sysrq-trigger /proc/sysrq-trigger ro,nosuid,nodev,noexec,relatime - proc proc rw +9032 10304 0:691 / /proc/acpi ro,relatime - tmpfs tmpfs ro,context="system_u:object_r:container_file_t:s0:c285,c353",inode64 +9033 10304 0:681 /null /proc/kcore rw,nosuid - tmpfs tmpfs rw,context="system_u:object_r:container_file_t:s0:c285,c353",size=65536k,mode=755,inode64 +9034 10304 0:681 /null /proc/keys rw,nosuid - tmpfs tmpfs rw,context="system_u:object_r:container_file_t:s0:c285,c353",size=65536k,mode=755,inode64 +9035 10304 0:681 /null /proc/timer_list rw,nosuid - tmpfs tmpfs rw,context="system_u:object_r:container_file_t:s0:c285,c353",size=65536k,mode=755,inode64 +9036 10304 0:692 / /proc/scsi ro,relatime - tmpfs tmpfs ro,context="system_u:object_r:container_file_t:s0:c285,c353",inode64 +9037 10308 0:693 / /sys/firmware ro,relatime - tmpfs tmpfs ro,context="system_u:object_r:container_file_t:s0:c285,c353",inode64 diff --git a/instrumentation/resources/library/src/test/resources/crio_proc_self_mountinfo1 b/instrumentation/resources/library/src/test/resources/crio_proc_self_mountinfo1 new file mode 100644 index 000000000000..dad97baab98d --- /dev/null +++ b/instrumentation/resources/library/src/test/resources/crio_proc_self_mountinfo1 @@ -0,0 +1,39 @@ +7276 6904 0:507 / / rw,relatime - overlay overlay rw,context="system_u:object_r:container_file_t:s0:c316,c673",lowerdir=/var/lib/containers/storage/overlay/l/4HQBBEBQQ7RYBYIRWG7IXYYZGD:/var/lib/containers/storage/overlay/l/EB6QLCMK46AXWSZ7J7IGCILPAE:/var/lib/containers/storage/overlay/l/OUK2FRIJID36QBEM6RUSRYQQOZ,upperdir=/var/lib/containers/storage/overlay/5a3fa5d05d5e872c74880dc836cdf6946529f311dfa3b423b5411f02aca1d895/diff,workdir=/var/lib/containers/storage/overlay/5a3fa5d05d5e872c74880dc836cdf6946529f311dfa3b423b5411f02aca1d895/work,volatile +7277 7276 0:509 / /proc rw,nosuid,nodev,noexec,relatime - proc proc rw +7278 7276 0:510 / /dev rw,nosuid - tmpfs tmpfs rw,context="system_u:object_r:container_file_t:s0:c316,c673",size=65536k,mode=755,inode64 +7298 7278 0:511 / /dev/pts rw,nosuid,noexec,relatime - devpts devpts rw,context="system_u:object_r:container_file_t:s0:c316,c673",gid=5,mode=620,ptmxmode=666 +7535 7278 0:334 / /dev/mqueue rw,nosuid,nodev,noexec,relatime - mqueue mqueue rw,seclabel +7538 7276 0:512 / /sys ro,nosuid,nodev,noexec,relatime - sysfs sysfs ro,seclabel +7281 7538 0:517 / /sys/fs/cgroup rw,nosuid,nodev,noexec,relatime - tmpfs tmpfs rw,context="system_u:object_r:container_file_t:s0:c316,c673",mode=755,inode64 +7282 7281 0:27 /kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod8f215fa2_6177_4ab9_b1f4_c802d19657bc.slice/crio-f23ec1d4b715c6531a17e9c549222fbbe1f7ffff697a29a2212b3b4cdc37f52e.scope /sys/fs/cgroup/systemd ro,nosuid,nodev,noexec,relatime master:9 - cgroup cgroup rw,seclabel,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd +7283 7281 0:30 /kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod8f215fa2_6177_4ab9_b1f4_c802d19657bc.slice/crio-f23ec1d4b715c6531a17e9c549222fbbe1f7ffff697a29a2212b3b4cdc37f52e.scope /sys/fs/cgroup/memory ro,nosuid,nodev,noexec,relatime master:10 - cgroup cgroup rw,seclabel,memory +7284 7281 0:31 /kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod8f215fa2_6177_4ab9_b1f4_c802d19657bc.slice/crio-f23ec1d4b715c6531a17e9c549222fbbe1f7ffff697a29a2212b3b4cdc37f52e.scope /sys/fs/cgroup/cpu,cpuacct ro,nosuid,nodev,noexec,relatime master:11 - cgroup cgroup rw,seclabel,cpu,cpuacct +7285 7281 0:32 /kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod8f215fa2_6177_4ab9_b1f4_c802d19657bc.slice/crio-f23ec1d4b715c6531a17e9c549222fbbe1f7ffff697a29a2212b3b4cdc37f52e.scope /sys/fs/cgroup/rdma ro,nosuid,nodev,noexec,relatime master:12 - cgroup cgroup rw,seclabel,rdma +7286 7281 0:33 /kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod8f215fa2_6177_4ab9_b1f4_c802d19657bc.slice/crio-f23ec1d4b715c6531a17e9c549222fbbe1f7ffff697a29a2212b3b4cdc37f52e.scope /sys/fs/cgroup/devices ro,nosuid,nodev,noexec,relatime master:13 - cgroup cgroup rw,seclabel,devices +7287 7281 0:34 /kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod8f215fa2_6177_4ab9_b1f4_c802d19657bc.slice/crio-f23ec1d4b715c6531a17e9c549222fbbe1f7ffff697a29a2212b3b4cdc37f52e.scope /sys/fs/cgroup/pids ro,nosuid,nodev,noexec,relatime master:14 - cgroup cgroup rw,seclabel,pids +7288 7281 0:35 /kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod8f215fa2_6177_4ab9_b1f4_c802d19657bc.slice/crio-f23ec1d4b715c6531a17e9c549222fbbe1f7ffff697a29a2212b3b4cdc37f52e.scope /sys/fs/cgroup/blkio ro,nosuid,nodev,noexec,relatime master:15 - cgroup cgroup rw,seclabel,blkio +7289 7281 0:36 /kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod8f215fa2_6177_4ab9_b1f4_c802d19657bc.slice/crio-f23ec1d4b715c6531a17e9c549222fbbe1f7ffff697a29a2212b3b4cdc37f52e.scope /sys/fs/cgroup/net_cls,net_prio ro,nosuid,nodev,noexec,relatime master:16 - cgroup cgroup rw,seclabel,net_cls,net_prio +7291 7281 0:37 /kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod8f215fa2_6177_4ab9_b1f4_c802d19657bc.slice/crio-f23ec1d4b715c6531a17e9c549222fbbe1f7ffff697a29a2212b3b4cdc37f52e.scope /sys/fs/cgroup/hugetlb ro,nosuid,nodev,noexec,relatime master:17 - cgroup cgroup rw,seclabel,hugetlb +7293 7281 0:38 /kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod8f215fa2_6177_4ab9_b1f4_c802d19657bc.slice/crio-f23ec1d4b715c6531a17e9c549222fbbe1f7ffff697a29a2212b3b4cdc37f52e.scope /sys/fs/cgroup/perf_event ro,nosuid,nodev,noexec,relatime master:18 - cgroup cgroup rw,seclabel,perf_event +7294 7281 0:39 /kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod8f215fa2_6177_4ab9_b1f4_c802d19657bc.slice/crio-f23ec1d4b715c6531a17e9c549222fbbe1f7ffff697a29a2212b3b4cdc37f52e.scope /sys/fs/cgroup/freezer ro,nosuid,nodev,noexec,relatime master:19 - cgroup cgroup rw,seclabel,freezer +7296 7281 0:40 /kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod8f215fa2_6177_4ab9_b1f4_c802d19657bc.slice/crio-f23ec1d4b715c6531a17e9c549222fbbe1f7ffff697a29a2212b3b4cdc37f52e.scope /sys/fs/cgroup/cpuset ro,nosuid,nodev,noexec,relatime master:20 - cgroup cgroup rw,seclabel,cpuset +7299 7281 0:41 /kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod8f215fa2_6177_4ab9_b1f4_c802d19657bc.slice/crio-f23ec1d4b715c6531a17e9c549222fbbe1f7ffff697a29a2212b3b4cdc37f52e.scope /sys/fs/cgroup/misc ro,nosuid,nodev,noexec,relatime master:21 - cgroup cgroup rw,seclabel,misc +7300 7278 0:333 / /dev/shm rw,nosuid,nodev,noexec,relatime master:1420 - tmpfs shm rw,context="system_u:object_r:container_file_t:s0:c316,c673",size=65536k,inode64 +7302 7276 0:25 /containers/storage/overlay-containers/757a1c14bdd68b907c41f15436c0c2f9ec5a4cd4317135fcc1c4a64188db98d0/userdata/resolv.conf /etc/resolv.conf rw,nosuid,nodev,noexec master:28 - tmpfs tmpfs rw,seclabel,size=6416204k,nr_inodes=819200,mode=755,inode64 +7304 7276 0:25 /containers/storage/overlay-containers/757a1c14bdd68b907c41f15436c0c2f9ec5a4cd4317135fcc1c4a64188db98d0/userdata/hostname /etc/hostname rw,nosuid,nodev master:28 - tmpfs tmpfs rw,seclabel,size=6416204k,nr_inodes=819200,mode=755,inode64 +7305 7276 0:25 /containers/storage/overlay-containers/757a1c14bdd68b907c41f15436c0c2f9ec5a4cd4317135fcc1c4a64188db98d0/userdata/.containerenv /run/.containerenv rw,nosuid,nodev master:28 - tmpfs tmpfs rw,seclabel,size=6416204k,nr_inodes=819200,mode=755,inode64 +7307 7276 252:4 /ostree/deploy/rhcos/var/lib/kubelet/pods/8f215fa2-6177-4ab9-b1f4-c802d19657bc/etc-hosts /etc/hosts rw,relatime - xfs /dev/vda4 rw,seclabel,attr2,inode64,logbufs=8,logbsize=32k,prjquota +7308 7278 252:4 /ostree/deploy/rhcos/var/lib/kubelet/pods/8f215fa2-6177-4ab9-b1f4-c802d19657bc/containers/accountingservice/e1dc5db8 /dev/termination-log rw,relatime - xfs /dev/vda4 rw,seclabel,attr2,inode64,logbufs=8,logbsize=32k,prjquota +7310 7276 0:25 /containers/storage/overlay-containers/f23ec1d4b715c6531a17e9c549222fbbe1f7ffff697a29a2212b3b4cdc37f52e/userdata/run/secrets /run/secrets rw,nosuid,nodev - tmpfs tmpfs rw,seclabel,size=6416204k,nr_inodes=819200,mode=755,inode64 +7312 7310 0:313 / /run/secrets/kubernetes.io/serviceaccount ro,relatime - tmpfs tmpfs rw,seclabel,size=30930028k,inode64 +6905 7277 0:509 /bus /proc/bus ro,nosuid,nodev,noexec,relatime - proc proc rw +6906 7277 0:509 /fs /proc/fs ro,nosuid,nodev,noexec,relatime - proc proc rw +6908 7277 0:509 /irq /proc/irq ro,nosuid,nodev,noexec,relatime - proc proc rw +6909 7277 0:509 /sys /proc/sys ro,nosuid,nodev,noexec,relatime - proc proc rw +6910 7277 0:509 /sysrq-trigger /proc/sysrq-trigger ro,nosuid,nodev,noexec,relatime - proc proc rw +6911 7277 0:519 / /proc/acpi ro,relatime - tmpfs tmpfs ro,context="system_u:object_r:container_file_t:s0:c316,c673",inode64 +6912 7277 0:510 /null /proc/kcore rw,nosuid - tmpfs tmpfs rw,context="system_u:object_r:container_file_t:s0:c316,c673",size=65536k,mode=755,inode64 +6913 7277 0:510 /null /proc/keys rw,nosuid - tmpfs tmpfs rw,context="system_u:object_r:container_file_t:s0:c316,c673",size=65536k,mode=755,inode64 +6914 7277 0:510 /null /proc/timer_list rw,nosuid - tmpfs tmpfs rw,context="system_u:object_r:container_file_t:s0:c316,c673",size=65536k,mode=755,inode64 +6915 7277 0:520 / /proc/scsi ro,relatime - tmpfs tmpfs ro,context="system_u:object_r:container_file_t:s0:c316,c673",inode64 +6916 7538 0:521 / /sys/firmware ro,relatime - tmpfs tmpfs ro,context="system_u:object_r:container_file_t:s0:c316,c673",inode64 diff --git a/instrumentation/resources/library/src/test/resources/docker_proc_self_mountinfo1 b/instrumentation/resources/library/src/test/resources/docker_proc_self_mountinfo1 new file mode 100644 index 000000000000..b63fbb3228ff --- /dev/null +++ b/instrumentation/resources/library/src/test/resources/docker_proc_self_mountinfo1 @@ -0,0 +1,36 @@ +1239 872 0:60 / / rw,relatime master:451 - overlay overlay rw,lowerdir=/var/lib/docker/overlay2/l/BWXJHJ2QLSLHKSPZDSYAMJ7H5E:/var/lib/docker/overlay2/l/S4UZYKEZFLMKROMNZL5VDZ3KDK:/var/lib/docker/overlay2/l/TIRNJBVGFYKRQYZWNHHJBNJMRQ,upperdir=/var/lib/docker/overlay2/b641d6be86a232bd770e75f480444a3e1c7e61a8ff8a4ed89198a4838e86916b/diff,workdir=/var/lib/docker/overlay2/b641d6be86a232bd770e75f480444a3e1c7e61a8ff8a4ed89198a4838e86916b/work,xino=off +1271 1239 0:62 / /proc rw,nosuid,nodev,noexec,relatime - proc proc rw +1272 1239 0:63 / /dev rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755 +1319 1272 0:64 / /dev/pts rw,nosuid,noexec,relatime - devpts devpts rw,gid=5,mode=620,ptmxmode=666 +1320 1239 0:65 / /sys ro,nosuid,nodev,noexec,relatime - sysfs sysfs ro +1507 1320 0:66 / /sys/fs/cgroup rw,nosuid,nodev,noexec,relatime - tmpfs tmpfs rw,mode=755 +1508 1507 0:32 /docker/188329f95b930c32eeeffd34658ed2538960947e166743fa3743f5ce3d739b40 /sys/fs/cgroup/systemd ro,nosuid,nodev,noexec,relatime master:11 - cgroup cgroup rw,xattr,name=systemd +1509 1507 0:35 /docker/188329f95b930c32eeeffd34658ed2538960947e166743fa3743f5ce3d739b40 /sys/fs/cgroup/cpuset ro,nosuid,nodev,noexec,relatime master:15 - cgroup cgroup rw,cpuset +1510 1507 0:36 /docker/188329f95b930c32eeeffd34658ed2538960947e166743fa3743f5ce3d739b40 /sys/fs/cgroup/pids ro,nosuid,nodev,noexec,relatime master:16 - cgroup cgroup rw,pids +1511 1507 0:37 /docker/188329f95b930c32eeeffd34658ed2538960947e166743fa3743f5ce3d739b40 /sys/fs/cgroup/net_cls,net_prio ro,nosuid,nodev,noexec,relatime master:17 - cgroup cgroup rw,net_cls,net_prio +1512 1507 0:38 /docker/188329f95b930c32eeeffd34658ed2538960947e166743fa3743f5ce3d739b40 /sys/fs/cgroup/freezer ro,nosuid,nodev,noexec,relatime master:18 - cgroup cgroup rw,freezer +1513 1507 0:39 /docker/188329f95b930c32eeeffd34658ed2538960947e166743fa3743f5ce3d739b40 /sys/fs/cgroup/cpu,cpuacct ro,nosuid,nodev,noexec,relatime master:19 - cgroup cgroup rw,cpu,cpuacct +1514 1507 0:40 /docker/188329f95b930c32eeeffd34658ed2538960947e166743fa3743f5ce3d739b40 /sys/fs/cgroup/rdma ro,nosuid,nodev,noexec,relatime master:20 - cgroup cgroup rw,rdma +1515 1507 0:41 /docker/188329f95b930c32eeeffd34658ed2538960947e166743fa3743f5ce3d739b40 /sys/fs/cgroup/devices ro,nosuid,nodev,noexec,relatime master:21 - cgroup cgroup rw,devices +1516 1507 0:42 /docker/188329f95b930c32eeeffd34658ed2538960947e166743fa3743f5ce3d739b40 /sys/fs/cgroup/perf_event ro,nosuid,nodev,noexec,relatime master:22 - cgroup cgroup rw,perf_event +1517 1507 0:43 /docker/188329f95b930c32eeeffd34658ed2538960947e166743fa3743f5ce3d739b40 /sys/fs/cgroup/hugetlb ro,nosuid,nodev,noexec,relatime master:23 - cgroup cgroup rw,hugetlb +1518 1507 0:44 /docker/188329f95b930c32eeeffd34658ed2538960947e166743fa3743f5ce3d739b40 /sys/fs/cgroup/blkio ro,nosuid,nodev,noexec,relatime master:24 - cgroup cgroup rw,blkio +1519 1507 0:45 /docker/188329f95b930c32eeeffd34658ed2538960947e166743fa3743f5ce3d739b40 /sys/fs/cgroup/memory ro,nosuid,nodev,noexec,relatime master:25 - cgroup cgroup rw,memory +1520 1272 0:61 / /dev/mqueue rw,nosuid,nodev,noexec,relatime - mqueue mqueue rw +1521 1272 0:67 / /dev/shm rw,nosuid,nodev,noexec,relatime - tmpfs shm rw,size=65536k +1522 1239 253:1 /var/lib/docker/containers/188329f95b930c32eeeffd34658ed2538960947e166743fa3743f5ce3d739b40/resolv.conf /etc/resolv.conf rw,relatime - xfs /dev/mapper/ubuntu--vg-root rw,attr2,inode64,logbufs=8,logbsize=32k,noquota +1523 1239 253:1 /var/lib/docker/containers/188329f95b930c32eeeffd34658ed2538960947e166743fa3743f5ce3d739b40/hostname /etc/hostname rw,relatime - xfs /dev/mapper/ubuntu--vg-root rw,attr2,inode64,logbufs=8,logbsize=32k,noquota +1524 1239 253:1 /var/lib/docker/containers/188329f95b930c32eeeffd34658ed2538960947e166743fa3743f5ce3d739b40/hosts /etc/hosts rw,relatime - xfs /dev/mapper/ubuntu--vg-root rw,attr2,inode64,logbufs=8,logbsize=32k,noquota +873 1271 0:62 /bus /proc/bus ro,nosuid,nodev,noexec,relatime - proc proc rw +874 1271 0:62 /fs /proc/fs ro,nosuid,nodev,noexec,relatime - proc proc rw +875 1271 0:62 /irq /proc/irq ro,nosuid,nodev,noexec,relatime - proc proc rw +876 1271 0:62 /sys /proc/sys ro,nosuid,nodev,noexec,relatime - proc proc rw +877 1271 0:62 /sysrq-trigger /proc/sysrq-trigger ro,nosuid,nodev,noexec,relatime - proc proc rw +878 1271 0:68 / /proc/asound ro,relatime - tmpfs tmpfs ro +879 1271 0:69 / /proc/acpi ro,relatime - tmpfs tmpfs ro +880 1271 0:63 /null /proc/kcore rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755 +881 1271 0:63 /null /proc/keys rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755 +882 1271 0:63 /null /proc/timer_list rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755 +883 1271 0:63 /null /proc/sched_debug rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755 +884 1271 0:70 / /proc/scsi ro,relatime - tmpfs tmpfs ro +885 1320 0:71 / /sys/firmware ro,relatime - tmpfs tmpfs ro From c9f52cb7bd919139340f934feafbf87a089e1b84 Mon Sep 17 00:00:00 2001 From: liurui-1 Date: Mon, 4 Mar 2024 21:43:55 +0800 Subject: [PATCH 2/5] Optimize code according to review comments --- .../CgroupV2ContainerIdExtractor.java | 38 +++++++++---------- .../resources/ContainerResource.java | 8 ++++ .../CgroupV2ContainerIdExtractorTest.java | 15 ++++---- 3 files changed, 32 insertions(+), 29 deletions(-) diff --git a/instrumentation/resources/library/src/main/java/io/opentelemetry/instrumentation/resources/CgroupV2ContainerIdExtractor.java b/instrumentation/resources/library/src/main/java/io/opentelemetry/instrumentation/resources/CgroupV2ContainerIdExtractor.java index b12dcae32753..d2b5facd8615 100644 --- a/instrumentation/resources/library/src/main/java/io/opentelemetry/instrumentation/resources/CgroupV2ContainerIdExtractor.java +++ b/instrumentation/resources/library/src/main/java/io/opentelemetry/instrumentation/resources/CgroupV2ContainerIdExtractor.java @@ -24,7 +24,7 @@ class CgroupV2ContainerIdExtractor { static final Path V2_CGROUP_PATH = Paths.get("/proc/self/mountinfo"); private static final Pattern CONTAINER_ID_RE = Pattern.compile("^[0-9a-f]{64}$"); - private static final Pattern CONTAINER_ID_RE1 = Pattern.compile("cri-containerd:[0-9a-f]{64}"); + private static final Pattern CRI_CONTAINER_ID_RE = Pattern.compile("cri-containerd:[0-9a-f]{64}"); private final ContainerResource.Filesystem filesystem; CgroupV2ContainerIdExtractor() { @@ -41,28 +41,24 @@ Optional extractContainerId() { return empty(); } try { - try (Stream lines = filesystem.lines(V2_CGROUP_PATH)) { - Optional optCid = - lines - .filter(line -> line.contains("/containers/")) - .flatMap(line -> Stream.of(line.split("/"))) - .map(CONTAINER_ID_RE::matcher) - .filter(Matcher::matches) - .reduce((first, second) -> second) - .map(matcher -> matcher.group(0)); - if (optCid.isPresent()) { - return optCid; - } + Optional optCid = + filesystem.lineList(V2_CGROUP_PATH).stream() + .filter(line -> line.contains("/containers/")) + .flatMap(line -> Stream.of(line.split("/"))) + .map(CONTAINER_ID_RE::matcher) + .filter(Matcher::matches) + .reduce((first, second) -> second) + .map(matcher -> matcher.group(0)); + if (optCid.isPresent()) { + return optCid; } - try (Stream lines = filesystem.lines(V2_CGROUP_PATH)) { - return lines - .filter(line -> line.contains("cri-containerd:")) - .map(CONTAINER_ID_RE1::matcher) - .filter(Matcher::find) - .findFirst() - .map(matcher -> matcher.group(0).substring(15)); - } + return filesystem.lineList(V2_CGROUP_PATH).stream() + .filter(line -> line.contains("cri-containerd:")) + .map(CRI_CONTAINER_ID_RE::matcher) + .filter(Matcher::find) + .findFirst() + .map(matcher -> matcher.group(0).substring(15)); } catch (Exception e) { logger.log(Level.WARNING, "Unable to read v2 cgroup path", e); } diff --git a/instrumentation/resources/library/src/main/java/io/opentelemetry/instrumentation/resources/ContainerResource.java b/instrumentation/resources/library/src/main/java/io/opentelemetry/instrumentation/resources/ContainerResource.java index 2fe1a3a2ff54..54aa0cad593d 100644 --- a/instrumentation/resources/library/src/main/java/io/opentelemetry/instrumentation/resources/ContainerResource.java +++ b/instrumentation/resources/library/src/main/java/io/opentelemetry/instrumentation/resources/ContainerResource.java @@ -13,7 +13,9 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import java.util.List; import java.util.Optional; +import java.util.stream.Collectors; import java.util.stream.Stream; /** @@ -75,5 +77,11 @@ boolean isReadable(Path path) { Stream lines(Path path) throws IOException { return Files.lines(path); } + + List lineList(Path path) throws IOException { + try (Stream lines = lines(path)) { + return lines.collect(Collectors.toList()); + } + } } } diff --git a/instrumentation/resources/library/src/test/java/io/opentelemetry/instrumentation/resources/CgroupV2ContainerIdExtractorTest.java b/instrumentation/resources/library/src/test/java/io/opentelemetry/instrumentation/resources/CgroupV2ContainerIdExtractorTest.java index c0269c6f7b51..a631a81509f7 100644 --- a/instrumentation/resources/library/src/test/java/io/opentelemetry/instrumentation/resources/CgroupV2ContainerIdExtractorTest.java +++ b/instrumentation/resources/library/src/test/java/io/opentelemetry/instrumentation/resources/CgroupV2ContainerIdExtractorTest.java @@ -13,8 +13,9 @@ import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; +import java.util.List; import java.util.Optional; -import java.util.stream.Stream; +import java.util.stream.Collectors; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; @@ -33,12 +34,9 @@ void fileNotReadable() { assertThat(result).isSameAs(Optional.empty()); } - @SuppressWarnings("unchecked") private void verifyContainerId(String rawFileContent, String containerId) throws Exception { when(filesystem.isReadable(V2_CGROUP_PATH)).thenReturn(true); - Stream fileContent = fileToStreamOfLines(rawFileContent); - Stream fileContent1 = fileToStreamOfLines(rawFileContent); - when(filesystem.lines(V2_CGROUP_PATH)).thenReturn(fileContent, fileContent1); + when(filesystem.lineList(V2_CGROUP_PATH)).thenReturn(fileToListOfLines(rawFileContent)); CgroupV2ContainerIdExtractor extractor = new CgroupV2ContainerIdExtractor(filesystem); Optional result = extractor.extractContainerId(); assertThat(result.orElse("fail")).isEqualTo(containerId); @@ -58,7 +56,6 @@ void extractSuccess_docker1() throws Exception { "188329f95b930c32eeeffd34658ed2538960947e166743fa3743f5ce3d739b40"); } - @SuppressWarnings("unchecked") @Test void extractSuccess_containerd() throws Exception { verifyContainerId( @@ -87,9 +84,11 @@ void extractSuccess_crio1() throws Exception { "f23ec1d4b715c6531a17e9c549222fbbe1f7ffff697a29a2212b3b4cdc37f52e"); } - private static Stream fileToStreamOfLines(String filename) { + private static List fileToListOfLines(String filename) { InputStream in = CgroupV2ContainerIdExtractorTest.class.getClassLoader().getResourceAsStream(filename); - return new BufferedReader(new InputStreamReader(in, UTF_8)).lines(); + return new BufferedReader(new InputStreamReader(in, UTF_8)) + .lines() + .collect(Collectors.toList()); } } From 1379140cbc7529d67d092d924e97ff1c3a604530 Mon Sep 17 00:00:00 2001 From: liurui-1 Date: Mon, 4 Mar 2024 23:42:07 +0800 Subject: [PATCH 3/5] Update code according to review comments --- .../resources/CgroupV2ContainerIdExtractor.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/instrumentation/resources/library/src/main/java/io/opentelemetry/instrumentation/resources/CgroupV2ContainerIdExtractor.java b/instrumentation/resources/library/src/main/java/io/opentelemetry/instrumentation/resources/CgroupV2ContainerIdExtractor.java index d2b5facd8615..908aec332c68 100644 --- a/instrumentation/resources/library/src/main/java/io/opentelemetry/instrumentation/resources/CgroupV2ContainerIdExtractor.java +++ b/instrumentation/resources/library/src/main/java/io/opentelemetry/instrumentation/resources/CgroupV2ContainerIdExtractor.java @@ -9,6 +9,7 @@ import java.nio.file.Path; import java.nio.file.Paths; +import java.util.List; import java.util.Optional; import java.util.logging.Level; import java.util.logging.Logger; @@ -41,8 +42,9 @@ Optional extractContainerId() { return empty(); } try { + List fileAsList = filesystem.lineList(V2_CGROUP_PATH); Optional optCid = - filesystem.lineList(V2_CGROUP_PATH).stream() + fileAsList.stream() .filter(line -> line.contains("/containers/")) .flatMap(line -> Stream.of(line.split("/"))) .map(CONTAINER_ID_RE::matcher) @@ -53,7 +55,7 @@ Optional extractContainerId() { return optCid; } - return filesystem.lineList(V2_CGROUP_PATH).stream() + return fileAsList.stream() .filter(line -> line.contains("cri-containerd:")) .map(CRI_CONTAINER_ID_RE::matcher) .filter(Matcher::find) From 82ad6074bd59fadc80234f7a8bff3c5c6f84590d Mon Sep 17 00:00:00 2001 From: Rui Liu Date: Tue, 5 Mar 2024 19:40:22 +0800 Subject: [PATCH 4/5] Update instrumentation/resources/library/src/main/java/io/opentelemetry/instrumentation/resources/CgroupV2ContainerIdExtractor.java Co-authored-by: Lauri Tulmin --- .../instrumentation/resources/CgroupV2ContainerIdExtractor.java | 1 + 1 file changed, 1 insertion(+) diff --git a/instrumentation/resources/library/src/main/java/io/opentelemetry/instrumentation/resources/CgroupV2ContainerIdExtractor.java b/instrumentation/resources/library/src/main/java/io/opentelemetry/instrumentation/resources/CgroupV2ContainerIdExtractor.java index 908aec332c68..498ccfcbcba7 100644 --- a/instrumentation/resources/library/src/main/java/io/opentelemetry/instrumentation/resources/CgroupV2ContainerIdExtractor.java +++ b/instrumentation/resources/library/src/main/java/io/opentelemetry/instrumentation/resources/CgroupV2ContainerIdExtractor.java @@ -26,6 +26,7 @@ class CgroupV2ContainerIdExtractor { static final Path V2_CGROUP_PATH = Paths.get("/proc/self/mountinfo"); private static final Pattern CONTAINER_ID_RE = Pattern.compile("^[0-9a-f]{64}$"); private static final Pattern CRI_CONTAINER_ID_RE = Pattern.compile("cri-containerd:[0-9a-f]{64}"); + private final ContainerResource.Filesystem filesystem; CgroupV2ContainerIdExtractor() { From 6b178274ca6944a14837e924d5b41fad4df3f2ca Mon Sep 17 00:00:00 2001 From: liurui-1 Date: Tue, 5 Mar 2024 19:47:11 +0800 Subject: [PATCH 5/5] Update code according to review comments --- .../CgroupV2ContainerIdExtractor.java | 45 ++++++++++--------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/instrumentation/resources/library/src/main/java/io/opentelemetry/instrumentation/resources/CgroupV2ContainerIdExtractor.java b/instrumentation/resources/library/src/main/java/io/opentelemetry/instrumentation/resources/CgroupV2ContainerIdExtractor.java index 498ccfcbcba7..d3ce1a2a0b2b 100644 --- a/instrumentation/resources/library/src/main/java/io/opentelemetry/instrumentation/resources/CgroupV2ContainerIdExtractor.java +++ b/instrumentation/resources/library/src/main/java/io/opentelemetry/instrumentation/resources/CgroupV2ContainerIdExtractor.java @@ -7,6 +7,7 @@ import static java.util.Optional.empty; +import java.io.IOException; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; @@ -42,29 +43,31 @@ Optional extractContainerId() { if (!filesystem.isReadable(V2_CGROUP_PATH)) { return empty(); } - try { - List fileAsList = filesystem.lineList(V2_CGROUP_PATH); - Optional optCid = - fileAsList.stream() - .filter(line -> line.contains("/containers/")) - .flatMap(line -> Stream.of(line.split("/"))) - .map(CONTAINER_ID_RE::matcher) - .filter(Matcher::matches) - .reduce((first, second) -> second) - .map(matcher -> matcher.group(0)); - if (optCid.isPresent()) { - return optCid; - } - return fileAsList.stream() - .filter(line -> line.contains("cri-containerd:")) - .map(CRI_CONTAINER_ID_RE::matcher) - .filter(Matcher::find) - .findFirst() - .map(matcher -> matcher.group(0).substring(15)); - } catch (Exception e) { + List fileAsList; + try { + fileAsList = filesystem.lineList(V2_CGROUP_PATH); + } catch (IOException e) { logger.log(Level.WARNING, "Unable to read v2 cgroup path", e); + return empty(); + } + + Optional optCid = + fileAsList.stream() + .filter(line -> line.contains("/containers/")) + .flatMap(line -> Stream.of(line.split("/"))) + .map(CONTAINER_ID_RE::matcher) + .filter(Matcher::matches) + .reduce((first, second) -> second) + .map(matcher -> matcher.group(0)); + if (optCid.isPresent()) { + return optCid; } - return empty(); + return fileAsList.stream() + .filter(line -> line.contains("cri-containerd:")) + .map(CRI_CONTAINER_ID_RE::matcher) + .filter(Matcher::find) + .findFirst() + .map(matcher -> matcher.group(0).substring(15)); } }