PromQL 查询中的动态阈值

Dynamic Thresholds in a PromQL query

我有以下定义

    - record: node_load5:node_cpu_seconds_total:critical
      expr: 3

    - record: node_load5:node_cpu_seconds_total:critical
      expr: 5
      labels:
        app: loki

    - record: Node_High_LoadAverage:Query
      expr: ((node_load5 / count without (cpu, mode) (node_cpu_seconds_total{mode="system"})))

并希望在 Prometheus 警报中使用查询,该查询根据标签指定的值或默认值评估阈值。

我可以将 node_load5:node_cpu_seconds_total:critical 计算为两个不同的值并使用 Node_High_LoadAverage:Query 来缩写查询。

我正在尝试使用 group_lefton 执行联接。我的查询无效。

Node_High_LoadAverage:Query > on (app) group_left node_load5:node_cpu_seconds_total:critical

有没有人做过类似的事情并愿意分享他们的工作示例?

谢谢!

我想通了。

something > on (team) group_left something_too_high_threshold

这使用基于“团队”标签的“连接”运算符来应用不同的指标和阈值。在此示例中,“团队”标签必须存在于“某事”指标以及不同的“something_too_high_threshold”表达式中。

这是规则模型。

    - record: something
      expr: 600
    - record: something
      expr: 400
      labels:
        team: elsewhere
    - record: something
      expr: 300
      labels:
        team: foo
    - record: something
      expr: 500
      labels:
        team: bar
    - record: something_too_high_threshold
      expr: 200
      labels:
        team: foo
    - record: something_too_high_threshold
      expr: 400
      labels:
        team: bar

这可以通过处理标签不存在的指标来改进。

something > on (team) group_left() ( something_too_high_threshold or on (team) something * 0 + 100 )

这使用与上面相同的模型规则并提供默认值“某物”指标,这些指标要么不包含标签,要么未在 something_too_high_threshold

中定义

这个网页 https://www.robustperception.io/using-time-series-as-alert-thresholds 帮助我解决了这个问题。