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 d3ce1a2a0b2b..4aa13a15acfb 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,7 +26,9 @@ 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 static final Pattern CONTAINERD_CONTAINER_ID_RE = + Pattern.compile("cri-containerd:[0-9a-f]{64}"); + private static final Pattern CRIO_CONTAINER_ID_RE = Pattern.compile("\\/crio-[0-9a-f]{64}"); private final ContainerResource.Filesystem filesystem; @@ -54,20 +56,32 @@ Optional extractContainerId() { 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)); + .filter(line -> line.contains("/crio-")) + .map(CRIO_CONTAINER_ID_RE::matcher) + .filter(Matcher::find) + .findFirst() + .map(matcher -> matcher.group(0).substring(6)); if (optCid.isPresent()) { return optCid; } + + optCid = + fileAsList.stream() + .filter(line -> line.contains("cri-containerd:")) + .map(CONTAINERD_CONTAINER_ID_RE::matcher) + .filter(Matcher::find) + .findFirst() + .map(matcher -> matcher.group(0).substring(15)); + 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)); + .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)); } } 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 a631a81509f7..04e9aa4d1b1f 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 @@ -84,6 +84,13 @@ void extractSuccess_crio1() throws Exception { "f23ec1d4b715c6531a17e9c549222fbbe1f7ffff697a29a2212b3b4cdc37f52e"); } + @Test + void extractSuccess_crio2() throws Exception { + verifyContainerId( + "crio_proc_self_mountinfo2", + "b4873629b312dc1d77472aba6fb177c6ce9a8f7c205ad7a03302726805007fe6"); + } + private static List fileToListOfLines(String filename) { InputStream in = CgroupV2ContainerIdExtractorTest.class.getClassLoader().getResourceAsStream(filename); diff --git a/instrumentation/resources/library/src/test/resources/crio_proc_self_mountinfo2 b/instrumentation/resources/library/src/test/resources/crio_proc_self_mountinfo2 new file mode 100644 index 000000000000..68e7a064e352 --- /dev/null +++ b/instrumentation/resources/library/src/test/resources/crio_proc_self_mountinfo2 @@ -0,0 +1,38 @@ +5989 5586 0:433 / / rw,relatime - overlay overlay rw,context="system_u:object_r:container_file_t:s0:c898,c999",lowerdir=/var/lib/containers/storage/overlay/l/6L7GBRDSDQ5M2S7KRI6X24TWEK:/var/lib/containers/storage/overlay/l/BDMEMSU6EKIVTDHY6DPE6ERXTU:/var/lib/containers/storage/overlay/l/I64YWGP3Z4E6ZFBAKJS22PN5R7,upperdir=/var/lib/containers/storage/overlay/92e5b09335dc1206f36bc26dfc2c6672082b02fc6eb21f8c38334523fdef835e/diff,workdir=/var/lib/containers/storage/overlay/92e5b09335dc1206f36bc26dfc2c6672082b02fc6eb21f8c38334523fdef835e/work,volatile +5990 5989 0:437 / /proc rw,nosuid,nodev,noexec,relatime - proc proc rw +5991 5989 0:438 / /dev rw,nosuid - tmpfs tmpfs rw,context="system_u:object_r:container_file_t:s0:c898,c999",size=65536k,mode=755,inode64 +5992 5991 0:439 / /dev/pts rw,nosuid,noexec,relatime - devpts devpts rw,context="system_u:object_r:container_file_t:s0:c898,c999",gid=5,mode=620,ptmxmode=666 +5993 5991 0:316 / /dev/mqueue rw,nosuid,nodev,noexec,relatime - mqueue mqueue rw,seclabel +5994 5989 0:440 / /sys ro,nosuid,nodev,noexec,relatime - sysfs sysfs ro,seclabel +5995 5994 0:441 / /sys/fs/cgroup rw,nosuid,nodev,noexec,relatime - tmpfs tmpfs rw,context="system_u:object_r:container_file_t:s0:c898,c999",mode=755,inode64 +5996 5995 0:27 /kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod19ccacf5_fcff_4bd3_a33a_19ff41f6ccd2.slice/crio-b4873629b312dc1d77472aba6fb177c6ce9a8f7c205ad7a03302726805007fe6.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 +5997 5995 0:30 /kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod19ccacf5_fcff_4bd3_a33a_19ff41f6ccd2.slice/crio-b4873629b312dc1d77472aba6fb177c6ce9a8f7c205ad7a03302726805007fe6.scope /sys/fs/cgroup/blkio ro,nosuid,nodev,noexec,relatime master:10 - cgroup cgroup rw,seclabel,blkio +5998 5995 0:31 /kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod19ccacf5_fcff_4bd3_a33a_19ff41f6ccd2.slice/crio-b4873629b312dc1d77472aba6fb177c6ce9a8f7c205ad7a03302726805007fe6.scope /sys/fs/cgroup/net_cls,net_prio ro,nosuid,nodev,noexec,relatime master:11 - cgroup cgroup rw,seclabel,net_cls,net_prio +5999 5995 0:32 /kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod19ccacf5_fcff_4bd3_a33a_19ff41f6ccd2.slice/crio-b4873629b312dc1d77472aba6fb177c6ce9a8f7c205ad7a03302726805007fe6.scope /sys/fs/cgroup/rdma ro,nosuid,nodev,noexec,relatime master:12 - cgroup cgroup rw,seclabel,rdma +6000 5995 0:33 /kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod19ccacf5_fcff_4bd3_a33a_19ff41f6ccd2.slice/crio-b4873629b312dc1d77472aba6fb177c6ce9a8f7c205ad7a03302726805007fe6.scope /sys/fs/cgroup/memory ro,nosuid,nodev,noexec,relatime master:13 - cgroup cgroup rw,seclabel,memory +6001 5995 0:34 /kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod19ccacf5_fcff_4bd3_a33a_19ff41f6ccd2.slice/crio-b4873629b312dc1d77472aba6fb177c6ce9a8f7c205ad7a03302726805007fe6.scope /sys/fs/cgroup/cpuset ro,nosuid,nodev,noexec,relatime master:14 - cgroup cgroup rw,seclabel,cpuset +6002 5995 0:35 /kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod19ccacf5_fcff_4bd3_a33a_19ff41f6ccd2.slice/crio-b4873629b312dc1d77472aba6fb177c6ce9a8f7c205ad7a03302726805007fe6.scope /sys/fs/cgroup/pids ro,nosuid,nodev,noexec,relatime master:15 - cgroup cgroup rw,seclabel,pids +6003 5995 0:36 /kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod19ccacf5_fcff_4bd3_a33a_19ff41f6ccd2.slice/crio-b4873629b312dc1d77472aba6fb177c6ce9a8f7c205ad7a03302726805007fe6.scope /sys/fs/cgroup/hugetlb ro,nosuid,nodev,noexec,relatime master:16 - cgroup cgroup rw,seclabel,hugetlb +6004 5995 0:37 /kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod19ccacf5_fcff_4bd3_a33a_19ff41f6ccd2.slice/crio-b4873629b312dc1d77472aba6fb177c6ce9a8f7c205ad7a03302726805007fe6.scope /sys/fs/cgroup/freezer ro,nosuid,nodev,noexec,relatime master:17 - cgroup cgroup rw,seclabel,freezer +6005 5995 0:38 /kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod19ccacf5_fcff_4bd3_a33a_19ff41f6ccd2.slice/crio-b4873629b312dc1d77472aba6fb177c6ce9a8f7c205ad7a03302726805007fe6.scope /sys/fs/cgroup/perf_event ro,nosuid,nodev,noexec,relatime master:18 - cgroup cgroup rw,seclabel,perf_event +6006 5995 0:39 /kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod19ccacf5_fcff_4bd3_a33a_19ff41f6ccd2.slice/crio-b4873629b312dc1d77472aba6fb177c6ce9a8f7c205ad7a03302726805007fe6.scope /sys/fs/cgroup/cpu,cpuacct ro,nosuid,nodev,noexec,relatime master:19 - cgroup cgroup rw,seclabel,cpu,cpuacct +6007 5995 0:40 /kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod19ccacf5_fcff_4bd3_a33a_19ff41f6ccd2.slice/crio-b4873629b312dc1d77472aba6fb177c6ce9a8f7c205ad7a03302726805007fe6.scope /sys/fs/cgroup/devices ro,nosuid,nodev,noexec,relatime master:20 - cgroup cgroup rw,seclabel,devices +6008 5995 0:41 /kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod19ccacf5_fcff_4bd3_a33a_19ff41f6ccd2.slice/crio-b4873629b312dc1d77472aba6fb177c6ce9a8f7c205ad7a03302726805007fe6.scope /sys/fs/cgroup/misc ro,nosuid,nodev,noexec,relatime master:21 - cgroup cgroup rw,seclabel,misc +6009 5991 0:315 / /dev/shm rw,nosuid,nodev,noexec,relatime master:766 - tmpfs shm rw,context="system_u:object_r:container_file_t:s0:c898,c999",size=65536k,inode64 +6010 5989 0:25 /containers/storage/overlay-containers/eff9d85aabab6d1fd3a244b1f22c6545132ef459ee6e4ead13f7abc2c963e6dc/userdata/resolv.conf /etc/resolv.conf rw,nosuid,nodev,noexec master:28 - tmpfs tmpfs rw,seclabel,size=6418660k,nr_inodes=819200,mode=755,inode64 +6011 5989 0:25 /containers/storage/overlay-containers/eff9d85aabab6d1fd3a244b1f22c6545132ef459ee6e4ead13f7abc2c963e6dc/userdata/hostname /etc/hostname rw,nosuid,nodev master:28 - tmpfs tmpfs rw,seclabel,size=6418660k,nr_inodes=819200,mode=755,inode64 +6012 5989 0:25 /containers/storage/overlay-containers/eff9d85aabab6d1fd3a244b1f22c6545132ef459ee6e4ead13f7abc2c963e6dc/userdata/.containerenv /run/.containerenv rw,nosuid,nodev master:28 - tmpfs tmpfs rw,seclabel,size=6418660k,nr_inodes=819200,mode=755,inode64 +6013 5989 252:4 /ostree/deploy/rhcos/var/lib/kubelet/pods/19ccacf5-fcff-4bd3-a33a-19ff41f6ccd2/etc-hosts /etc/hosts rw,relatime - xfs /dev/vda4 rw,seclabel,attr2,inode64,logbufs=8,logbsize=32k,prjquota +6014 5991 252:4 /ostree/deploy/rhcos/var/lib/kubelet/pods/19ccacf5-fcff-4bd3-a33a-19ff41f6ccd2/containers/accountingservice/640fe7ac /dev/termination-log rw,relatime - xfs /dev/vda4 rw,seclabel,attr2,inode64,logbufs=8,logbsize=32k,prjquota +6015 5989 0:307 / /run/secrets/kubernetes.io/serviceaccount ro,relatime - tmpfs tmpfs rw,seclabel,size=30942320k,inode64 +5587 5990 0:437 /bus /proc/bus ro,nosuid,nodev,noexec,relatime - proc proc rw +5588 5990 0:437 /fs /proc/fs ro,nosuid,nodev,noexec,relatime - proc proc rw +5590 5990 0:437 /irq /proc/irq ro,nosuid,nodev,noexec,relatime - proc proc rw +5591 5990 0:437 /sys /proc/sys ro,nosuid,nodev,noexec,relatime - proc proc rw +5592 5990 0:437 /sysrq-trigger /proc/sysrq-trigger ro,nosuid,nodev,noexec,relatime - proc proc rw +5593 5990 0:442 / /proc/acpi ro,relatime - tmpfs tmpfs ro,context="system_u:object_r:container_file_t:s0:c898,c999",inode64 +5594 5990 0:438 /null /proc/kcore rw,nosuid - tmpfs tmpfs rw,context="system_u:object_r:container_file_t:s0:c898,c999",size=65536k,mode=755,inode64 +5595 5990 0:438 /null /proc/keys rw,nosuid - tmpfs tmpfs rw,context="system_u:object_r:container_file_t:s0:c898,c999",size=65536k,mode=755,inode64 +5596 5990 0:438 /null /proc/timer_list rw,nosuid - tmpfs tmpfs rw,context="system_u:object_r:container_file_t:s0:c898,c999",size=65536k,mode=755,inode64 +5597 5990 0:443 / /proc/scsi ro,relatime - tmpfs tmpfs ro,context="system_u:object_r:container_file_t:s0:c898,c999",inode64 +5598 5994 0:444 / /sys/firmware ro,relatime - tmpfs tmpfs ro,context="system_u:object_r:container_file_t:s0:c898,c999",inode64