如何将 expr 的状态存储在警报规则中以在注释中使用它?

Posted

技术标签:

【中文标题】如何将 expr 的状态存储在警报规则中以在注释中使用它?【英文标题】:How to store the status of an expr in alert rules to use that in annotations? 【发布时间】:2019-11-19 18:57:56 【问题描述】:

每当一个节点进入“未就绪”我的 Kubernetes 集群时,我都会为 prometheus 设置警报。每当发生这种情况时,我都会在 Slack 上收到通知。问题是我收到相同描述的通知“节点 xxxx 处于未就绪状态”,即使它重新启动也是如此。我正在尝试为节点的就绪状态使用一个变量,并在注释部分使用它。

我尝试使用“vars”和“when”将其分配给变量以在注释中使用它。

  - name: NodeNotReady
    rules:
    - alert: K8SNodeNotReadyAlert
      expr: kube_node_status_conditioncondition="Ready",status="true" == 0
      for: 3m
      vars:
      - ready_status: "Ready"
        when: kube_node_status_conditioncondition="Ready",status="true" == 1
      - ready_status: "Not Ready"
        when: kube_node_status_conditioncondition="Ready",status="true" == 0
      labels:
        severity: warning
      annotations:
        description: Node  $labels.node  status is in  ready_status .
        summary: Node status  ready_status  Alert!  

我想收到这些警报: 1.当节点为NotReady时:“Node prom-node status is in NotReady”。 2.当节点Ready时:“Node prom-node状态为NotReady。”

【问题讨论】:

【参考方案1】:

所以你要找的东西是here。所以你应该在描述中得到这样的结果:

Node  $labels.node  status is in  if eq $value 1  Ready  else  Not Ready  end  status.

在发出更多警报之前也值得阅读this。

【讨论】:

对我不起作用,但是这样做了:节点 $labels.node 状态是 $value |人性化 |替换所有“1”“准备好”|替换所有“0”“未准备好”。 但我仍然没有收到 Ready 和 NotReady 的不同松弛警报。显然 AlertManager 对两个 Slack 通知使用相同的注释。对此有何建议? 如果我都重视您在 alertmanager 中的使用会更容易,因为上面的模板应该可以工作。你得到相同的注释,但这两个中的哪一个?给我更多细节(尽可能多)。 感谢@Armatorix。我为节点向上和向下添加了多个注释。并使用“if conditions”在警报管理器中调用它。

以上是关于如何将 expr 的状态存储在警报规则中以在注释中使用它?的主要内容,如果未能解决你的问题,请参考以下文章

将查询结果存储在变量中以在 Postgresql 中的另一个查询中使用

Prometheus学习系列(三十七)之报警客户端

使用正则表达式解析警报“expr”时出错

如何在 UserDefault 中存储推送通知警报消息?

如何在Matlab中将字符串存储在xml中以从opencv读取它

如何在CentBS中以与CentOS相同的方式实现FreeBSD中的expr功能?