Monitoring Docker container metrics using cAdvisor

    • create a local multi-container Docker Compose installation that includes containers running Prometheus, cAdvisor, and a server, respectively
    • examine some container metrics produced by the Redis container, collected by cAdvisor, and scraped by Prometheus

    First, you’ll need to configure Prometheus to scrape metrics from cAdvisor. Create a file and populate it with this configuration:

    Docker Compose configuration

    Now we’ll need to create a Docker Compose configuration that specifies which containers are part of our installation as well as which ports are exposed by each container, which volumes are used, and so on.

    In the same folder where you created the file, create a docker-compose.yml file and populate it with this Docker Compose configuration:

    1. version: '3.2'
    2. services:
    3. prometheus:
    4. image: prom/prometheus:latest
    5. container_name: prometheus
    6. ports:
    7. - 9090:9090
    8. - --config.file=/etc/prometheus/prometheus.yml
    9. volumes:
    10. - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
    11. depends_on:
    12. - cadvisor
    13. cadvisor:
    14. image: gcr.io/cadvisor/cadvisor:latest
    15. container_name: cadvisor
    16. - 8080:8080
    17. volumes:
    18. - /:/rootfs:ro
    19. - /var/run:/var/run:rw
    20. - /sys:/sys:ro
    21. - /var/lib/docker/:/var/lib/docker:ro
    22. - redis
    23. redis:
    24. image: redis:latest
    25. container_name: redis
    26. ports:
    27. - 6379:6379

    This configuration instructs Docker Compose to run three services, each of which corresponds to a Docker container:

    1. The prometheus service uses the local prometheus.yml configuration file (imported into the container by the volumes parameter).
    2. The cadvisor service exposes port 8080 (the default port for cAdvisor metrics) and relies on a variety of local volumes (, /var/run, etc.).
    3. The redis service is a standard Redis server. cAdvisor will gather container metrics from this container automatically, i.e. without any further configuration.

    If Docker Compose successfully starts up all three containers, you should see output like this:

    1. prometheus | level=info ts=2018-07-12T22:02:40.5195272Z caller=main.go:500 msg="Server is ready to receive web requests."

    You can verify that all three containers are running using the command:

    Your output will look something like this:

    1. Name Command State Ports
    2. ----------------------------------------------------------------------------
    3. cadvisor /usr/bin/cadvisor -logtostderr Up 8080/tcp
    4. prometheus /bin/prometheus --config.f ... Up 0.0.0.0:9090->9090/tcp
    5. redis docker-entrypoint.sh redis ... Up 0.0.0.0:6379->6379/tcp

    You can access the cAdvisor web UI at http://localhost:8080. You can explore stats and graphs for specific Docker containers in our installation at http://localhost:8080/docker/<container>. Metrics for the Redis container, for example, can be accessed at http://localhost:8080/docker/redis, Prometheus at http://localhost:8080/docker/prometheus, and so on.

    Exploring metrics in the expression browser

    Let’s start by exploring the container_start_time_seconds metric, which records the start time of containers (in seconds). You can select for specific containers by name using the name="<container_name>" expression. The container name corresponds to the container_name parameter in the Docker Compose configuration. The container_start_time_seconds{name=”redis”} expression, for example, shows the start time for the redis container.

    NOTE: A full listing of cAdvisor-gathered container metrics exposed to Prometheus can be found in the .

    The table below lists some other example expressions

    Summary