You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PromQL中按标签聚合指标并配置节点添加失败率告警?

批处理作业节点添加失败率告警实现方案

问题修正

你之前的规则存在两个关键问题:

  • 忽略了name标签:会把不同批次作业的统计数据混在一起,无法精准定位到某一次作业的失败率超标
  • 误用rate()函数:你的指标是累计总数(counter类型),rate()计算的是速率,不符合你要统计“总数占比”的需求

正确的PromQL告警表达式

sum by(id, name) (
  number_of_failed_nodes_total{_namespace_="batchJob"}
) >= sum by(id, name) (
  all_nodes_total{_namespace_="batchJob"}
) * 0.05

逻辑说明

  • 按id+name分组:确保只统计同一地域、同一批次作业内的失败节点数和总节点数,完全匹配你的需求
  • 直接使用指标当前值:因为你的指标是累计型counter,作业运行时数值持续增长,结束后保持稳定。配合告警规则的for字段(比如设为10m),可以避免短暂波动误触发,同时覆盖最长2天的作业周期。

进阶优化(可选)

如果你的指标不会在作业结束后重置,想精准获取当前作业的增量(避免混入历史作业数据),可以用increase()结合2d时间范围:

sum by(id, name) (
  increase(number_of_failed_nodes_total{_namespace_="batchJob"}[2d])
) >= sum by(id, name) (
  increase(all_nodes_total{_namespace_="batchJob"}[2d])
) * 0.05

increase()会计算2天内的指标增量,刚好覆盖作业最长运行时间,确保统计的是当前批次作业的真实数据。

完整告警规则配置示例

groups:
- name: batch_node_add_alerts
  rules:
  - alert: NodeAddFailureRateOver5Percent
    expr: |
      sum by(id, name) (
        number_of_failed_nodes_total{_namespace_="batchJob"}
      ) >= sum by(id, name) (
        all_nodes_total{_namespace_="batchJob"}
      ) * 0.05
    for: 10m
    labels:
      severity: warning
    annotations:
      summary: "节点添加失败率超标:{{ $labels.id }}-{{ $labels.name }}"
      description: "批次作业{{ $labels.name }}(地域{{ $labels.id }})失败节点占比已超5%,当前失败数:{{ $value }},总节点数:{{ query 'sum by(id, name) (all_nodes_total{_namespace_=\"batchJob\", id=\"' $labels.id '\", name=\"' $labels.name '\"})' }}"

内容的提问来源于stack exchange,提问作者Marcos Guimaraes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 10:26:03