找回密码
 立即注册
首页 业界区 业界 开源夜莺里如何引用标签和注解变量

开源夜莺里如何引用标签和注解变量

缄戈 2025-9-28 18:29:41
今天遇到开源社区咨询:夜莺里如何引用标签和注解变量?这个问题如果通读文档,其实也能找到答案,不过相关知识是散落在各处的,这里就集中说一下,方便大家查阅。
哪里可以引用标签和注解变量

主要有两个地方引用标签和注解变量:
告警规则
告警规则的备注、附加信息,可以引用标签变量。对于不同的告警规则生成的告警事件,如果想渲染成不同的事件内容,就可以在这里做一些配置。比如磁盘告警,只想在告警消息里展示 path 标签;比如证书过期的告警,只想在告警消息里展示 target 标签。
告警规则的标题当前版本也可以引用标签变量,不过极为不建议这么做,因为标题是用来做去重、归类的,如果标题里包含标签变量,可能会导致同一类告警无法归并。后面的版本也可能会下掉标题里引用标签变量的功能。
消息模板
不同的通知媒介会有不同的消息模板,比如钉钉机器人有 markdown 模板,邮件有 HTML 模板,短信有文本模板。消息模板里也可以引用标签、注解变量。
消息模板是一个相对全局的东西,建议不同的通知媒介分别只定义一个消息模板,所以消息模板不应该引入定制化的渲染逻辑,如果有一些定制化的渲染逻辑,通常应该在告警规则里做。
告警规则引用标签变量举例

通过一个例子说明,假设我要配置一个内存相关的告警规则:
  1. mem_free > 0
复制代码
这里的阈值是 0,所以肯定会触发告警,方便我们测试。预览一下数据:
1.png

这个查询条件只返回了一条数据(因为我这是使用 Docker compose 启动的测试环境,里边只有一个 Categraf 在跑)。预览的数据中可以看到,标签部分只有一个 ident 标签。
下面我在附加信息(Annotations)里引用这个标签变量,例子如下:
2.png

定义了两个附加信息,其中 Runbook 比较简单,写了一个 URL 地址,这个 URL 中引用了 {{ .TagsMap.ident }} 变量,就是提取的 ident 标签的值,也可以写成 {{ $labels.ident }},类似 Prometheus 的标签变量引用方式。$labels 相当与是 .TagsMap 的别名。
另一个附加信息就比较复杂了,MemAvailablePercent,是通过调用模板函数 query 做了一个二次查询,即 mem_free 告警时,顺便获取了一下 mem_available_percent 的值。真实生产环境里,机器会有多台,告警的机器只有部分,所以执行 query 的时候,需要加上 ident 标签的过滤条件,确保查询到的 mem_available_percent 是和告警的机器一致的。printf 部分,是在拼接一个 promql,promql 中引用了 .TagsMap.ident 变量。query 的查询结果塞到了 $memMetrics 变量中,$memMetrics 是一个数组,所以用 range 遍历了一下,把每个条目的 ident 和 value 打印了出来。具体可以参考 模板函数文档。
消息模板引用变量举例

夜莺已经内置了很多告警消息模板,可以参考内置模板做调整,以 Dingtalk 的模板举例:
[code]#### {{if $event.IsRecovered}}<font color="#008800">
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册