やったことのまとめ
- 自作Exporter,
Prometheus
,Alertmanager
,Grafana
をまとめてDocker Compose
で動かした nginx
コンテナを追加してリバースプロキシした
Prometheus
用のExporterを自作するときに動作確認の時点でGrafana
のグラフが見られたりAlertmanager
で通知されるメッセージとかが確認できるとメトリクスやラベルの設計がしやすい(気がする)ので,
それらが全部入りの環境をDocker Compose
で作ってみた.
つかうもの
- macOS Mojave 10.14
- Docker Desktop for Mac
- Version 3.1.0
- Docker Engine Version 20.10.2
- docker-compose version 1.27.4
- Prometheus (Docker)
- version 2.24.1
- Alertmanager (Docker)
- version 0.21.0
- Grafana (Docker)
- version 7.3.7
- nginx (Docker)
- version 1.18.0
- 自作Exporter
- 2112番ポートで起動できて
Docker
コンテナ化できるものなら何でも良い
- 2112番ポートで起動できて
やったこと
とりあえず起動する
それぞれDocker image
が公式で提供されているのでそれをそのまま起動すれば良さそう.
自作Exporterの動作確認をしたときと同様に適当にdocker-compose.yml
を書いてみる.
重要なのは以下の設定ファイルをそれぞれのコンテナにマウントしていること.
Prometheus
- 自作Exporterなどをスクレイプするための設定(
prometheus.yml
)Docker Compose
で起動しているので他のコンテナについてはすべてコンテナ名で名前解決できる
- アラートルール(
rules.yml
)- 任意のルールで良い
- 自作Exporterなどをスクレイプするための設定(
Alertmanager
- アラート通知設定(
alertmanager.yml
)- 任意の設定で良い
- アラート通知設定(
Grafana
- 基本設定(
grafana.ini
)- ログイン不要の設定をしておく
- Data Source設定(
datasource.yaml
)Prometheus
コンテナを指定する
- Dashboard設定(
dashboard.yaml
,dashboard.json
)dashboard.json
は後から作っても良い
- 基本設定(
(rules.yml
, alertmanager.yml
は何でも良いので前回のものを流用)
(dashboard.json
はあらかじめ作成済みのものがなければこの後作成する)
あとはこれらのファイルが以下のように配置されている状態でDocker Compose
でコンテナを立ち上げる.
# ローカルでビルドしない場合はDockerfileとGo関連のファイルは不要
$ tree .
.
├── Dockerfile
├── deployment
│ ├── alertmanager
│ │ └── alertmanager.yml
│ ├── grafana
│ │ ├── dashboard.json
│ │ ├── dashboard.yaml
│ │ ├── datasource.yaml
│ │ └── grafana.ini
│ └── prometheus
│ ├── prometheus.yml
│ └── rules.yml
├── docker-compose.yml
├── go.mod
├── go.sum
└── main.go
# コンテナを起動(コードを編集したなどの理由で再度ビルドしたい場合はさらに--buildを付与する)
$ docker-compose up -d --force-recreate
$ docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------
alertmanager /bin/alertmanager --config ... Up 0.0.0.0:9093->9093/tcp
exporter ./app Up 0.0.0.0:2112->2112/tcp
grafana /run.sh Up 0.0.0.0:3000->3000/tcp
prometheus /bin/prometheus --config.f ... Up 0.0.0.0:9090->9090/tcp
あとはそれぞれのエンドポイントで動作確認する.
- 自作Exporter
Prometheus
Alertmanager
Grafana
dashboard.json
が未作成の場合はここで動作確認も兼ねてGrafana
上でダッシュボード(自作Exporterのメトリクスがグラフ化できれば何でも良い)を作成し, Share
➔Export
➔Save to file
からJSON
をダウンロードして以降はそれを使うようにする.
設定が正しく効いていれば予めPrometheus
がData Source
として登録されていて, 全コンテナのメトリクスがスクレイプできていることも確認できる.
リバースプロキシする
このままでもいいんだけどせっかくなのでnginx
でリバースプロキシする.
docker-compose.yml
にnginx
コンテナを追加して, 以前やったときと同様の設定ファイルを作成してマウントする.
(リバースプロキシしているので, nginx
以外のそれぞれのコンテナのポートは閉じておく)
Prometheus
prometheus.yml
,rules.yml
: そのまま- command(CMD)にリバースプロキシ用の設定1を追加
Alertmanager
alertmanager.yml
: そのまま- command(CMD)にリバースプロキシ用の設定を追加
Grafana
datasource.yaml
,dashboard.yaml
,dashboard.json
: そのままgrafana.ini
- リバースプロキシ用の設定2を追加
nginx
- リバースプロキシ設定(
default.conf
) - リンク用ページ(
index.html
)
- リバースプロキシ設定(
再度コンテナを起動する.
$ tree .
.
├── Dockerfile
├── deployment
│ ├── alertmanager
│ │ └── alertmanager.yml
│ ├── grafana
│ │ ├── dashboard.json
│ │ ├── dashboard.yaml
│ │ ├── datasource.yaml
│ │ └── grafana.ini
│ ├── nginx
│ │ ├── default.conf
│ │ └── index.html
│ └── prometheus
│ ├── prometheus.yml
│ └── rules.yml
├── docker-compose.yml
├── go.mod
├── go.sum
└── main.go
$ docker-compose up -d --force-recreate
$ docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------
alertmanager /bin/alertmanager --config ... Up 9093/tcp
exporter ./app Up
grafana /run.sh Up 3000/tcp
nginx /docker-entrypoint.sh ngin ... Up 0.0.0.0:80->80/tcp
prometheus /bin/prometheus --config.f ... Up 9090/tcp
ここまでの設定に問題がなければそれぞれのパスでコンテナの動作確認ができる.
- 自作Exporter
Prometheus
Alertmanager
Grafana
もしくは, http://localhost/でリンクを張ったHTML
(index.html
)が表示できるのでそこから飛んでも良い.
最後に一応Alertmanager
の動作確認をする.
rules.ymlでInstanceDown
(upが0になるだけで発火)のアラートルールを設定しているので, 試しに自作Exporterのコンテナを落としてみる.
$ docker-compose stop exporter
$ docker-compose ps
Name Command State Ports
---------------------------------------------------------------------------
alertmanager /bin/alertmanager --config ... Up 9093/tcp
exporter ./app Exit 2
grafana /run.sh Up 3000/tcp
nginx /docker-entrypoint.sh ngin ... Up 0.0.0.0:80->80/tcp
prometheus /bin/prometheus --config.f ... Up 9090/tcp
それぞれのコンテナでメトリクスの変化に対応した処理が行われていることが確認できる.
アラートはAlertmanagerからGmail経由で送る設定にしているのでメールが届くことも確認できる.
やったぜ.
自作ExporterとPrometheus
, Alertmanager
, Grafana
を同時に動かして動作確認することができた.
おわり
終わってみれば大したことはないんだけど, 一回この構成をつくっておくと自作Exporterの開発が楽しくなる(メトリクスがすぐ可視化されアラートの動作確認までできる)のでやってよかったと思う.
Docker Compose
の練習にもなってよかった.