Prometheus Grafanaで死活監視

今まで何度か目にしたことがあるけども、インフラ担当だったことがあまりなかったので触らなかったこの辺を触ってみようということでやってみました。
結論
- Prometheusはデータを監視データを集める(描画もできるけど)
- Grafanaはデータを描画(死活監視データじゃない)
- docker-composeで組んでみたけど、思いのほか簡単でした。
所感なんだけど、Grafanaで読めるようにして小さなサービスの見える化って色々できる感じします。
方針・前提条件
- Prometheusはコンテナで作成
- ホストは、すべてPrometheus exporterをインストール
- Grafanaはコンテナで作成
本当はホストの情報もコンテナから取得できるようにしたいのだけど、難しいそうなのでスキップ(出来たら、Prometheusをホスト側でインストールするっていう作業がないからいいよね)
ドメインについては、unboundでローカルネットワークでドメインを割り振っております。
環境
- Raspberry Pi4 OS:RaspberryPiOS Debian GNU/Linux 10 (buster)
- Docker 20.10.3
構築作業
Prometheusとgrafanaのインストール
docker-compose上で参照しているprometheus.yml
prometheus.yml
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'node'
static_configs:
- targets:
- '192.168.0.12:9100'
- '192.168.0.13:9100'
- '192.168.0.14:9100'
- '192.168.0.15:9100'
docker-compose.yml
以下、docker-compose抜粋
nginx:
image: nginx:mainline-alpine
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/site.conf:/etc/nginx/conf.d/site.conf
- ./auth/registry.localdomain.cert.pem:/etc/ssl/certs/registry.localdomain.cert.pem
- ./auth/registry.localdomain.key-nopass.pem:/etc/ssl/private/registry.localdomain.key-nopass.pem
depends_on:
- gitea
- drone
- registry-ui
env_file:
- .env
networks:
gitea:
prometheus:
image: prom/prometheus
networks:
gitea:
container_name: prometheus
volumes:
- ./prometheus:/prometheus-data
entrypoint: prometheus --config.file=/prometheus-data/prometheus.yml
restart: always
logging:
driver: json-file
options:
max-file: '1'
max-size: 3m
grafana:
image: grafana/grafana
networks:
gitea:
container_name: grafana
restart: always
logging:
driver: json-file
options:
max-file: '1'
max-size: 3m
その後、
docker-compose up -d
なお、上では、特にポートを指定していませんが、下記のようにしてNginxでリバースプロキシを行っています。
site.conf(nginx)
#grafana
server {
listen 80;
root /usr/share/www/;
server_name prometheus.localdomain;
location / { # Note: Trailing slash
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_pass http://prometheus:9090;
proxy_redirect off;
proxy_http_version 1.1;
proxy_buffering off;
chunked_transfer_encoding off;
}
}
#grafana
server {
listen 80;
root /usr/share/www/;
server_name grafana.localdomain;
location / { # Note: Trailing slash
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_pass http://grafana:3000;
proxy_redirect off;
proxy_http_version 1.1;
proxy_buffering off;
chunked_transfer_encoding off;
}
}
ホストOS側
sudo apt install prometheus-node-exporter
設定作業
設定に使用する元のDashboardはNode Exporter Full。
上記のNode Exporter Fullは情報量が多いので使いやすいように自分でカスタマイズしていく感じで使うのがいいかなと思います。

- http://grafana.localdomain へアクセスし、パスワードはadmin/adminで指定し、変更
- http://grafana.localdomain/dashboard/import にアクセスし、Node Exporter Fullの「Get this dashboard:」のIDを「Import via grafana.com」に指定
- インポートしたdashboardで欲しいパネル(グラフとかですね)

の上部のタイトルをクリック、「More => copy」を選択 - 別タブでhttp://grafana.localdomain を開いて、新しいダッシュボードを追加(このダッシュボードに上記のパネルを追加していく感じ)
- 新しいダッシュボードの
を選択し、Paste copied panelをクリック - 必要そうな個所を修正。(例えば、可変となっている個所は$node等の変数になっているので固定値にしたり、もしくは、DashboardにVariable定義を追加したり)
4~6を繰り返していくと死活監視用のダッシュボードは完成します。
各パネルはJSONで定義されているので、パネルをクリックして、Inspect=>Parse JSONとしてその中身を直コピーでもいいのですけども、システムでリンクするための情報もありますので、上記の手順のように必要な分はコピーして作成するのが一番の近道だと思います。

私は、今回Pi4 4台分のCPUとメモリの情報を表示するものを作成しました。
最後に
PrometheusとGrafanaで作る死活監視はなんか小難しいなぁと思ってやっていなかったのですが、実際やってみるとすごい簡単です。
これを機に複数台のマシンが動いている、コンテナも色々と動いているというご家庭で導入を行ってみてはいかがでしょうか。