AlertManager跨告警指标值引用:如何将某告警的指标值嵌入另一告警的注释描述
AlertManager跨告警指标值引用:如何将某告警的指标值嵌入另一告警的注释描述
你好,我来帮你解决这个问题。首先得明确一点:AlertManager本身没办法直接读取另一个告警的指标值,因为它只是负责接收并处理Prometheus发来的告警实例,不能主动去查询Prometheus的指标数据。所以我们得换个思路——在PromQL层面把两个指标关联起来,把你需要的sc_pcd_g2version数值带到sc_pcd_encryption_server的告警结果里,这样就能在注释里引用它了。
下面是具体的实现步骤,假设两个指标(sc_pcd_encryption_server和sc_pcd_g2version)都带有相同的instance标签(从你的规则来看应该是这样的):
1. 保留原有的sc_pcd_g2version告警规则
这个规则不用改动,继续让它正常触发告警:
name: sc_pcd_g2version expr: sc_pcd_g2version > 0 for: 1m labels: job: node severity: warning annotations: message: Possibility of pcd g2version failure {{ $labels.instance }}. summary: pcd g2version Check failure
2. 修改sc_pcd_encryption_server的告警规则
我们需要在它的expr中通过PromQL的关联语法,把同实例的sc_pcd_g2version数值带进来:
name: sc_pcd_encryption_server # 使用group_left关联同instance的sc_pcd_g2version数值,相乘后$value就是g2version的数值 expr: sc_pcd_encryption_server > 0 * on(instance) group_left() sc_pcd_g2version for: 1m labels: job: node severity: warning annotations: message: Possibility of **sc_pcd_g2version "{{ $value }}"** in encryption server failure {{ $labels.instance }}. summary: pcd encryption server Check failure
关键逻辑解释:
on(instance):指定用instance标签来匹配两个指标的实例;group_left():表示保留左边指标(sc_pcd_encryption_server)的所有标签,同时把右边指标(sc_pcd_g2version)的数值合并进来;- 因为
sc_pcd_encryption_server > 0的结果是1(满足条件时),乘以sc_pcd_g2version的数值后,最终告警的$value就是sc_pcd_g2version的当前值(也就是你要的25)。
如果你想保留sc_pcd_encryption_server本身的数值
要是你不想让$value被替换成g2version的数值,可以把g2version的数值作为一个自定义标签带进来,修改expr如下:
expr: label_replace(sc_pcd_encryption_server > 0, "g2version", "$1", "", "") * on(instance) group_left() (label_replace(sc_pcd_g2version, "g2version", "$value", "", ""))
然后在注释里用{{ $labels.g2version }}来引用:
annotations: message: Possibility of **sc_pcd_g2version "{{ $labels.g2version }}"** in encryption server failure {{ $labels.instance }}.
注意事项
- 确保两个指标的关联标签(比如
instance)是完全匹配的,否则无法正确关联数值; - 如果你的指标没有共同标签,需要先确认能不能通过其他标签(比如
job)来关联,或者调整指标的标签配置。
备注:内容来源于stack exchange,提问作者ramesh k
相关产品推荐
相关产品推荐

