LoginSignup
4
0

More than 1 year has passed since last update.

Alertmanager: 通知テンプレートの展開を確認する

Last updated at Posted at 2021-12-09

はじめに

Alertmanager の通知テンプレートを設定するとき、テンプレートが想定通りに展開されるか手元で確認したいことはないでしょうか。そんなとき、任意のデータを使ってテンプレートを展開できる、amtooltemplate render サブコマンドが便利です。

amtool のインストール

amtool は、Alertmanager の CLI ツールです。amtool は リリースのバイナリ に含まれる他、go get で単体のインストールが可能です。通知テンプレートの展開を行う template render サブコマンドは、v0.23.0 から実装されています。

go get github.com/prometheus/alertmanager/cmd/amtool

テンプレートの展開を確認する

テンプレートの展開には amtooltemplate render サブコマンドを利用します。

例えば slack.tmpl というテンプレートファイルの slack.text という名前のテンプレートを利用したい場合、以下のように実行します。data.json はテンプレートに渡す JSON 形式のデータ(後述)になります。

amtool template render \
  --template.glob=slack.tmpl \
  --template.text='{{ template "slack.text" . }}' \
  --template.data=data.json

実行後、テンプレートが展開された結果が表示されます。

• *<https://1.example.com/|alert1>*: desc1
• *<https://2.example.com/|alert2>*: desc2

--template.glob は必須の引数になっていますが、/dev/null などダミーを指定することで、 --template-text でテンプレート文字列だけを確認することもできます。

amtool template render \
  --template.glob=/dev/null \
  --template.text='{{- .Status | toUpper }}{{ if eq .Status "firing" }} {{ .Alerts.Firing | len }} ALERTS{{ end }} ({{ .GroupLabels.cluster }})' \
  --template.data=data.json

同様に結果が表示されます。

FIRING 2 ALERTS (cluster-A)

テンプレートデータの準備

テンプレートのデータは --template.data 引数で、JSON 形式のファイルとして指定します。省略時は、デフォルトのダミーデータが使用されます。しかし、ラベルやアノテーションなどのキーや値は環境ごとに違うため、多くの場合は自分でデータを準備する必要があるでしょう。

テンプレートに渡されるデータ形式は NOTIFICATION TEMPLATE REFERENCE に記載されています。例えば前項の確認では、以下のデータを使いました。残念ながら v0.23 時点では YAML 形式には直接対応していませんが、次項で紹介する方法を使って YAML を利用できます。

{
  "Status": "firing",
  "Alerts": [
    {
      "Status": "firing",
      "Labels": {
        "alertname": "alert1"
      },
      "Annotations": {
        "runbook": "https://1.example.com/",
        "description": "desc1"
      }
    },
    {
      "Status": "firing",
      "Labels": {
        "alertname": "alert2"
      },
      "Annotations": {
        "runbook": "https://2.example.com/",
        "description": "desc2"
      }
    }
  ],
  "GroupLabels": {
    "cluster": "cluster-A"
  }
}

YAML 形式でテンプレートデータを利用する

JSON 形式でデータを編集するのが辛い場合、YAML でデータを用意して実行時に JSON に変換するのが便利です。以下の例では bash のプロセス置換(<(command))で yq を使って、data.yaml を JSON に変換しています。

amtool template render \
  --template.glob=/dev/null \
  --template.text='{{- .Status | toUpper }}{{ if eq .Status "firing" }} {{ .Alerts.Firing | len }} ALERTS{{ end }} ({{ .GroupLabels.cluster }})' \
  --template.data=<(yq e -o=json . data.yaml)

おわりに

Alertmanager に限りませんが、テンプレートでは、編集時に余計な空白や改行を付加してしまうようなミスをしがちです。複雑なテンプレートを書いた場合は、ぜひ amtooltemplate render を活用してみてください。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0