通知テンプレートの例
以下は、アラートとその対応するAlertmanager設定ファイル(alertmanager.yml)のさまざまな例です。それぞれ、Goテンプレートシステムを使用しています。
Slack通知のカスタマイズ
この例では、特定のアラートの対処方法に関する組織のWikiへのURLを送信するようにSlack通知をカスタマイズしました。
global:
# Also possible to place this URL in a file.
# Ex: `slack_api_url_file: '/etc/alertmanager/slack_url'`
slack_api_url: '<slack_webhook_url>'
route:
receiver: 'slack-notifications'
group_by: [alertname, datacenter, app]
receivers:
- name: 'slack-notifications'
slack_configs:
- channel: '#alerts'
text: 'https://internal.myorg.net/wiki/alerts/{{ .GroupLabels.app }}/{{ .GroupLabels.alertname }}'
CommonAnnotationsでのアノテーションへのアクセス
この例では、Alertmanagerから送信されたデータに含まれるCommonAnnotationsに格納されているsummaryとdescriptionにアクセスして、Slackレシーバーに送信されるテキストを再度カスタマイズします。
アラート
groups:
- name: Instances
rules:
- alert: InstanceDown
expr: up == 0
for: 5m
labels:
severity: page
# Prometheus templates apply here in the annotation and label fields of the alert.
annotations:
description: '{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes.'
summary: 'Instance {{ $labels.instance }} down'
レシーバー
- name: 'team-x'
slack_configs:
- channel: '#alerts'
# Alertmanager templates apply here.
text: "<!channel> \nsummary: {{ .CommonAnnotations.summary }}\ndescription: {{ .CommonAnnotations.description }}"
受信したすべてのアラートの反復処理
最後に、前の例と同じアラートを仮定して、Alertmanagerから受信したすべてのアラートを反復処理するようにレシーバーをカスタマイズし、それぞれのサマリーと説明を新しい行に表示します。
レシーバー
- name: 'default-receiver'
slack_configs:
- channel: '#alerts'
title: "{{ range .Alerts }}{{ .Annotations.summary }}\n{{ end }}"
text: "{{ range .Alerts }}{{ .Annotations.description }}\n{{ end }}"
再利用可能なテンプレートの定義
最初の例に戻り、名前付きテンプレートを含むファイルを提供することもできます。これはAlertmanagerによってロードされ、複数行にわたる複雑なテンプレートを回避するために使用されます。/alertmanager/template/myorg.tmplの下にファイルを作成し、その中に「slack.myorg.text」という名前のテンプレートを作成します。
{{ define "slack.myorg.text" }}https://internal.myorg.net/wiki/alerts/{{ .GroupLabels.app }}/{{ .GroupLabels.alertname }}{{ end}}
設定は、名前付きテンプレートを「text」フィールドにロードし、カスタムテンプレートファイルへのパスを提供します。
global:
slack_api_url: '<slack_webhook_url>'
route:
receiver: 'slack-notifications'
group_by: [alertname, datacenter, app]
receivers:
- name: 'slack-notifications'
slack_configs:
- channel: '#alerts'
text: '{{ template "slack.myorg.text" . }}'
templates:
- '/etc/alertmanager/templates/myorg.tmpl'
この例は、blogpostでさらに詳しく説明されています。