• 通知模板示例
    • " level="2">自定义 Slack 通知
    • " level="2">访问 CommonAnnotations 中的注解
    • " level="2">覆盖所有收到的告警
    • " level="2">定义可重用的模板

    通知模板示例

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

    自定义 Slack 通知

    在此示例中,我们自定义了 Slack 通知,以向组织的 Wiki 发送有关如何处理已发送的特定告警的 URL。

    1. global:
    2. slack_api_url: '<slack_webhook_url>'
    3. route:
    4. receiver: 'slack-notifications'
    5. group_by: [alertname, datacenter, app]
    6. receivers:
    7. - name: 'slack-notifications'
    8. slack_configs:
    9. - channel: '#alerts'
    10. text: 'https://internal.myorg.net/wiki/alerts/{{ .GroupLabels.app }}/{{ .GroupLabels.alertname }}'

    访问 CommonAnnotations 中的注解

    在此示例中,我们以访问 Alertmanager 发送的数据的 CommonAnnotations 中存储的summarydescription再次自定义发送到 Slack receiver 的通知 text。

    Alert

    1. groups:
    2. - name: Instances
    3. rules:
    4. - alert: InstanceDown
    5. expr: up == 0
    6. for: 5m
    7. labels:
    8. severity: page
    9. # Prometheus 模板在此处应用告警注释和标签字段
    10. annotations:
    11. description: '{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes.'
    12. summary: 'Instance {{ $labels.instance }} down'

    Receiver

    1. - name: 'team-x'
    2. slack_configs:
    3. - channel: '#alerts'
    4. # Alertmanager 模板在此处应用
    5. text: "<!channel> \nsummary: {{ .CommonAnnotations.summary }}\ndescription: {{ .CommonAnnotations.description }}"

    覆盖所有收到的告警

    最后,假设告警与前面的示例相同,我们将接收器自定义为覆盖从 Alertmanager 收到的所有警报,并在新行上打印它们各自注解中的 summary 和 description。

    Receiver

    1. - name: 'default-receiver'
    2. slack_configs:
    3. - channel: '#alerts'
    4. title: "{{ range .Alerts }}{{ .Annotations.summary }}\n{{ end }}"
    5. text: "{{ range .Alerts }}{{ .Annotations.description }}\n{{ end }}"

    定义可重用的模板

    回到第一个示例,我们还可以提供一个包含命名模板的文件,然后由 Alertmanager 加载该文件,以避免跨越多行的复杂模板。在/alertmanager/template/myorg.tmpl创建一个文件,并在其中创建一个名为slack.myorg.txt的模板:

    1. {{ define "slack.myorg.text" }}https://internal.myorg.net/wiki/alerts/{{ .GroupLabels.app }}/{{ .GroupLabels.alertname }}{{ end}}

    现在,如下配置将使用给定名称的 “text” 字段加载模板,并且我们提供了自定义模板文件的路径:

    1. global:
    2. slack_api_url: '<slack_webhook_url>'
    3. route:
    4. receiver: 'slack-notifications'
    5. group_by: [alertname, datacenter, app]
    6. receivers:
    7. - name: 'slack-notifications'
    8. slack_configs:
    9. - channel: '#alerts'
    10. text: '{{ template "slack.myorg.text" . }}'
    11. templates:
    12. - '/etc/alertmanager/templates/myorg.tmpl'

    博客文章中进一步详细说明了此示例。