cAdvisor を使用した Docker コンテナメトリクスの監視
cAdvisor (container Advisor の略) は、実行中のコンテナのリソース使用量とパフォーマンスデータを分析して公開します。 cAdvisor は、すぐに Prometheus メトリクスを公開します。このガイドでは、
- Prometheus、cAdvisor、Redis サーバーをそれぞれ実行するコンテナを含む、ローカルのマルチコンテナ Docker Compose インストールを作成します。
- Prometheus が取得した cAdvisor によって収集された Redis コンテナによって生成された一部のコンテナメトリクスを調べます。
Prometheus の設定
まず、cAdvisor からメトリクスを取得するように Prometheus を設定 する必要があります。prometheus.yml ファイルを作成し、この設定を記述します。
scrape_configs:
- job_name: cadvisor
scrape_interval: 5s
static_configs:
- targets:
- cadvisor:8080
Docker Compose の設定
次に、インストールの一部となるコンテナ、各コンテナによって公開されるポート、使用されるボリュームなどを指定する Docker Compose の 設定 を作成する必要があります。
prometheus.yml ファイルを作成したのと同じフォルダに、docker-compose.yml ファイルを作成し、この Docker Compose 設定を記述します。
version: '3.2'
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
ports:
- 9090:9090
command:
- --config.file=/etc/prometheus/prometheus.yml
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
depends_on:
- cadvisor
cadvisor:
image: gcr.io/cadvisor/cadvisor:latest
container_name: cadvisor
ports:
- 8080:8080
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
depends_on:
- redis
redis:
image: redis:latest
container_name: redis
ports:
- 6379:6379
この設定は、Docker Compose に 3 つのサービスを実行するように指示します。各サービスは Docker コンテナに対応します。
prometheusサービスは、ローカルのprometheus.yml設定ファイルを使用します (volumesパラメータによってコンテナにインポートされます)。cadvisorサービスは、ポート 8080 (cAdvisor メトリクスのデフォルトポート) を公開し、さまざまなローカルボリューム (/、/var/runなど) を利用します。redisサービスは、標準の Redis サーバーです。cAdvisor は、追加の設定なしで、このコンテナからコンテナメトリクスを自動的に収集します。
インストールを実行するには
docker-compose up
Docker Compose が 3 つのコンテナすべてを正常に起動した場合、次のような出力が表示されるはずです。
prometheus | level=info ts=2018-07-12T22:02:40.5195272Z caller=main.go:500 msg="Server is ready to receive web requests."
ps コマンドを使用して、3 つのコンテナすべてが実行されていることを確認できます。
docker-compose ps
出力は次のようになります。
Name Command State Ports
----------------------------------------------------------------------------
cadvisor /usr/bin/cadvisor -logtostderr Up 8080/tcp
prometheus /bin/prometheus --config.f ... Up 0.0.0.0:9090->9090/tcp
redis docker-entrypoint.sh redis ... Up 0.0.0.0:6379->6379/tcp
cAdvisor Web UI の探索
cAdvisor の Web UI には https://:8080 でアクセスできます。インストールした特定の Docker コンテナの統計情報とグラフは、https://:8080/docker/<container> で探索できます。たとえば、Redis コンテナのメトリクスは https://:8080/docker/redis、Prometheus は https://:8080/docker/prometheus などでアクセスできます。
式ブラウザでのメトリクスの探索
cAdvisor の Web UI は、cAdvisor が監視するものの種類を探索するのに便利なインターフェイスですが、コンテナの*メトリクス*を探索するインターフェイスは提供しません。そのためには、Prometheus の 式ブラウザ が必要です。これは https://:9090/graph で利用できます。式バーに Prometheus 式を入力すると、次のような表示になります。

まず、コンテナの開始時刻(秒単位)を記録する container_start_time_seconds メトリクスを探索しましょう。name="<container_name>" 式を使用して、名前で特定のコンテナを選択できます。コンテナ名は、Docker Compose 設定の container_name パラメータに対応します。たとえば、container_start_time_seconds{name="redis"} 式は、redis コンテナの開始時刻を示します。
注Prometheus に公開される cAdvisor 収集コンテナメトリクスの完全なリストは、cAdvisor ドキュメント にあります。
その他の式
下の表に、その他の例式をいくつか示します。
| 式 | 説明 | 対象 |
|---|---|---|
rate(container_cpu_usage_seconds_total{name="redis"}[1m]) | cgroup の過去 1 分間の CPU 使用量 | redis コンテナ |
container_memory_usage_bytes{name="redis"} | cgroup の総メモリ使用量(バイト単位) | redis コンテナ |
rate(container_network_transmit_bytes_total[1m]) | 過去 1 分間にコンテナがネットワーク経由で送信したバイト数/秒 | すべてのコンテナ |
rate(container_network_receive_bytes_total[1m]) | 過去 1 分間にコンテナがネットワーク経由で受信したバイト数/秒 | すべてのコンテナ |
概要
このガイドでは、Docker Compose を使用して 1 つのインストールで 3 つの別々のコンテナを実行しました。Prometheus コンテナは cAdvisor コンテナからメトリクスをスクレイプし、cAdvisor は Redis コンテナによって生成されたメトリクスを収集しました。その後、Prometheus 式ブラウザを使用して、いくつかの cAdvisor コンテナメトリクスを探索しました。