通知方式
告警通知支持邮件、企业微信、钉钉、WebHook 等多种渠道。
需先配置通知方式,才能在告警规则中选择对应渠道接收告警消息。
邮件
1. 启用 SMTP 服务
在 ops.yaml
中添加以下环境变量,重启运维平台服务,以启用 SMTP 邮件功能。
ENV_SMTP_ENABLED: "true" # 启用 SMTP 邮件能力
ENV_SMTP_HOST: "smtp.example.com" # 替换为 SMTP 邮箱服务器地址
ENV_SMTP_PORT: "465" # 替换为 SMTP 邮箱服务器端口
ENV_SMTP_USER: "ops@example.com" # 替换为 SMTP 邮箱服 务器帐号
ENV_SMTP_PASSWORD: "************" # 替换为 SMTP 邮箱服务器授权码
ENV_SMTP_SKIPVERIFY: "true" # 跳过对邮件服务器的 SSL/TLS 证书验证
ENV_SMTP_FROM_ADDR: "ops@example.com" # 替换为告警发送邮箱
ENV_SMTP_FROM_NAME: "HAP Alert" # 告警邮件标题
2. 在运维平台 --> 告警 --> 通知方式中选择 Email 进行编辑
3. 在 Addresses 下填写告警接收者的邮箱地址,支持通过 ;
\n
,
分隔符来输入多个电子邮件地址,以便将通知发送给多个收件人。
4. 保存后再次进入编辑页面,点击 Test --> Send test notification,等待片刻后告警接收者的邮箱地址会收到一封测试邮件,代表邮件通知功能启用正常。
群机器人通知配置(企业微信/钉钉)
在配置企业微信或钉钉机器人前,需先定义告警消息模板,确保消息以合适的格式进行通知。
配置告警消息模板
1. 在 Notification Templates 页面点击 Add notification template 添加告警模板。
2. 自定义告警标题模板。
Template name 字段填写模板名称: custom_title
Template 内容如下:
{{ define "custom_title" -}}
{{ if gt (.Alerts.Firing | len) 0 }}🚨 {{ .Alerts.Firing | len }} Firing alerts. {{ end }}{{ if gt (.Alerts.Resolved | len) 0 }}✅ {{ .Alerts.Resolved | len }} Resolved alerts.{{ end }}
{{ end -}}
点击 Refresh 可以预览效果,如下图所示:
3. 自定义告警内容模板。
与上述添加告警模板方式相同,Template name 字段填写模板名称: custom_template
Template 内容如下:
{{ define "custom.alert_labels_and_annotations" -}}
{{ len .Alerts.Firing }} Firing alert(s)
{{ range .Alerts.Firing -}}
{{ template "alert.labels_and_annotations" . -}}
Alert fired at: {{ .StartsAt | date "2006-01-02 15:04:05 MST" }}
{{ end }}
{{ len .Alerts.Resolved }} Resolved alert(s)
{{ range .Alerts.Resolved -}}
{{ template "alert.labels_and_annotations" . -}}
Alert and Recovery Time:
- Alert fired at: {{ .StartsAt | date "2006-01-02 15:04:05 MST" }}
- Alert resolved at: {{ .EndsAt | date "2006-01-02 15:04:05 MST" }}
{{ end -}}
{{ end -}}
{{ define "alert.labels_and_annotations" }}
Alert labels: {{ len .Labels.SortedPairs }}
{{ range .Labels.SortedPairs -}}
- {{ .Name }} = {{ .Value }}
{{ end }}
Alert annotations: {{ len .Annotations.SortedPairs }}
{{ range .Annotations.SortedPairs -}}
- {{ .Name }} = {{ .Value }}
{{ end }}
{{ end -}}
如下图所示:
企业微信
在配置企业微信前,需先定义告警消息模板,确保消息以合适的格式进行通知。
1. 获取企业微信群告警机器人URL,例如:
https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=******************
2. 在 Contact points 页面点击 Create contact point 进行创建新的告警渠道
3. 填写如下信息
- Name:自定义名称
- Integration:选择 WeCom
- Webhook URL:填写企业微信群机器人 URL
- Optional WeCom settings
- Message Type:选择 Markdown 作为消息类型
- Message:填写告警消息使用的模板标识:
{{ template "custom.alert_labels_and_annotations" . }}
- Title:填写告警标题使用的模板标识:
{{ template "custom_title" . }}
填写过程可参考下方图片示例:
填写告警消息/标题使用的模板标识可参考下方图片示例:
4. 在 Contact points 页面选择对应新增的告警渠道,点击 Edit 重新进入编辑页面后,依次再点击 Test --> Send test notification 发送测试消息。
在企业微信群中收到机器人发送的测试消息,及代表企业微信告警渠道配置成功。
钉钉
在配置钉钉前,需先定义告警消息模板,确保消息以合适的格式进行通知。
1. 获取钉钉群告警机器人URL,例如:
https://oapi.dingtalk.com/robot/send?access_token=******************
2. 在 Contact points 页面点击 Create contact point 进行创建新的告警渠道
3. 填写如下信息
- Name:自定义名称
- Integration:选择 DingDing
- URL:填写钉钉群机器人 URL
- Optional DingDing settings
- Message Type:选择 ActionCard 作为消息类型
- Title:填写告警标题使用的模板标识:
{{ template "custom_title" . }}
- Message:填写告警消息使用的模板标识:
{{ template "custom.alert_labels_and_annotations" . }}
填写过程可参考下方图片示例:
填写告警标题/消息使用的模板标识可参考下方图片示例:
4. 在 Contact points 页面选择对应新增的告警渠道,点击 Edit 重新进入编辑页面后,依次再点击 Test --> Send test notification 发送测试消息。
在钉钉群中收到机器人发送的测试消息,及代表钉钉告警渠道配置成功。
- 消息底部的 More 是一个超链接跳转 Grafana 内部地址,尚不支持隐藏或修改跳转地址,忽略即可。
Webhook
1. 在 Contact points 页面点击 Create contact point 进行创建新的告警渠道
2. 填写如下信息
- Name:自定义名称
- Integration:选择 Webhook
- URL:填写 Webhook URL
填写过程可参考下方图片示例:
3. 在 Contact points 页面选择对应新增的告警渠道,点击 Edit 重新进入编辑页面后,依次再点击 Test --> Send test notification 发送测试消息。
Webhook 会接收到如下格式的消息体:
{
"receiver": "test",
"status": "firing",
"alerts": [
{
"status": "firing",
"labels": {
"alertname": "TestAlert",
"instance": "Grafana"
},
"annotations": {
"summary": "Notification test"
},
"startsAt": "2025-03-03T11:47:43.86072525+08:00",
"endsAt": "0001-01-01T00:00:00Z",
"generatorURL": "",
"fingerprint": "57c6d9296de2ad39",
"silenceURL": "http://localhost:3000/prometheus/grafana/alerting/silence/new?alertmanager=grafana&matcher=alertname%3DTestAlert&matcher=instance%3DGrafana",
"dashboardURL": "",
"panelURL": "",
"values": null,
"valueString": "[ metric='foo' labels={instance=bar} value=10 ]"
}
],
"groupLabels": {
"alertname": "TestAlert",
"instance": "Grafana"
},
"commonLabels": {
"alertname": "TestAlert",
"instance": "Grafana"
},
"commonAnnotations": {
"summary": "Notification test"
},
"externalURL": "http://localhost:3000/prometheus/grafana/",
"version": "1",
"groupKey": "test-57c6d9296de2ad39-1740973663",
"truncatedAlerts": 0,
"orgId": 1,
"title": "[FIRING:1] TestAlert Grafana ",
"state": "alerting",
"message": "**Firing**\n\nValue: [no value]\nLabels:\n - alertname = TestAlert\n - instance = Grafana\nAnnotations:\n - summary = Notification test\nSilence: http://localhost:3000/prometheus/grafana/alerting/silence/new?alertmanager=grafana&matcher=alertname%3DTestAlert&matcher=instance%3DGrafana\n"
}
4. 重要字段解析
字段名 | 说明 |
---|---|
status | 告警状态,firing 表示触发,resolved 表示恢复 |
alerts | 告警列表,包含多个告警事件 |
labels | 告警标签,例如 alertname 标识告警规则名称,instance 标识告警规则触发的实例 |
annotations | 告警附加信息,例如 summary |
startsAt | 告警触发时间 |
endsAt | 告警恢复时间(未恢复时为 0001-01-01T00:00:00Z ) |
fingerprint | 告警的唯一标识符 |
title | 告警通知的标题 |
message | 详细的告警消息内容 |
以 HAP WebHook 为例
1. 在 HAP 中创建一张工作表,包含以下字段:
字段名 | 字段类型 |
---|---|
规则名称 | 文本 |
状态 | 单选 |
实例 | 文本 |
摘要 | 文本 |
触发时间 | 日期 |
恢复时间 | 日期 |
唯一标识 | 文本 |
详细内容 | 文本 |
- 状态字段 预制两个选项:firing、resolved
如下图所示:
2. 在 HAP 中创建一个 Webhook 工作流,流程配置如下:
2.1 生成参数,通过从JSON数据范例生成,请求数据示例可使用上述发送测试消息示例的消息体内容
2.2 添加一个【获取多条数据】节点,选择【获取数组对象】
配置选项:
- 数据类型:发送API请求数组
- 发送API请求节点: Webhook 触发
- 选择数组:alerts
配置如下图所示:
2.3 添加一个【新增记录】节点,选择之前创建的工作表,基于多条记录逐条新增记录,数据源选择获取属组对象。
字段对应关系:
工作表字段名 | 对应数组字段 |
---|---|
规则名称 | labels_alertname |
状态 | labels_status |
实例 | labels_instance |
摘要 | annotations_summary |
触发时间 | startsAt |
恢复时间 | endsAt |
唯一标识 | fingerprint |
详细内容 | messages(Webhook触发) |
配置如下图所示:
3. 在运维平台,添加通知方式,选择 Webhook 类型,URL 填写上面在 HAP 创建的工作流 Webhook 地址。
在编辑页点击 Test --> Send test notification 发送测试消息,在 HAP 工作表中会新增一条如下内容的记录: