まとめ
promtool
とamtool
を使うとPrometheus
の設定とアラートルール, Alertmanager
の設定をそれぞれ反映前にチェックすることができる.
Docker
上でも動かせるのでCI
にも組み込めそう.
# Prometheus設定ファイルのチェック
$ promtool check config prometheus.yml
# Docker版
$ docker container run --rm -v="$PWD/prometheus.yml:/prometheus-config/prometheus.yml" --entrypoint="promtool" prom/prometheus check config /prometheus-config/prometheus.yml
# アラートルールファイルのチェック
$ promtool check rules rules.yml
# Docker版
$ docker container run --rm -v="$PWD/rules.yml:/prometheus-config/rules.yml" --entrypoint="promtool" prom/prometheus check rules /prometheus-config/rules.yml
# Alertmanager設定ファイルのチェック
$ amtool check-config alertmanager.yml
# Docker版
$ docker container run --rm -v="$PWD/alertmanager.yml:/prometheus-config/alertmanager.yml" --entrypoint="amtool" prom/alertmanager check-config /prometheus-config/alertmanager.yml
環境
- macOS Mojave 10.14
- Docker Desktop for Mac
- Version 3.1.0
- Docker Engine Version 20.10.2
- Prometheus
- version 2.24.1
- promtool
- version 0.21.0
- Alertmanager
- version 0.21.0
- amtool
- version 0.20.0
もくじ
promtoolとamtool
promtool
はPrometheus
に付属している設定ファイルやアラートルールファイルの検証ツール1.
Prometheus
がインストールされていればすぐに使うことができる.
amtool
はpromtool
のAlertmanager
版といった感じ.
# prometheus設定ファイル(prometheus.yml)とアラートルールファイル(rules.yml)を準備
$ ls
prometheus.yml rules.yml
# prometheus.ymlの内容をチェック
# prometheus.ymlでルールファイルを参照している場合はその対象もチェックしてくれる
$ promtool check config prometheus.yml
Checking prometheus.yml
SUCCESS: 1 rule files found
Checking rules.yml
SUCCESS: 1 rules found
# rulesだけのチェックも可能
$ promtool check rules rules.yml
Checking rules.yml
SUCCESS: 1 rules found
# alertmanager設定ファイルも同様にチェックできる
$ amtool check-config alertmanager.yml
Checking 'alertmanager.yml' SUCCESS
Found:
- global config
- route
- 1 inhibit rules
- 1 receivers
- 0 templates
これを使えばPrometheus
やAlertmanager
の設定反映前に構文エラーをチェックすることができて便利.
試しにわざと間違ったPrometheus
設定ファイルとアラートルールファイル, Alertmanager
設定ファイルをチェックしてみる.
# 間違ったprometheus設定ファイル(prometheus.yml)をチェックする
$ promtool check config prometheus-error.yml
Checking prometheus-error.yml
FAILED: parsing YAML file prometheus-error.yml: yaml: unmarshal errors:
line 13: field target not found in type struct { Targets []string "yaml:\"targets\""; Labels model.LabelSet "yaml:\"labels\"" }
# 間違ったアラートルールファイルをチェックする
$ promtool check rules rules-error.yml
Checking rules-error.yml
FAILED:
rules-error.yml: group "instance", rule 0, "InstanceDown": could not parse expression: 1:4: parse error: could not parse remaining input "= 0"...
# 間違ったAlertmanager設定ファイルをチェックする
$ amtool check-config alertmanager-error.yml
Checking 'alertmanager-error.yml' FAILED: yaml: unmarshal errors:
line 7: field receiver not found in type config.plain
amtool: error: failed to validate 1 file(s)
ちゃんとエラー箇所とエラーの内容が表示された.
べんり.😊
Dockerで起動する
便利なpromtool
とamtool
だけど, Prometheus
やAlertmanager
がインストールされていない環境ではなかなか使いづらい.
(実務でPrometheus
/Alertmanager
の設定を直接手でいじることはあんまりなくて, リポジトリ上で設定ファイルを管理してCI/CD
することが多い. と思う.)
ということでDocker
を使ってPrometheus
がインストールされていない環境でもpromtool
を使えないか試してみる.
# Dockerでもできそう
$ docker container run --rm --entrypoint="promtool" prom/prometheus --version
promtool, version 2.24.1 (branch: HEAD, revision: e4487274853c587717006eeda8804e597d120340)
build user: root@0b5231a0de0f
build date: 20210120-00:09:36
go version: go1.15.6
platform: linux/amd64
$ docker container run --rm --entrypoint="amtool" prom/alertmanager --version
amtool, version 0.21.0 (branch: HEAD, revision: 4c6c03ebfe21009c546e4d1e9b92c371d67c021d)
build user: root@dee35927357f
build date: 20200617-08:54:02
go version: go1.14.4
コマンドは実行可能みたいなので, あとはDocker
コンテナ起動時のオプションで設定ファイルをマウントすれば良さそう.
$ ls
alertmanager-error.yml prometheus-error.yml rules-error.yml
# Dockerでもできた
$ docker container run --rm -v="$PWD:/prometheus-config" --entrypoint="promtool" prom/prometheus check config /prometheus-config/prometheus-error.yml
Checking /prometheus-config/prometheus-error.yml
FAILED: parsing YAML file /prometheus-config/prometheus-error.yml: yaml: unmarshal errors:
line 13: field target not found in type struct { Targets []string "yaml:\"targets\""; Labels model.LabelSet "yaml:\"labels\"" }
$ docker container run --rm -v="$PWD:/prometheus-config" --entrypoint="promtool" prom/prometheus check rules /prometheus-config/rules-error.yml
Checking /prometheus-config/rules-error.yml
FAILED:
/prometheus-config/rules-error.yml: 5:13: group "instance", rule 1, "InstanceDown": could not parse expression: 1:4: parse error: unexpected "="
$ docker container run --rm -v="$PWD:/prometheus-config" --entrypoint="amtool" prom/alertmanager check-config /prometheus-config/alertmanager-error.yml
Checking '/prometheus-config/alertmanager-error.yml'amtool: error: failed to validate 1 file(s)
FAILED: yaml: unmarshal errors:
line 7: field receiver not found in type config.plain
# エラー時はちゃんと終了ステータスがnot 0になっている
$ echo $?
1
やったぜ.
Prometheus
やAlertmanager
がインストールされていない環境でもDocker
上でpromtool
とamtool
を使って設定ファイルの検証ができた.
おわり
promtool
とamtool
を触ってみて, Docker
で起動するところまで試した.
Docker image
さえあれば起動できるので, あとは細かい設定さえすればGitHub Actions
とかのCI
ツールで設定ファイルのチェックができると思う.
今回はpromtool
で設定ファイルのチェックしか試してないけど, 他にもアラートルールのユニットテストなんかもできるみたい2なので余裕があったらそっちも触ってみたい.