通知テンプレートの例

以下は、アラートと対応するAlertmanager設定ファイル(alertmanager.yml)のセットアップの異なる例です。それぞれGoテンプレートシステムを使用しています。

Slack通知のカスタマイズ

この例では、Slack通知をカスタマイズして、送信された特定のアラートの対処法に関する組織のWikiへのURLを送信します。

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に格納されているsummarydescriptionにアクセスすることで、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'

この例については、このブログ記事で詳しく説明されています。

このページの内容