概要
このエントリは、「Enterprise "hello, world" 2018 Advent Calendar 2018」の12/14向けのものです。このAdvent Calendarでは、複数個のエントリにまたがる話の流れも鑑みつつ、なるべく1エントリで1つのトピックをカバーできるようにする予定です。
このエントリで記載するトピックは、PrometheusとcAdvisorで、作った環境をモニタすることです。
このエントリ後、これまで作ってきた環境と合わせて、こんな世界になります。
前提
おことわり
- このEnterpfise "hello, world"シリーズは、ネタのためのエントリです。実環境でそのまま利用ことを目的とはしていません。
- 動かしやすさを優先してセキュリティを意図的に低くする設定など入れてありますのでご注意ください。
想定読者
「Enterprise "hello, world" 2018」的なネタとしては、下記のような状況を想定しています。
いくつかコンテナを使って開発側環境を立ち上げてきた。そうだ、モニタしなければ。作りっぱなしはいけません。
Prometheus
Prometheusとは
Prometheusは、メトリクスをいい感じに一か所に収集し、クエリするためのツールです。
複数のデータ提供側の"exporter"から、一定間隔で値を集め、ユーザが指定した形で測定データを見ることができます。
あわせて、cAdvisor
Prometheusは、複数の"exporter"から値を収集しますが、その一つとして、docker containerホストから値を収集する仕組みの"cAdvisor"があります。こちらを使用して、このAdvent Calendarのシリーズで作ってきたdockerコンテナの測定値も集めます。
docker-compose
今回のエントリでは、2つのコンテナを同時に扱います。
- ネットワークについて、新たに"intnet"を新設しました。基盤側だけが使うネットワークとして利用するイメージです。
- cAdvisorは、コンテナのホスト側の状態もいろいろ公開する雰囲気であることから、ネットワークを分けようと考えました。そのため、intnetという名称のdockerの内部ネットワークを作成しています。
- 後述しますが、prometheus自体も、認証がかけられる機能はなさそうです。後で公開側からは直接には見えないようにしようと考えており、その意味でも内部ネットワークを使おうと考えています。
ersion: '3.7'
networks:
extnet:
name: my-external-net
intnet:
name: my-internal-net
(中略)
cadvisor:
image: google/cadvisor:latest
restart: always
networks:
- intnet
ports:
- 8080
volumes:
- /:/rootfs:ro
- /var/run:/var/run:ro
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
- /dev/disk/:/dev/disk:ro
tty: true
stdin_open: true
prometheus:
image: prom/prometheus
command:
- --config.file=/etc/prometheus/prometheus.yml
restart: always
networks:
- extnet
- intnet
ports:
- 9090:9090
volumes:
- '${CONF_DIR}/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml'
links:
- cadvisor
prometheusの設定
prometheusは、自身の動作と、dockerコンテナ動作確認ができるよう指定します。
global:
scrape_interval: 15s
external_labels:
monitor: 'ehw2018-monitor'
scrape_configs:
- job_name: 'prometheus'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']
- job_name: 'docker'
scrape_interval: 5s
static_configs:
- targets:
- cadvisor:8080
起動
Advent Calendar的には、すでに他のサービスが動いている状況なので、今回分だけupします。
$ sudo docker-compose up cadvisor prometheus
見た目とか
prometheusは、"exporter"から収集した値を"console"・"graph"の形で確認することができます。下図に、クエリを"container_cpu_system_seconds_total"として1分間隔で収集してグラフ化している様子を示します。(変動がないのは、執筆時に、特に何もしていなかったためです)
注意
Prometheusは、本家サイトのsecurityの記載にある通り、単体では、特に認証は準備していません。このため、本シリーズにおいては、何かしらのミドルウェア経由で使うか、認証をするだけのリバースプロキシの後ろ側に置くかなどの対応をとる予定です。
まとめ
このエントリでは、「Enterprise "hello, world" 2018 Advent Calendar 2018」(EHW2018)の14日目として、PrometheusとcAdvisorで、作った環境をモニタすることをトピックとして取り上げました。
EHW2018のネタとしては、このあと、今回作ったモニタリングの仕組みに認証をかけてから、そろそろアプリに着手したいと考えています。