Help us understand the problem. What is going on with this article?

Prometheus から切り離して Alertmanager を運用するための amtool の取り扱い

More than 1 year has passed since last update.

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 オプションを省略しているため、デフォルトとして現在時刻を入れられており、そして endstart よりもあとでなければならないという制約があるのです。 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 および良い年末年始をお過ごしください。

sugitak
Prometheus や無線などについての記事を書いたりするインフラエンジニアです。専門はアプリケーションのデプロイ。
https://www.facebook.com/takehiro.sugita.73
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした