Grafana Unified Alerting 通过 severity 标签分级、自定义模板渲染和 Notification Policies 路由,实现企业微信与钉钉的梯度告警报告。需配置 Webhook Contact Point、定义 alert_gradient 模板并按严重性分发通知。

Grafana Unified Alerting(v9.0+ 默认启用,10.x/11.x 全面替代旧 Alerting)支持结构化、可编程的告警通知流。要对接企业微信与钉钉并产出“带梯度的报告”,核心不是简单发消息,而是通过分级标签 + 模板逻辑 + 通知策略路由,让不同严重程度的告警自动触发不同格式、不同内容深度、甚至不同接收范围的消息——这就是“梯度”的实质。
以下是清晰、可落地的配置路径:
一、统一前置:确保 Unified Alerting 已启用且环境就绪
- 确认 Grafana 配置中
unified_alerting = true(通常阿里云 Grafana 版默认开启) - 使用 Admin 账号或阿里云账号直登 Grafana 控制台(无需额外安装插件)
- 所有后续操作均在 Alerting → Contact points / Notification policies / Templates 页面完成
二、为“梯度”打基础:用 Labels 定义告警等级
告警规则中必须显式设置 severity 标签(或其他自定义等级字段),例如:
labels: severity: critical # 或 warning / info / resolved team: backend service: api-gateway
✅ 关键点:
severity是 Grafana 内置语义标签,Notification Policies 可直接按它做路由;不要只靠 Rule Name 或 Description 判断级别。
三、对接企业微信与钉钉:用 Webhook Contact Point + 自定义 Body
两者都走 Webhook 类型 Contact Point,区别仅在 URL 和消息体结构:
| 平台 | 推荐 Message Type | 必填 Header | 示例 Body(精简版) |
|---|---|---|---|
| 企业微信 | Markdown |
Content-Type: application/json |
{ "msgtype": "markdown", "markdown": { "content": "{{ template \"wecom_critical\" . }}" } } |
| 钉钉 |
Custom(POST) |
同上 + 签名头(如启用) | { "msgtype": "markdown", "markdown": { "title": "? {{ .CommonLabels.alertname }}", "text": "{{ template \"dingtalk_firing\" . }}" } } |
⚠️ 注意:企业微信官方要求
msgtype=markdown时,content字段必须是纯文本(不支持嵌套 JSON);钉钉则支持完整 Markdown 结构。
四、构建“梯度报告”:用模板(Templates)实现内容分层
在 Alerting → Templates → New template 中定义多个模板,按 severity 分支渲染:
示例模板 alert_gradient:
{{ define "alert_gradient" }}
{{ if eq .Status "firing" }}
{{ if eq .CommonLabels.severity "critical" }}
### ? [CRITICAL] {{ .CommonLabels.alertname }}
> **影响范围**:核心服务中断,已持续 {{ .Alerts.Firing.0.Duration }}
> **当前值**:{{ printf "%.2f" (index .Alerts.Firing.0.Values "B") }}%(阈值 95%)
> **建议动作**:立即检查 `api-gateway` 实例日志 & Prometheus 查询 `rate(http_requests_total[5m])`
> **直达链接**:[查看大盘]({{ .Alerts.Firing.0.GeneratorURL }})|[跳转日志]({{ .CommonAnnotations.runbook }})
{{ else if eq .CommonLabels.severity "warning" }}
### ⚠️ [WARNING] {{ .CommonLabels.alertname }}
> **状态**:指标异常但未中断,建议 30 分钟内排查
> **关键指标**:CPU 使用率 {{ printf "%.1f" (index .Alerts.Firing.0.Values "A") }}%,内存 {{ printf "%.1f" (index .Alerts.Firing.0.Values "C") }}%
> **参考文档**:{{ .CommonAnnotations.runbook }}
{{ else }}
### ℹ️ [INFO] {{ .CommonLabels.alertname }}
> 基础健康巡检触发,无需紧急响应
{{ end }}
{{ else }}
### ✅ [RESOLVED] {{ .CommonLabels.alertname }}
> 异常已恢复,持续时间 {{ .Alerts.Resolved.0.Duration }}
{{ end }}
{{ end }}然后在 Contact Point 的 Message 字段中调用:{{ template "alert_gradient" . }}
五、路由到不同平台:用 Notification Policies 实现智能分发
在 Alerting → Notification policies → Edit 中设置树状策略:
- Root policy:匹配所有告警(
match_all: true) - 子策略 1:
severity = "critical"→ 发送到「企业微信-值班群」+ 「钉钉-技术总监」 - 子策略 2:
severity = "warning"→ 发送到「企业微信-后端组」+ 「钉钉-开发群」 - 子策略 3:
severity = "info"→ 仅发到「企业微信-运维周报」(静默通道,不 @)
✅ 这样就实现了:同一告警规则,按 severity 自动走不同通道、不同模板、不同人群——真正“梯度”。
不复杂但容易忽略



















