跳到主要内容

标签、附加信息与级别

给路由用的标签、在通知里读得顺的附加信息,以及有意识地选 S1 / S2 / S3。

这页办完你会得到:规则产生的事件上,既有路由要用的标签,也有凌晨三点那个人需要的文字, 还有一个在你整套规则里含义一致的级别。

三种能挂在事件上的东西​

它们在不同的步骤里,行为也不一样,搞混了就是「通知规则怎么匹配不上」的常见原因:

附加标签附加信息级别
在哪儿第 1 步 基础配置第 6 步 事件处理第 3 步,每条查询上
形态key=valuekey: 文本S1 / S2 / S3
能被机器匹配能——屏蔽、订阅、通知规则都按它匹配不能能
逐事件渲染不,固定字符串是,模板变量会展开不
拿来干什么路由和筛选给读消息的人的上下文决定要不要叫醒人

一句话判断:要被匹配的,是标签;只需要被读的,是附加信息。

附加标签​

基础配置 → 附加标签收 key=value,用回车或空格分隔。它们会追加到这条规则产生的每条事件上, 叠在查询本身返回的标签之上。

表单会强制格式:key=value,key 以字母或下划线开头、只能由字母数字下划线组成, 单条不超过 64 个字符,同一条规则里 key 不能重复。标签里的空格会被去掉。

值得放在这里的东西:

team=infra
service=mysql
env=prod

这些是查询本身不可能知道的。ident 和 instance 来自指标,「归哪个团队」不来自指标。 后面的一切都按标签匹配:

  • 通知规则按它挑接收人和媒介;
  • 屏蔽规则按它静音;
  • 订阅规则让别的团队按它把事件捞走;
  • 事件列表按它筛。

两点提醒。别在这里编码一个逐序列变化的值——那是查询自己的标签该干的事。 以及,词表要小、要统一:一部分规则写 team=infra、另一部分写 owner=infra-team, 每条通知规则就都得同时认识这两个。

附加信息​

事件处理 → 附加信息收 key: 值。它们在事件产生时渲染,展示在事件详情页, 也能被通知消息引用。

值支持模板变量,所以是逐事件的:

summary {{$labels.ident}} 内存使用率 {{$value | printf "%.1f"}}%
dashboard_url https://grafana.example.com/d/host?var-ident={{$labels.ident}}

$labels.<名字> 是事件上的任意标签,$value 是触发值。引用了事件上没有的标签会渲染成空字符串。 模板写坏了会渲染成 failed to parse annotations——规则照常触发,但赶紧改。

以 http 开头的值,在事件详情页上会渲染成可点击的链接。

四个约定俗成的 key​

key 可以随便起,但表单推荐了四个,其中一个是特殊的:

Key用途
summary一句话上下文:什么坏了、影响谁、为什么要紧
runbook_url值班的人第一个该打开的文档
dashboard_url能看到这个问题所处环境的那张图
recovery_promql特殊。 事件恢复时会执行这条 PromQL,把结果写进 recovery_value 附加信息

recovery_promql 存在是因为一个真实的缺口:Prometheus 类规则的恢复, 意味着查询不再返回那条序列,所以没有值可报。在这里填一条不带阈值的表达式——

recovery_promql mem_used_percent{ident="{{$labels.ident}}"}

——恢复通知里就能说出「现在是多少」。查询失败时会写一条 recovery_promql_error, 不会因此让恢复失败。

在通知里引用​

事件详情页会自动逐项展示附加信息。想把某一项放进消息,在模板里引用它:

处理手册:{{$event.AnnotationsJSON.runbook_url}}

完整的变量列表见模板与变量。

级别​

规则里的每条查询都带一个级别,而它是决定你的告警日子好不好过的最关键的一个字段。

站得住脚的含义
S1(一级 / Critical)用户此刻已经受影响,必须有人在几分钟内处理。凌晨三点打电话是可以接受的
S2(二级 / Warning)没人管的话会变成 S1,但不是今晚。工作时间、群消息
S3(三级 / Info)值得记下来定期看,不值得打断任何人

级别本身不路由任何东西。它之所以能路由,是因为你的通知规则按它匹配—— 也正因如此,这几个定义必须在整套规则里保持一致。一半规则拿 S1 表示「紧急」、 另一半拿它表示「重要」,再怎么配路由也救不回来。

怎么选​

按顺序问两个问题:

  1. 需要人吗? 不需要就是 S3——记下来、画进图、每周看一次。 大多数磁盘用量和证书过期的告警在快到线之前都是 S3。
  2. 需要人现在就来吗? 不需要就是 S2。

剩下的才是 S1。在一套健康的规则里,这是很小的一部分:用户已经感知到的, 或者一小时内就会感知到的。

有两个习惯能让它保持诚实。回顾最近一个月真正把人叫起来的那些告警, 把没人立刻处理的降级——见规则设计实践。 以及,一条规则需要两个级别时,用一条规则里的多个级别配上级别抑制, 而不是写两条早晚会各走各路的规则。

下一步​