Ubuntu cAdvisorでDockerコンテナのメトリクスをPrometheusで可視化

モニタリング

この記事のポイント

  • cAdvisor は apt リポジトリに収録されていないため、gcr.io/cadvisor/cadvisor の公式Dockerイメージ(v0.55.1)を使う
  • Prometheus は Docker版(3.12.0)が apt版(2.45系)より大幅に新しい。15秒ごとに cAdvisor の /metrics をスクレイプする
  • 実測で cAdvisor は 15.1 MiB / 約2.0% CPU、Prometheus は 37.1 MiB / 約0.4% CPU。2つ合わせても 合計52 MiB と軽量
  • cAdvisor が公開するメトリクスは実測で 109種・5,062行。CPU・メモリ・ネットワーク・ディスクを網羅
  • 同じ Docker ネットワークに載せれば cadvisor:8080 をスクレイプ先に書くだけで疎通する。Prometheus UI(:9090)の Targets が UP になれば成功

「Dockerコンテナが何個も動いているけど、どれがメモリを食っているのか分からない」──VPSでDockerを運用し始めると、必ずこの悩みにぶつかります。本記事では cAdvisor(Container Advisor)と Prometheus を組み合わせて、Dockerコンテナのメトリクスをリアルタイムで可視化する方法を、実際に動かしながら解説します。

結論から言うと、コンテナを2つ起動して設定ファイルを1枚書くだけでコンテナ監視が始められます。2026年6月15日に Docker 20.10.12 環境で cAdvisor v0.55.1 + Prometheus 3.12.0 を実際にセットアップし、メトリクス・リソース使用量・Prometheus UI の動作を確認しました。スクリーンショットもすべて実画面です。

注意

本記事のコマンドは Docker 20.10.12 で検証しています。Docker がまだ入っていない場合は先にインストールしてください(Ubuntu 24.04 に Docker をインストールする方法)。ホストOSが Ubuntu 24.04 LTS でもコマンドは同じです。

目次

  1. cAdvisorとPrometheusでできること
  2. バージョンを実測で確認する
  3. cAdvisorをDockerで起動する
  4. PrometheusをDockerで起動する
  5. メトリクスとリソース使用量を確認する
  6. Prometheus UIでクエリを実行する
  7. よくあるエラーと解決策
  8. まとめ

cAdvisorとPrometheusでできること

cAdvisor(Container Advisor)は Google が開発したOSSで、ホスト上で動いているDockerコンテナのリソース使用量(CPU・メモリ・ネットワーク・ディスク)を自動で収集し、/metrics エンドポイントで公開します。コンテナの cgroup(リソース制御の仕組み)統計を読み取るので、監視対象側に何も仕込む必要がありません。

Prometheusは cAdvisor の /metrics を定期的に取得(スクレイプ)して時系列データベース(TSDB)に蓄積し、独自のクエリ言語 PromQL でグラフ化・アラート設定ができるモニタリングシステムです。

cAdvisorからPrometheusへのデータフロー(概念図)
cAdvisorからPrometheusへのデータフロー(概念図)

図のとおり、コンテナ群 → cAdvisor → Prometheus → 可視化、という流れです。2台のコンテナを起動するだけでこの仕組みが動き始めます。正直、「こんなに簡単に始められるのか」と少し驚きました。

バージョンを実測で確認する

まず実際に動かすバージョンを確認します。cAdvisor は apt リポジトリには収録されていないため、Dockerイメージで取得するのが正しい方法です。2026年6月15日時点で gcr.io/cadvisor/cadvisor の最新は v0.55.1 でした。




ubuntu@linuxlab: ~
$ docker run –rm –entrypoint /usr/bin/cadvisor gcr.io/cadvisor/cadvisor:v0.55.1 –version
cAdvisor version v0.55.1 (f5bec374)
$ docker run –rm prom/prometheus:v3.12.0 –version
prometheus, version 3.12.0 (branch: HEAD, revision: 9f27dffc1f93ca23287972f632025879f2d1c658)
build date: 20260528-15:53:38
go version: go1.26.3
platform: linux/arm64

一方で、Ubuntu 24.04 の apt で同じものを探すとどうなるか。実際に apt-cache policyapt-get install -s(シミュレーション)を叩いてみました。




ubuntu@linuxlab: ~
$ apt-cache policy cadvisor
$ apt-get install -s cadvisor
E: Unable to locate package cadvisor
$ apt-cache policy prometheus
prometheus:
Installed: (none)
Candidate: 2.45.3+ds-2ubuntu0.3

cadvisorapt にそもそも存在せずE: Unable to locate package cadvisor)、Prometheus も apt版は 2.45系どまりでした。Docker版(3.12.0)の方が大幅に新しいので、両方ともDockerイメージを使うのが正解です。

cAdvisor・Prometheusバージョン一覧(実測)
cAdvisor・Prometheusバージョン一覧(実測)

cAdvisorをDockerで起動する

手順1:監視用のDockerネットワークを作る

cAdvisor と Prometheus を同じユーザー定義ネットワークに載せておくと、コンテナ名(cadvisor)でお互いを呼べるようになり、スクレイプ設定がぐっと楽になります。先にネットワークを作っておきましょう。




ubuntu@linuxlab: ~
$ docker network create monitoring
f3c1a9b2e8d7…

手順2:cAdvisorコンテナを起動する

cAdvisor はホストの Docker ソケットや /sys などのシステムディレクトリをマウントしてコンテナ情報を収集します。ホスト全体のリソースを読むため --privileged フラグが必要です。




ubuntu@linuxlab: ~
$ docker run -d \
–name cadvisor \
–network monitoring \
-p 8080:8080 \
–volume=/:/rootfs:ro \
–volume=/var/run:/var/run:ro \
–volume=/sys:/sys:ro \
–volume=/var/lib/docker/:/var/lib/docker:ro \
–volume=/dev/disk/:/dev/disk:ro \
–privileged \
gcr.io/cadvisor/cadvisor:v0.55.1

起動したら /healthz エンドポイントで生存確認をします。実測では起動から数秒で ok が返り、コンテナの状態も running になりました。




ubuntu@linuxlab: ~
$ curl -s http://localhost:8080/healthz
ok
$ docker inspect –format ‘{{.State.Status}}’ cadvisor
running

手順3:cAdvisor WebUIを確認する

ブラウザで http://localhost:8080/ を開くと、フクロウのロゴでおなじみの cAdvisor ダッシュボードが表示されます。ルート階層には「Docker Containers」「Podman Containers」へのリンクと、ホスト上の各 cgroup(Subcontainers)が並びます。

cAdvisorホーム画面(実画面・Playwright撮影)
cAdvisorホーム画面(実画面・Playwright撮影)

/docker/ にアクセスすると、Docker デーモンの情報(Driver Status)が表示されます。実画面では Docker 20.10.12 / API 1.41 / Kernel 5.10.76-linuxkit / コンテナ数30 などが読み取れました。

cAdvisorのDocker情報画面(実画面)
cAdvisorのDocker情報画面(実画面)

さらに個別の階層に入ると、コンテナごとの CPU・メモリ・ネットワークがリアルタイムで集計されているのが分かります。

cAdvisorのコンテナ階層詳細(実画面)
cAdvisorのコンテナ階層詳細(実画面)

PrometheusをDockerで起動する

手順4:Prometheus設定ファイルを作る

Prometheus が cAdvisor のメトリクスを取得するよう設定ファイルを作ります。ここだけは順番を間違えると動きません──先に設定ファイルを作ってからコンテナを起動する必要があります。




ubuntu@linuxlab: ~
$ mkdir -p ~/monitoring && cat > ~/monitoring/prometheus.yml << ‘EOF’
global:
scrape_interval: 15s

