cAdvisorを用いたDockerコンテナメトリクスの監視 - Prometheusドキュメント

このページはPrometheus公式ドキュメント和訳+αの一部です。

cAdvisor(container Advisorの略)は、稼働中のコンテナのリソース消費とパフォーマンスのデータを分析しexposeする。 cAdvisorは、初期状態で、Prometheusのメトリクスをexposeする。 このガイドでは、

  • Prometheus、cAdvisor、Redisサーバーのそれぞれのコンテナを含む一つのDocker Composeの設定を作成する
  • Redisコンテナが生成、cAdvisorが収集、Prometheusがscrapeするいくつかのコンテナメトリクスを調査する

Prometheus configuration

まず、cAdvisorからメトリクスをscrapeするようにPrometheusを設定する必要がある。prometheus.ymlファイルを作成し、この設定のようにする。

scrape_configs:
- job_name: cadvisor
  scrape_interval: 5s
  static_configs:
  - targets:
    - cadvisor:8080

Docker Compose configuration

どのポートをexposeするか、どのボリュームを使うかなどに加えて、どのコンテナがインストールの一部かを指定するDocker Compose configurationが必要となる。

prometheus.ymlを作成したのと同じフォルダで、docker-compose.ymlを作成し、内容をこのDocker Compose configurationのようにする。

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: google/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に三つのサービスを実行するように指示する。それぞれの以下のDockerコンテナに対応する。

  1. prometheusサービスは、ローカルの設定ファイルprometheus.ymlを利用する(volumesパラメーターによってコンテナにインポートされる)
  2. cadvisorサービスは、8080ポート(cAdvisorメトリクスのデフォルトポート)をexposeし、ローカルのボリューム(//var/runなど)に依存している
  3. redisサービスは、標準的なRedisサーバーで、cAdvisorがこのコンテナからコンテナのメトリクスを自動的に(つまり、追加の設定をしなくても)取得する

この設定でインストールをするには下記のコマンドを実行する

docker-compose up

Docker Composeが三つのコンテナ全ての軌道に成功すると、以下のように出力されるはずである。

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

psコマンドを使って、三つのコンテナ全てが動いていることが確認できる。

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

Exploring the cAdvisor web UI

cAdvisorのweb UIは、http://localhost:8080で見ることが出来る。特定のコンテナの統計やグラフは、http://localhost:8080/docker/<container>で調べることが出来る。 例えば、Redisコンテナのメトリクスはhttp://localhost:8080/docker/redisで、Prometheusのメトリクスはhttp://localhost:8080/docker/prometheusで見ることが出来る。

expression browserでのメトリクスの調査

cAdvisorのweb UIは、cAdvisorが監視しているものを調査するには便利だが、コンテナのメトリクスの調査のためのインターフェースを提供していない。 そのためには、http://localhost:9090/graphで見られるPrometheusのexpression browserが必要である。 以下のようなPrometheusのexpressionバーにexpressionを入力することが出来る。

prometheus expression bar

まず、container_start_time_secondsというメトリクス(コンテナの開始時間で単位は秒)から始める。 name="<container_name>"というexpressionで名前を指定してコンテナを選択できる。コンテナ名は、Docker Composeの設定のcontainer_nameと対応している。 したがって、例えば、container_start_time_seconds{name="redis"}というexpressionで、redisコンテナの開始時間を表示することが出来る。

注意: cAdvisorが収集するコンテナのメトリクスの完全な一覧は、cAdvisorのドキュメントで見ることが出来る。

Other expressions

その他のexpressionの例をいくつか示す

  • 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を使って、PrometheusコンテナがcAdvisorからメトリクスをscrapeし、cAdvisorはRedisコンテナが生成したメトリクスを収集するように、一つの設定で三つの別々のコンテナを動かした。 また、Prometheusのexpression browserを使って、cAdvisorコンテナのいくつかのメトリクスを調査した。

参考リンク

おすすめ書籍

入門 Prometheus ―インフラとアプリケーションのパフォーマンスモニタリング

入門 Prometheus ―インフラとアプリケーションのパフォーマンスモニタリング

入門 監視 ―モダンなモニタリングのためのデザインパターン

入門 監視 ―モダンなモニタリングのためのデザインパターン

SRE サイトリライアビリティエンジニアリング ―Googleの信頼性を支えるエンジニアリングチーム

SRE サイトリライアビリティエンジニアリング ―Googleの信頼性を支えるエンジニアリングチーム

和訳活動の支援

Prometheusドキュメント和訳が役に立った方は、以下QRコードからPayPayで活動を支援して頂けるとありがたいです。

PayPayによる支援用QRコード
上のQRコードからPayPayによる支援