cAdvisorを使ったDockerコンテナメトリクスの監視

cAdvisor (container Advisor の略) は、実行中のコンテナからリソース使用量とパフォーマンスデータを分析・公開します。cAdvisorはPrometheusメトリクスをそのまま公開します。このガイドでは、以下のことを行います。

  • Prometheus、cAdvisor、およびRedisサーバーがそれぞれ実行されているコンテナを含む、ローカルのマルチコンテナDocker Composeインストールを作成します。
  • Redisコンテナによって生成され、cAdvisorによって収集され、Prometheusによってスクレイピングされたいくつかのコンテナメトリクスを調査します。

Prometheusの設定

まず、PrometheusがcAdvisorからメトリクスをスクレイピングするように設定する必要があります。`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コンテナに対応しています。

  1. `prometheus`サービスは、ローカルの`prometheus.yml`設定ファイル(`volumes`パラメータによってコンテナにインポートされます)を使用します。
  2. cAdvisorサービスはポート8080(cAdvisorメトリクスのデフォルトポート)を公開し、様々なローカルボリューム(/、/var/runなど)に依存します。
  3. 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ウェブUIの探索

cAdvisorのWeb UIhttps://: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の表現を入力できます。表現バーは次のようになります。

Prometheus expression bar

コンテナの起動時間(秒単位)を記録する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])過去1分間のcgroupのCPU使用率redisコンテナ
container_memory_usage_bytes{name="redis"}cgroupの総メモリ使用量(バイト単位)redisコンテナ
rate(container_network_transmit_bytes_total[1m])過去1分間のコンテナによるネットワーク経由で送信されたバイト数(1秒あたり)すべてのコンテナ
rate(container_network_receive_bytes_total[1m])過去1分間のコンテナによるネットワーク経由で受信されたバイト数(1秒あたり)すべてのコンテナ

まとめ

このガイドでは、Docker Composeを使用して3つの異なるコンテナを1つのインストールで実行しました。PrometheusコンテナはcAdvisorコンテナからメトリクスをスクレイピングし、cAdvisorコンテナはRedisコンテナによって生成されたメトリクスを収集しました。次に、Prometheusの表現ブラウザを使用して、いくつかのcAdvisorコンテナメトリクスを探索しました。

このページの内容