通知模板示例

以下是告警和相应 Alertmanager 配置文件(alertmanager.yml)设置的不同示例。每个示例都使用 Go 模板 系统。

自定义 Slack 通知

在这个示例中,我们自定义了 Slack 通知,使其发送一个 URL 到我们组织的 Wiki,该 Wiki 提供了如何处理特定告警的信息。

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 中访问注解

在这个示例中,我们再次自定义发送到 Slack 接收器的文本,以访问 Alertmanager 发送数据中 `CommonAnnotations` 中存储的 `summary` 和 `description`。

告警

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'

本示例在此博客文章中提供了更详细的解释。

本页内容