---
title: "cAdvisor + Prometheus + Grafana: Building a Container Resource Monitoring System"
description: "This guide explains how to use cAdvisor with Prometheus and Grafana to comprehensively monitor Docker container resources—including CPU, memory, disk, and network—and visualize the data by importing a Grafana Dashboard."
canonical_url: "https://blog.markkulab.net/en/post/prometheus-grafana-docker-monitoring"
author: "Mark Ku"
author_url: "https://blog.markkulab.net/en/author/mark-ku"
site: "Mark Ku's Tech Notes"
date_published: "2024-11-26T01:01:35+08:00"
category: "Cloud"
tags: ["prometheus", "grafana", "docker", "cadvisor", "monitoring", "container"]
language: "en"
license: "CC BY 4.0"
license_url: "https://creativecommons.org/licenses/by/4.0/"
attribution: "when reusing or quoting, credit the author and link back to the original"
---

# cAdvisor + Prometheus + Grafana: Building a Container Resource Monitoring System

## Introduction

[In a previous article, we showed how to use Prometheus to monitor Nginx performance](https://blog.markkulab.net/prometheus-monitoring-nginx-requests/). With the growing popularity of containerization, monitoring Docker container resource usage is equally important. This article will introduce how to use **cAdvisor** (Container Advisor) in combination with Prometheus and Grafana to comprehensively monitor Docker container resources like CPU, memory, disk, and network.

## What is cAdvisor?
**cAdvisor** is an open-source tool developed by Google for real-time monitoring of container resource usage and performance data. Compared to basic Docker commands (like `docker stats`), cAdvisor provides more detailed data and a graphical interface for querying, and it integrates seamlessly with Prometheus and Grafana.

## Installing and Deploying cAdvisor

First, we need to start the cAdvisor container to collect Docker resource data.

### Starting the cAdvisor Container

Use the following command to start the cAdvisor container:

```bash
docker run \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:rw \
  --volume=/sys:/sys:ro \
  --volume=/var/lib/docker/:/var/lib/docker:ro \
  --publish=8884:8080 \
  --detach=true \
  --name=cadvisor \
  google/cadvisor:latest
```

This will start cAdvisor on local port **8884**.

### Accessing cAdvisor

After it starts, open your browser and navigate to [http://localhost:8884](http://localhost:8884) to check the cAdvisor dashboard, as shown in the image below:

![cAdvisor Dashboard](https://blog.markkulab.net/content/markku/posts/prometheus-grafana-docker-monitoring/images/cAdvisor.png)

## Configuring Prometheus to Monitor cAdvisor

Next, we'll modify the Prometheus configuration file to add a scrape job for cAdvisor.

### Refer to the [config files in the Github Repo](https://github.com/markku636/Prometheus) from the previous article on monitoring Nginx with Prometheus


Copy the Prometheus scraper configuration file `prometheus.yaml`, rename it to `prometheus-with-cadvisor.yaml`, and add the following content to the configuration file:

```yaml
- job_name: "cadvisor"
  static_configs:
    - targets: ["cadvisor:8080"]  # cAdvisor 的服務地址和埠號
```
Copy the deployment configuration file `deployment.yaml` and rename it to `deployment-with-cadvisor.yaml`.

```
  cadvisor:
    image: gcr.io/cadvisor/cadvisor:latest
    container_name: cadvisor
    ports:
      - "8884:8080" # cAdvisor 預設埠號
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro    
```
Build and run the containers.
```
docker-compose -f ./deployment-with-cadvisor.yaml up -d

```

## Verifying the Prometheus Configuration
Check the Prometheus scraper Targets page at [http://localhost:9090/targets](http://localhost:9090/targets) to confirm that cAdvisor has been discovered and is being scraped correctly:

![Prometheus Target](https://blog.markkulab.net/content/markku/posts/prometheus-grafana-docker-monitoring/images/prometheus-target.png)

## Visualizing Data with Grafana

**Grafana** provides powerful data visualization capabilities. Here are the steps to integrate cAdvisor data into a Grafana dashboard:

### Download a Grafana Dashboard

Download the cAdvisor dashboard from the [official Grafana Dashboards site](https://grafana.com/grafana/dashboards/16314-docker-container-os-node-node-exporter-cadvisor/).

### Import the Dashboard

Go to your Grafana dashboard, click "Import," and upload the downloaded JSON file to Grafana.

![Import Dashboard](https://blog.markkulab.net/content/markku/posts/prometheus-grafana-docker-monitoring/images/dashboard.png)

Once the import is complete, you will see real-time container monitoring data, including CPU, memory, disk, and network usage.

## Summary

By combining cAdvisor, Prometheus, and Grafana, we can achieve comprehensive monitoring of Docker container resources, helping us manage and optimize containerized applications more efficiently.

### Related Links

- [Prometheus Official Documentation](https://prometheus.io/docs/)
- [Grafana Official Dashboard Market](https://grafana.com/grafana/dashboards/)
- [Prometheus and Grafana Docker Example](https://yunlzheng.gitbook.io/prometheus-book/part-ii-prometheus-jin-jie/exporter/commonly-eporter-usage/use-prometheus-monitor-container)
- [GKE Prometheus](https://hackmd.io/@tN16s2COSmCKkIg6NfGrUQ/HJ5JNYea2?utm_source=preview-mode&utm_medium=rec)

---

## About this article and its author

Originally published on [Mark Ku's Tech Notes](https://blog.markkulab.net/en/post/prometheus-grafana-docker-monitoring)

License: [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) — when reusing or quoting, credit the author and link back to the original

### About the author

**[Mark Ku](https://blog.markkulab.net/en/author/mark-ku)** — Software Solution Provider

- 10+ years senior software engineer, now an AI Builder
- Focused on large-platform architecture — North-American e-commerce, AI SaaS subscription billing
- Combining AI Agents and automation to build evolvable product foundations

### Free tools built by the author

All of these are free to use:

- [Free PDF Sign Tool](https://blog.markkulab.net/en/tools/pdf-sign): Online PDF sign tool — draw, type, or upload a signature, then drag, resize, and download. Everything runs in your browser; nothing is uploaded.
- [VS Code Refactory](https://blog.markkulab.net/en/tools/refactory): Refactory is a VS Code refactoring extension: 34 actions plus a 37-rule code-smell inspection layer with a Code Health dashboard, across 18 languages, backed by 534 tests. It learns your repo's conventions: where interfaces live, where DI is registered, whether 'use client' belongs. It ranks files by git churn × complexity so you know what to fix first, and hands any smell to the Claude Code already on your machine. Free to use, and your source never leaves your computer.
- [DB-Kit Database Manager](https://blog.markkulab.net/en/tools/db-kit): DB-Kit is a lightweight, cross-platform database manager built with Tauri + Rust + React. Manage MySQL, MariaDB, PostgreSQL, SQL Server, Oracle, SQLite, MongoDB, Redis, Kafka, Elasticsearch and RabbitMQ from one consistent interface: passwords encrypted in the OS keychain, SSH tunnels, full CRUD, a visual query builder, stacked multi-statement result sets, cross-connection data transfer and compare/sync, Excel / CSV import & export, visualized execution plans, ER diagrams, scheduled backups, SQL stress testing with p50–p99 latency percentiles, a 15-rule SQL review engine, Kafka message browsing with monitoring & alerts, a bilingual UI (Traditional Chinese / English), a built-in AI assistant (natural-language SQL, AI review and tuning advice) and the dbk CLI. Free and open source (MIT), with installers for Windows, macOS and Linux.
- [VS Code Super Mermaid](https://blog.markkulab.net/en/tools/super-mermaid): Super Mermaid is a VS Code extension for beautiful Mermaid diagrams out of the box: auto-colored live preview, mouse pan & zoom, high-res PNG / SVG export, 21 templates and multiple themes. Free and open source (MIT).
- [React Super Mermaid](https://blog.markkulab.net/en/tools/react-super-mermaid): react-super-mermaid is an open-source React component library: render beautiful Mermaid diagrams with a single <MermaidViewer>, with built-in colorful / sketch themes, pan & zoom, in-diagram search, and high-res SVG / PNG export. Lightweight, SSR-safe, fully typed. Free and open source (MIT).
- [Jira / Confluence Super Mermaid](https://blog.markkulab.net/en/tools/jira-super-mermaid): An Atlassian Forge app: write Mermaid syntax directly inside a Jira issue or a Confluence page and get flowcharts, sequence diagrams, state machines and Gantt charts. 11 diagram types, SVG / PNG export, light and dark themes, full CJK support. Runs on Atlassian: your diagrams live in your own site and the app calls no third-party service. Free, coming soon to the Atlassian Marketplace.
- [Mermaid Live Preview](https://blog.markkulab.net/en/tools/mermaid-preview): Write Mermaid in your browser, see it render instantly, and share the whole diagram as a single link. No sign-up, nothing uploaded to a server, and mermaid.live share links work as-is.
- [React Intl Phone Number](https://blog.markkulab.net/en/tools/react-intl-phone-number): react-intl-phone-number is an open-source React component: framework-agnostic and antd-free, with E.164 in/out, a searchable flag / country-code dropdown, configurable validation levels (strict / mobile-strict / loose), themeable CSS, and i18n — phone logic powered by google-libphonenumber. Lightweight and fully typed. Free and open source (MIT).
- [Uptime Kuma Cluster](https://blog.markkulab.net/en/tools/uptime-kuma-cluster): Turn single-node Uptime Kuma into a highly available cluster: OpenResty + Lua smart load balancing, shared MariaDB state, health checks and automatic failover, plus cluster-management REST APIs. One Docker Compose command to start. Free and open source (MIT).
- [Special Education](https://blog.markkulab.net/en/education): Learning materials crafted for special education students

### Daily podcasts

- [Mark's Tech Insights — Daily AI News](https://blog.markkulab.net/en/category/tech-news): Daily curated AI and tech trends. Catch the latest developments via audio summaries — covering AI applications, software architecture, DevOps, and engineering practice. — RSS: https://blog.markkulab.net/feed.xml
- [AI股市蝦聊](https://blog.markkulab.net/en/category/ai-stock-chat): Every trading day, an AI-analyzed take on the Taiwan stock market, delivered as a two-host conversation covering the session and the next-day outlook. — RSS: https://blog.markkulab.net/ai-stock-chat/feed.xml
- [開源好物週報](https://blog.markkulab.net/en/category/open-source-weekly): A weekly two-host pick of free open-source tools surfaced from real Hacker News, GitHub, and Reddit buzz — what pain they solve and the fastest way to get started. — RSS: https://blog.markkulab.net/open-source-weekly/feed.xml

### Newsletter

[Subscribe to the newsletter](https://blog.markkulab.net/en/subscribe) — Be the first to know about new posts. No spam, unsubscribe anytime.
