[root@machine /]# hostnamectl
Static hostname: machine
Icon name: computer-server
Chassis: server
Machine ID: 3342db489c014533b01ac7ebf64a59e0
Boot ID: cffcc4cf0a9141dd871335c015f0650a
Operating System: Red Hat Enterprise Linux 8.8 (Ootpa)
CPE OS Name: cpe:/o:redhat:enterprise_linux:8::baseos
Kernel: Linux 4.18.0-477.55.1.el8_8.x86_64
Architecture: x86-64
[root@machine /]# cadvisor --version
cAdvisor version v0.49.1 (6f3f25ba)
Problem:
Cadvisor does not collect metrics when podman-docker is installed
# rpm -qa | grep podman-docker podman-docker-4.4.1-19.module+el8.8.0+21741+dd5be1e7.noarch
This package installs a script named docker that emulates the Docker CLI by executes podman commands, it also creates links between all Docker CLI man pages and podman.
When tried to run cadvisor ( v0.49.1 ) binary it returns with following error
I0624 10:09:20.158369 669512 factory.go:352] Registering Docker factory
I0624 10:09:20.158396 669512 factory.go:221] Registration of the docker container factory successfully
I0624 10:09:20.595080 669512 plugin.go:89] Registering Podman factory
W0624 10:09:22.391362 669512 plugin.go:105] Podman rootless containers not working with cgroups v1!
I0624 10:09:22.391386 669512 factory.go:221] Registration of the podman container factory successfully
.
.
E0624 10:14:12.424102 684886 manager.go:1116] Failed to create existing container: /machine.slice/machine-libpod_pod_f97d9e5122f0e6941b5064c07338676adc6e973319abdf7e7c2b28a6b74debaa.slice/libpod-13e0ee6ba4eb38d8b31a9afdfbc72a1529c9b841adaf1b1c232f9e7f7cdd2f92.scope: failed to identify the read-write layer ID for container "13e0ee6ba4eb38d8b31a9afdfbc72a1529c9b841adaf1b1c232f9e7f7cdd2f92". - open /var/lib/containers/storage/image/overlay/layerdb/mounts/13e0ee6ba4eb38d8b31a9afdfbc72a1529c9b841adaf1b1c232f9e7f7cdd2f92/mount-id: no such file or directory
E0624 10:14:12.439989 684886 manager.go:1116] Failed to create existing container: /machine.slice/libpod-1618ef4de6fafc7b4695d00d8eb993d9e5890fae72d5af79eb42f29635ca13e7.scope: failed to identify the read-write layer ID for container "1618ef4de6fafc7b4695d00d8eb993d9e5890fae72d5af79eb42f29635ca13e7". - open /var/lib/containers/storage/image/overlay/layerdb/mounts/1618ef4de6fafc7b4695d00d8eb993d9e5890fae72d5af79eb42f29635ca13e7/mount-id: no such file or directory
After further debugging, found docker factory tried to read -
I0619 12:30:17.191319 3651243 factory.go:279] Using factory "docker" for container "/machine.slice/13e0ee6ba4eb38d8b31a9afdfbc72a1529c9b841adaf1b1c232f9e7f7cdd2f92.service"
Solution:
When we used podman-docker package, system has unix socket path for both podman and docker
/run/docker.sock /run/podman/podman.sock
Hence, cadvisor was able to call both podman and docker APIs, and registers factory for both.
I0624 10:25:21.191734 720196 factory.go:352] Registering Docker factory
I0624 10:25:21.191757 720196 factory.go:221] Registration of the docker container factory successfully
I0624 10:25:21.631911 720196 plugin.go:89] Registering Podman factory
W0624 10:25:23.453891 720196 plugin.go:105] Podman rootless containers not working with cgroups v1!
I0624 10:25:23.453911 720196 factory.go:221] Registration of the podman container factory successfully
_When tried cadvisor running with only podman unix socket (by giving empty value to flag for docker unix socket path) -
./cadvisor-v0.49.1-linux-amd64 --podman=unix:///run/podman/podman.sock --docker=unix://
I0624 10:28:50.554944 731305 factory.go:219] Registration of the docker container factory failed: failed to validate Docker info: failed to detect Docker info: error during connect: Get "http:///v1.24/info": http: no Host in request URL
I0624 10:28:51.154913 731305 plugin.go:89] Registering Podman factory
W0624 10:28:51.789149 731305 plugin.go:105] Podman rootless containers not working with cgroups v1!
I0624 10:28:51.789168 731305 factory.go:221] Registration of the podman container factory successfully
Cadvisor is working as expected
No above error - Failed to create existing container:...
Collected data for containers with image and name
# curl http://localhost:8080/metrics | grep container_cpu_system_seconds_total
container_cpu_system_seconds_total{container_label_architecture="x86_64",container_label_build_date="2024-06-06T00:48:40",container_label_com_redhat_component="ubi9-...",container_label_io_k8s_display_name="Red Hat Universal Base Image 9",container_label_io_openshift_expose_services="",container_label_io_openshift_tags="base rhel9",container_label_maintainer="Red Hat, Inc.",container_label_name="ubi9",container_label_release="1123",container_label_summary="Provides the latest release of Red Hat Universal Base Image 9.",container_label_url="https://access.redhat.com/containers/#/registry.access.redhat.com/ubi9/images/9.4-1123",container_label_vcs_ref="92a4a475241865d0d11bd861fb2b29fbd9b17df0",container_label_vcs_type="git",container_label_vendor="Red Hat, Inc.",container_label_version="9.4",id="/machine.slice/libpod-49385cbc66da72004fe10721bfc6fd3cda9d74cf317a015e404800ca137637e6.scope",image="registry.access.redhat.com/ubi9/ubi:latest",name="serene_blackburn"} 1.54 1719225219156
podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
49385cbc66da registry.access.redhat.com/ubi9/ubi:latest /bin/bash 10 days ago Up 10 days ago serene_blackburn
@dashpole @Creatone @iwankgb
Is it valid workaround to use cadvisor binary( v0.49.1) for podman-docker system by not registering docker factory by giving empty/wrong unix socket path to docker?
System:
Problem: Cadvisor does not collect metrics when podman-docker is installed
# rpm -qa | grep podman-docker podman-docker-4.4.1-19.module+el8.8.0+21741+dd5be1e7.noarch
This package installs a script named docker that emulates the Docker CLI by executes podman commands, it also creates links between all Docker CLI man pages and podman.
When tried to run cadvisor ( v0.49.1 ) binary it returns with following error
After further debugging, found docker factory tried to read -
I0619 12:30:17.191319 3651243 factory.go:279] Using factory "docker" for container "/machine.slice/13e0ee6ba4eb38d8b31a9afdfbc72a1529c9b841adaf1b1c232f9e7f7cdd2f92.service"
Solution: When we used podman-docker package, system has unix socket path for both podman and docker
/run/docker.sock /run/podman/podman.sock
Hence, cadvisor was able to call both podman and docker APIs, and registers factory for both._When tried cadvisor running with only podman unix socket (by giving empty value to flag for docker unix socket path) -
./cadvisor-v0.49.1-linux-amd64 --podman=unix:///run/podman/podman.sock --docker=unix://
Cadvisor is working as expected
Failed to create existing container:...
podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 49385cbc66da registry.access.redhat.com/ubi9/ubi:latest /bin/bash 10 days ago Up 10 days ago serene_blackburn