Prometheus Alertmanagerの通知テンプレートを改善する
AlertmanagerのSlack通知テンプレートで四苦八苦したのでメモを残します。
Prometheus OperatorのHelm chartには便利なデフォルトルールが組み込まれています。例えば、Podが頻繁に再起動している場合に通知するルール(KubePodCrashLooping)が組み込まれています。しかし、Slackやメールなどのアラート通知は自分で設定する必要があります。
アラート通知の書き方は公式の Notification template examples | Prometheus に例がありますが、そのままではうまくメッセージが表示されない場合があります。ドキュメントでは以下の例が挙げられていますが、 summary
や description
というアノテーションが付いているルールでないとメッセージが空白になってしまいます。また、CommonAnnotations
を使っているため、複数のアラートがグループ化された場合は共通のアノテーションしか表示されません。
- name: 'team-x' slack_configs: - channel: '#alerts' # Alertmanager templates apply here. text: "<!channel> \nsummary: {{ .CommonAnnotations.summary }}\ndescription: {{ .CommonAnnotations.description }}"
通知テンプレートのよい例はないか探したところ、下記の記事が参考になりました。
Prometheus Operatorのデフォルトルールには message
というアノテーションが付いているため、テンプレートでは message
を使うとよさそうです。また、グループ化された場合にうまく表示されない問題は Alerts
フィールドに入っているアラートを列挙すると解決できそうです。
というわけで試行錯誤の結果、以下のテンプレートを利用しています。
alertmanager: config: receivers: - name: "null" - name: slack slack_configs: - api_url: https://slack.example.com/webhook channel: "#alerts" send_resolved: true username: dev/Alertmanager icon_url: https://prometheus.io/assets/favicons/favicon.ico title: | {{ .Status | toUpper }} text: | {{- range .Alerts }} - **{{ .Labels.alertname }}**: {{ .Annotations.message }} {{- end }} route: receiver: "null" routes: - receiver: "null" match: alertname: Watchdog - receiver: slack