Prometheus で docker エンジンを監視する
3年以上前に構築した telegraf + influxdb + grafana での可視化システムですが、さすがに古くなってきていて更新を余儀なくされています。
以前の環境はつくったは良いんですが、Ubuntu 20.04 に直接インストールしていたので、データの移行やアップデートを考えることが大変です。そこで、今回からは全てのミドルウェアを Docker で稼働させるように考えました。これならポータビリティが高いので、ハードウェアの依存性が少なく移行や更新により良いと判断しました。
とりま、ひとまず動かす。ということと、親となる Docker エンジンの監視ができるようにしました。YAMAHA や他のサーバの監視はまだまだこれからです。
docker-compose.yml
services:
prometheus:
image: prom/prometheus
container_name: prometheus
volumes:
- /var/lib/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus-data:/prometheus
ports:
- '9090:9090'
grafana:
image: grafana/grafana:latest
container_name: grafana
hostname: grafana
restart: unless-stopped
environment:
- GF_LOG_LEVEL=error
depends_on:
- prometheus
links:
- prometheus
ports:
- 3000:3000
user: "$PID:$GID"
volumes:
- /var/lib/grafana:/var/lib/grafana
volumes:
prometheus-data:
実際の yaml ファイルには、他のサービスもはいっていますが関係ないものを削除しています。また、Grafana でアクセスログまでいらなかったのでログレベルを変更したりしています。
これに関わる設定ファイルは次の通りです。
/etc/docker/daemon.json
docker エンジンから Prometheus で利用可能な metrics を出力できるようにします。http://localhost:9323/metrics で取得可能です。`0.0.0.0` にしているのは、コンテナ内からのアクセスも想定しているだけなので、必要に応じて I/F は制御すべきです。
{
"metrics-addr" : "0.0.0.0:9323",
"experimental" : true
}
/var/lib/prometheus/prometheus.yml
よくある設定に docker の監視を追加しています。実態とは異なりますが、docker エンジンが動いているサーバが `docker.oshiire.to` のホストと想定して設定しています。
global:
scrape_interval: 15s
evaluation_interval: 15s
external_labels:
monitor: 'codelab-monitor'
scrape_configs:
- job_name: 'prometheus'
scrape_interval: 5s
static_configs:
- targets: ['prometheus:9090']
- job_name: 'docker'
static_configs:
- targets: ['docker.oshiire.to:9323']
ここも参考にしているので、よく分からないけど `external_labels` も入っています。まだ調べていない。
これらの設定だけで、とりあえず prometheus と docker の metrics 取得できちゃうのちょっと楽すぎない…?
Grafana で画面作るほうが断然時間がかかる。時間がかかるというか、画面のつくりかたを完全に忘れているので、また学習し直しです。