amtool って最高じゃね?
Howdy! Prometheus Advent Calendar 2018 23日目の sugitak です :yo: !
Prometheus が良い点は色々あるわけですが、その多くの部分は Alertmanager の素晴らしさでもあります。 Alertmanager はその名の通り、アラートの出力抑制・内容まとめ・サイレンスやルーティングなど、開発運用に必要なアラートの細やかな制御を実現します。
そんな Alertmanager ですが、いまいち使い方の話が盛り上がっていない… MOTTAINAI
Alertmanager 付属の amtool
を使えば Alertmanager の中身を自由自在にいじれるので、テストやデバッグはもちろん、 Prometheus を使わずに単体で Alertmanager を使用することすら可能になってきます。
ということで、この記事では Alertmanager のパワーを最大限に生かすためのツールである amtool の使い方を載せておきます。自分用アンチョコとも言う。
準備
alertmanager
及び amtool
を準備します。
alertmanager は apt や docker で気軽に利用可能となっています。
alertmanager install
$ sudo apt install prometheus-alertmanager
apt の dependency に prometheus が入っていないので、 Alertmanager 単体でのインストールができます。これ、「わかってる」感あって好き。
docker では prom/alertmanager
のイメージを持って来れば動くので、手が慣れていればそちらの方が安定するかと。
で、 alertmanager をいれただけだと amtool
は入らないので、 go get
でいれましょう。
$ go get github.com/prometheus/alertmanager/cmd/amtool
$ amtool
usage: amtool [<flags>] <command> [<args> ...]
View and modify the current Alertmanager state.
Config File: The alertmanager tool will read a config file in YAML format from one of two default config locations:
$HOME/.config/amtool/config.yml or /etc/amtool/config.yml
All flags can be given in the config file, but the following are the suited for static configuration:
alertmanager.url
Set a default alertmanager url for each request
...
amtool の使い方
amtool は、 golang で作られたシンプルな CLI ソフトウェアです。
アクセスさせたい Alertmanager のアドレスをオプションとして渡す必要があります。
$ amtool --alertmanager.url http://localhost:9093 alert
Alertname Starts At Summary
いちいち --alertmanager.url http://localhost:9093
とか書いていられないので、設定ファイルを作成しましょう。 /etc/amtool/config.yml
または $HOME/.config/amtool/config.yml
に置いたものが反映されます。
$ cat /etc/amtool/config.yml
alertmanager.url: "http://localhost:9093"
アラートの作成
このような形式でアラートを追加できます。 Prometheus でのデバッグ用途だけでなく、他ツールからもアラートを発行できるので最高に便利ですね。
$ amtool add <Alertname> [<label>=<value>]
例えばこんなアラートを追加して…
$ amtool alert add TooMuchOpenFiles Stage=staging Role=web
アラート一覧を見てみると、確かにアラートが追加されているのがわかります。わぁいアラート!あかりアラート大好き
$ amtool alert
Alertname Starts At Summary
TooMuchOpenFiles 2018-12-23 15:28:12 UTC
単に alert
だと label が表示されないのでちょっと不便です。そんな時は -o extended
オプション。ラベルも含め、詳細に閲覧できます。やったね。
$ amtool alert -o extended
Labels Annotations Starts At Ends At Generator URL
Role="web" Stage="staging" alertname="TooMuchOpenFiles" 2018-12-23 15:28:12 UTC 0001-01-01 00:00:00 UTC
こちらをデフォルト表示にしたい場合、設定ファイルに output: "extended"
という行を付け加えることで設定できます。ちな verbose オプションは(まだ?)ない
$ cat /etc/amtool/config.yml
alertmanager.url: "http://localhost:9093"
output: "extended"
アラートの削除
すでに作成されたアラートは、削除そのものはできません。できるのは、「終了した」と上書きすることか、それ以上発報されないようサイレントをすることだけです。
サイレンス設定は次の項目で見るとして、ここでは「削除」をみてみましょう。
$ amtool alert add TooMuchOpenFiles Stage=staging Role=web --end='2018-12-23T16:02:00Z'
$ amtool alert
Labels Annotations Starts At Ends At Generator URL
Role="web" Stage="staging" alertname="TooMuchOpenFiles" 2018-12-23 16:01:00 UTC 2018-12-23 16:02:00 UTC
先ほど追加した TooMuchOpenFiles
アラートを上書きします。このとき、アラートの終了時刻を --end
オプションに RFC 3339 形式にて渡します。
このとき、 --end
オプションには、今より未来の時間を入れる必要があります。上の書き方では --start
オプションを省略しているため、デフォルトとして現在時刻を入れられており、そして end
は start
よりもあとでなければならないという制約があるのです。 amtool: error: start time must be before end time (code: 400)
というエラーが出たら多分これです。(結構ハマった)
なお --start
を過去の時間にして --end
も過去の時刻にするというのは可能です。
アラートのサイレント
うるさいアラートを一時的に黙らせたいなら、 amtool silence
コマンドの出番です。
まあ本来であれば黙らせるようなアラートは作るなという話なんですが、現実はそうはいかないので、どうしてもこういうシーンは出てきますよね。
……えっ、出てこない?……そっか、よかったね……ここでおかえりください……
$ amtool silence add alertname=TooMuchOpenFiles -c 'sugitak: うるさーい!'
bef9a58f-7cfc-49d9-b01c-2aea98080eb9
出る人向けに説明すると、 amtool silence add
でサイレンスを追加します。また、 -c
オプションでそのサイレンスのコメントを追加します。私のバージョン(alertmanager 0.16.0-alpha.0
)ではコメント必須でした。
$ amtool silence
ID Matchers Starts At Ends At Updated At Created By Comment
bef9a58f-7cfc-49d9-b01c-2aea98080eb9 alertname=TooMuchOpenFiles 2018-12-23 15:33:27 UTC 2018-12-23 16:33:27 UTC 2018-12-23 15:33:27 UTC sugitak sugitak: うるさーい!
silence 削除は amtool silence expire <ID>
と素直。
$ amtool silence expire bef9a58f-7cfc-49d9-b01c-2aea98080eb9
全部消すなら単純なシェル芸で十分。
$ amtool silence | awk '/^[^I]/ {print $1;}' | xargs amtool silence expire
そんな感じです。便利ですね!
まとめ
というわけで、 Alertmanager を使ううえで便利このうえない amtool
の使い方をご説明しました。まあ、全部 github.com/prometheus/alertmanager
のどこかには書いてあるんですけどね。見つけるのは地味に大変なので、勉強がてら記事にしてみた、というわけです。
さて、今年は Qiita の Prometheus Advent Calendar があまりに閑散としているのでビックリしていますが、これも Prometheus が使われていないからではなく、むしろ普通に使うだけなら工夫しなくても使えてしまってあまり書くことがないからだろうなと思っています。
Kubernetes や Gitlab は既に Prometheus に対応し、さまざまな場面で活用されているわけですが、今年は Nomad までも Prometheus 形式での出力を発表し、勢いはとどまるところを知りません。いよいよ observability が開発者のものになりつつあるのを感じますね。
みなさま、 Happy Prometheus Life および良い年末年始をお過ごしください。