scrape_configs:
– job_name: ‘cadvisor’
static_configs:
– targets: [‘cadvisor:8080’]
metrics_path: /metrics
EOF

scrape_interval: 15s は15秒ごとにスクレイプする設定です。スクレイプ先を cadvisor:8080 とコンテナ名で書ける点がポイントで、同じ monitoring ネットワークに載せているおかげでDNS解決が自動で効きます。

手順5:PrometheusコンテナをDockerで起動する




ubuntu@linuxlab: ~
$ docker run -d \
–name prometheus \
–network monitoring \
-p 9090:9090 \
-v ~/monitoring/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus:v3.12.0

必ず --network monitoring を付けてください。これを忘れると Prometheus から cadvisor という名前が解決できず、後述の Targets が DOWN になります。

手順6:起動状態を確認する

起動できたら docker stats でリソース使用量を見てみましょう。実測では次のような値でした。




ubuntu@linuxlab: ~
$ docker stats –no-stream cadvisor prometheus
NAME CPU % MEM USAGE / LIMIT PIDS
cadvisor 1.83% 15.86MiB / 11.68GiB 12
prometheus 0.41% 36.91MiB / 11.68GiB 10

3回サンプリングした平均で、cAdvisor は約 15.1 MiB / 2.0% CPU、Prometheus は約 37.1 MiB / 0.4% CPU。2コンテナ合計でも 52 MiB ほどです。VPS の 1GB プランでも余裕で動かせる軽さでした。

cAdvisor・Prometheusリソース使用量(実測)
cAdvisor・Prometheusリソース使用量(実測)

メトリクスとリソース使用量を確認する

cAdvisorの /metrics エンドポイントを確認する

cAdvisor が公開するメトリクスは curl http://localhost:8080/metrics で確認できます。実測では 5,062行、メトリクス名で数えて 109種が返ってきました。




ubuntu@linuxlab: ~
$ curl -s http://localhost:8080/metrics | grep -vc ‘^#’
5062
$ curl -s http://localhost:8080/metrics | grep -v ‘^#’ | sed ‘s/[ {].*//’ | sort -u | wc -l
109
$ curl -s http://localhost:8080/metrics | grep ‘^# HELP container_cpu_usage_seconds_total’
# HELP container_cpu_usage_seconds_total Cumulative cpu time consumed in seconds.

主要なメトリクスを表にまとめました。Prometheus からクエリするときに使うメトリクス名なので、よく使うものは覚えておくと便利です。

cAdvisorが収集する主要メトリクス一覧(実測)
cAdvisorが収集する主要メトリクス一覧(実測)

Prometheus UIでクエリを実行する

http://localhost:9090/ にアクセスすると Prometheus の Web UI が開きます。3.12系はモダンなUIになっており、起動直後は「No data queried yet」と表示されます。

PrometheusのWebUI(実画面・Playwright撮影)
PrometheusのWebUI(実画面・Playwright撮影)

Targetsでスクレイプ状態を確認する

まず Status → Target health メニューを確認します。cAdvisor が UP になっていれば、Prometheus が正常にメトリクスを取得できています。実画面では http://cadvisor:8080/metrics1/1 up、スクレイプ時間は約29msでした。

PrometheusのTargets画面(cAdvisorがUP状態)
PrometheusのTargets画面(cAdvisorがUP状態)

コマンドラインから確認したい場合は /api/v1/targets を叩くと、"health":"up" が確認できます。




ubuntu@linuxlab: ~
$ curl -s http://localhost:9090/api/v1/targets | python3 -m json.tool | grep -E ‘health|scrapeUrl’
“scrapeUrl”: “http://cadvisor:8080/metrics”,
“health”: “up”,

PromQLクエリでコンテナのCPUを可視化する

Prometheus UI の Expression フォームに以下のクエリを入力して Execute を押すと、コンテナ別のCPU使用率が取得できます。実測ではこのクエリが 64系列を返しました。




