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

如何在PromQL中同时获取delta结果与指标当前值?

实现方法:同时获取增量与当前值

完全可以实现,以下是具体方案:

核心思路

通过Prometheus告警规则的注释模板,结合内置的query函数,在触发告警时同时获取增量(即原PromQL中的$value)和指标的当前值。无需修改原触发条件的核心逻辑,只需在告警描述中添加对当前值的查询逻辑。

具体实现步骤

1. 修改告警规则的注释部分

在你的告警规则中,利用query函数根据告警的标签(比如instance、interfacealias)精准查询对应指标的当前值,然后嵌入到告警描述中。

示例告警规则:

groups:
- name: interface_errors_alerts
  rules:
  - alert: IfInErrorsIncrementAlert
    # 原触发条件不变
    expr: round(delta(ifInErrors{interfacealias=~"ISP.*|INF.*", datacenter="MyDataCenter"}[1h])) > 0
    for: 1m
    annotations:
      summary: "接口输入错误计数增加"
      description: "设备{{ $labels.instance }}的ifInErrors在过去1小时内增加了{{ $value }},当前值已达{{ query \"ifInErrors{instance=\\\"{{ $labels.instance }}\\\", interfacealias=\\\"{{ $labels.interfacealias }}\\\", datacenter=\\\"MyDataCenter\\\"}\" | first | value | round }}"
    labels:
      severity: warning

2. 关键细节说明

  • {{ $value }}:直接引用触发告警的增量值(即原PromQL中round(delta(...))的计算结果)。
  • query函数:根据当前告警的instance、interfacealias等标签,查询对应ifInErrors指标的即时值,通过first | value提取数值,再用round保证格式统一。
  • 注意转义双引号:在query的字符串参数中,内部的双引号需要用\"转义,避免模板解析错误。

可选优化方案(减少实时查询开销)

如果担心query函数带来的实时查询性能影响,可以先通过记录规则预先计算并保存当前值,再在告警注释中引用:

第一步:创建记录规则

groups:
- name: interface_errors_records
  rules:
  - record: ifInErrors:current
    expr: ifInErrors{interfacealias=~"ISP.*|INF.*", datacenter="MyDataCenter"}

第二步:修改告警注释

将query中的目标改为记录的指标:

description: "设备{{ $labels.instance }}的ifInErrors在过去1小时内增加了{{ $value }},当前值已达{{ query \"ifInErrors:current{instance=\\\"{{ $labels.instance }}\\\", interfacealias=\\\"{{ $labels.interfacealias }}\\\"}\" | first | value | round }}"

这样可以复用预先计算的结果,降低实时查询的资源消耗。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 11:30:57