自定义 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)。
自定义
如果您有告警,您也应该有关于如何处理它们的文档——一本操作手册(runbook)。一个好的方法是拥有一个维基,其中包含您运行的每个应用程序的专区,并为每个告警设置一个页面。
假设我们有一个维基运行在 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 的通知模板,您可以使用以下 工具 。