Prometheus Expression
rate(container_cpu_usage_seconds_total[1m])
PrometheusでのPromQLクエリ実行結果
PrometheusでのPromQLクエリ実行結果

そのほか、よく使う PromQL クエリをまとめました。{name!=""} を付けるとDockerコンテナだけに絞り込めます。

Prometheusクエリ例(cAdvisorメトリクス)
Prometheusクエリ例(cAdvisorメトリクス)
著者アイコン
著者アイコン

Prometheus UIだけでも十分グラフが見られますが、もっとリッチなダッシュボードが欲しい場合は Grafana を追加するのがおすすめです。Grafana には cAdvisor 用のダッシュボードテンプレートが公式で配布されています(Dashboard ID: 14282)。Prometheusとの連携手順は Node Exporter + Prometheus の記事でも触れています。

よくあるエラーと解決策

①Prometheus の Targets が DOWN になる

エラー例

Get "http://cadvisor:8080/metrics": dial tcp: lookup cadvisor: no such host

Prometheus コンテナに --network monitoring を付け忘れています。cAdvisor と同じネットワークに載せていないとコンテナ名 cadvisor が解決できません。両方のコンテナに --network monitoring が付いているか確認して再起動してください。

なお、コンテナを別々のネットワークで動かしたい場合は、スクレイプ先を host.docker.internal:8080 にして、Prometheus 起動時に --add-host=host.docker.internal:host-gateway を付ける方法もあります。本記事のように共有ネットワークを使う方がシンプルです。

②cAdvisorが –privileged なしで起動できない

エラー例

Error response from daemon: ... Permission denied

--privileged フラグは cAdvisor がホストのシステム情報(/sys/proc)を読むために必要です。省略するとパーミッションエラーになります。VPS環境では通常 root 権限があるため問題ありませんが、一部の制限環境では動かせないことがあります。

③/docker/ 画面で「Cannot connect to the Docker daemon」と出る

cAdvisor の Docker 連携には Docker ソケットが必要です。--volume=/var/run:/var/run:ro でホストの /var/run をマウントしていれば docker.sock も含まれます。環境によってはソケットを明示的に --volume=/var/run/docker.sock:/var/run/docker.sock:ro とマウントすると確実です。

④メトリクスがすぐに取れない

scrape_interval を 15s に設定している場合、起動直後はデータがありません。15〜30秒待ってからクエリを実行してください。Targets 画面の「Last scrape」の時刻が更新されていれば正常です。

まとめ

cAdvisor + Prometheus を使った Docker コンテナ監視の構築手順をまとめます。

  • cAdvisor は apt 非対応。gcr.io/cadvisor/cadvisor:v0.55.1 の Docker イメージを使う
  • Prometheus は Docker版(3.12.0)が apt版(2.45系)より大幅に新しい
  • 実測でリソース消費は cAdvisor 15.1 MiB + Prometheus 37.1 MiB。合計52 MiB と軽量
  • cAdvisor が公開するメトリクスは実測で 109種・5,062行。CPU・メモリ・ネットワーク・ディスクを網羅
  • 同じ Docker ネットワークに載せれば cadvisor:8080 をスクレイプ先に書くだけで疎通する
  • 本番運用ではさらに Grafana を追加してダッシュボードを作るのがおすすめ(Dashboard ID 14282)

本格的に VPS でサーバーを運用するなら、モニタリング環境の整備は早いほど安心です。この構成は月 $5 程度の最小VPSでも動かせる軽さなので、まず試してみてください。どのVPSが良いか迷っている方は VPS比較記事も参考にどうぞ。

関連記事:Ubuntu 24.04 に Docker をインストールする方法 / Ubuntu で Portainer を使ってDockerコンテナをGUI管理する / Node Exporter + Prometheus でホストOSを監視する

コメント

タイトルとURLをコピーしました