静默(Silence)
静默是「在一段时间内,忽略匹配某组标签的告警通知」。它只拦截通知,规则的评估照常进行——这是它与「暂停规则」的本质区别:静默期间你仍然能在告警列表里看到 Firing 状态。
从告警直接创建
最顺手的路径:在 Alerting → Alerts 列表找到正在 firing 的告警,点 Silence,Grafana 会预填它的全部标签作为匹配器。改成你想要的范围(通常保留 alertname 与 instance 两三个关键标签即可),设定开始与结束时间,填上注释(谁、为什么、关联工单号),保存。
匹配器的三种写法
=:精确相等。!=:不等于。=~:正则匹配,如instance=~"web-.*",适合一次罩住一组机器。
注意: 静默匹配的是实例标签的完整子集要求——告警实例必须满足所有匹配器才会被静默。少写一个
instance就静默了整条规则,多写一个就一个都没静默,两种事故都常见。
批量场景也可以反向操作:在 Silences 页手工新建,或从已发送的通知消息里的链接一键静默(Slack、邮件模板默认带此链接,取决于通知渠道是否支持)。
通知模板(Go template)
各渠道的通知文案由 Go text/template 渲染。你不一定要重写模板——多数联系点的 Custom message 区域只暴露 Title、Text/Message 几个字段,在其中引用变量就够日常使用。
常用变量速查:
| 变量 | 内容 |
|---|---|
{{ .Status }} |
firing 或 resolved |
{{ .CommonLabels.alertname }} |
组内共同的规则名 |
{{ .GroupLabels.team }} |
分组标签值 |
{{ range .Alerts }}...{{ end }} |
遍历组内每条告警 |
{{ .Annotations.summary }} |
单条告警的注解 |
自定义 Slack 消息示例
在 Slack 联系点的 Custom message 中启用 Message template 后写入:
{{ if eq .Status "firing" }}:rotating_light:{{ else }}:white_check_mark:{{ end }}
**{{ .CommonLabels.alertname }}**({{ .Status }})
{{ range .Alerts }}
- `{{ .Labels.instance }}`:{{ .Annotations.description }}
[查看曲线]({{ .GeneratorURL }}) · [静默 1 小时]({{ .SilenceURL }})
{{ end }}
GeneratorURL 会直达触发告警的面板视图,SilenceURL 一键打开预填好匹配器的静默创建页——值班体验的关键往往就是这两个链接。
提示: 整段自定义模板适合用 Provisioning 的
templates字段挂.tmpl文件管理,改模板走 Git 评审;UI 内改适合临时救火。
常见误配
- 静默永不结束:创建时勾了类似「不设结束时间」的选项,告警被无限期消音。定期在 Silences 页按创建人筛一遍。
- 时区错位:静默的起止时间按浏览器时区录入、按实例时区展示,跨时区团队约定用 UTC 或规则名里写死。
- 模板变量名拼错:Go 模板渲染失败时通常回退默认文案或直接发空,先点联系点的 Test 验证。
- 以为静默会暂停告警:见上文,静默只挡通知,状态机照跑。