自定义 Alertmanager 模板

2016年3月3日作者 Fabian Reinartz

Alertmanager 处理由 Prometheus 服务器发送的告警,并根据告警标签将告警通知发送给不同的接收者。

接收者可以是许多不同集成中的一个,例如 PagerDuty、Slack、电子邮件,或者通过通用 webhook 接口进行自定义集成(例如 JIRA )。

模板

发送给接收者的消息是通过模板构建的。Alertmanager 带有默认模板,但也允许定义自定义模板。

在这篇博文中,我们将介绍一个简单的 Slack 通知自定义过程。

我们使用这个简单的 Alertmanager 配置,它将所有告警发送到 Slack。

global:
  slack_api_url: '<slack_webhook_url>'

route:
  receiver: 'slack-notifications'
  # All alerts in a notification have the same value for these labels.
  group_by: [alertname, datacenter, app]

receivers:
- name: 'slack-notifications'
  slack_configs:
  - channel: '#alerts'

默认情况下,Alertmanager 发送的 Slack 消息如下所示:

它显示有一个正在触发的告警,后面跟着告警分组的标签值(alertname、datacenter、app),以及告警共有的进一步标签值(critical)。

自定义

如果你有告警,你也应该有关于如何处理它们的文档——一个运行手册。一种好的方法是维护一个维基,其中包含你运行的每个应用程序的部分,以及每个告警的页面。

假设我们有一个运行中的维基,地址是 https://internal.myorg.net/wiki/alerts。现在我们希望在 Slack 消息中显示指向这些运行手册的链接。

在我们的模板中,我们需要访问“alertname”和“app”标签。由于这些是我们用于分组告警的标签,因此它们在我们模板数据的 GroupLabels 映射中可用。

我们可以直接将自定义模板添加到 Alertmanager 的 Slack 配置 中,该配置用于 Slack 消息的 text 部分。使用的 模板语言  是 Go 编程语言提供的。

global:
  slack_api_url: '<slack_webhook_url>'

route:
- receiver: 'slack-notifications'
  group_by: [alertname, datacenter, app]

receivers:
- name: 'slack-notifications'
  slack_configs:
  - channel: '#alerts'
    # Template for the text field in Slack messages.
    text: 'https://internal.myorg.net/wiki/alerts/{{ .GroupLabels.app }}/{{ .GroupLabels.alertname }}'

我们通过发送 SIGHUP 信号或重启 Alertmanager 来加载更改的配置。完成。

我们的 Slack 通知现在看起来像这样:

模板文件

或者,我们也可以提供一个包含命名模板的文件,然后由 Alertmanager 加载。这对于跨越多行的更复杂的模板特别有用。

我们创建一个文件 /etc/alertmanager/templates/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'

我们通过发送 SIGHUP 信号或重启 Alertmanager 来加载更改的配置和新的模板文件。完成。

要测试和迭代你的 Prometheus Alertmanager Slack 通知模板,你可以使用以下 工具