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

Prometheus Go SDK自定义Gauge问题:如何展示实时运行任务数?

问题:Prometheus Gauge统计运行任务数持续增长的解决方法

我有一个每5分钟监控外部任务的APP,尝试通过Prometheus的Gauge统计当前运行任务数。已声明GaugeVec如下:

JobStats= promauto.NewGaugeVec(
        prometheus.GaugeOpts{
            Namespace:   "myapi",
            Subsystem:   "app",
            Name:        "job_count",
            Help:        "Current running jobs in the system",
            ConstLabels: nil,
        },
        []string{"l1", "l2", "l3"},
    )

在统计任务的代码中执行:

metrics.JobStats.WithLabelValues(l1,l2,l3).Add(float64(jobs_cnt))

查询/metrics端点能获取数值,但该指标持续增长,仅重启APP才会归零。我用Grafana制作仪表盘,有两个问题:

  1. 如何让图表展示实际运行任务数而非持续上升的曲线?
  2. 该问题应在代码中处理(比如每次采集前重置为0)还是在Grafana中处理?

问题解答

1. 图表展示实际任务数的方法

如果暂时无法修改代码,可以在Grafana的PromQL查询中用delta函数计算两次采集的增量——因为你每5分钟采集一次,每次Add的数值就是当前任务数,增量即为实际运行任务数:

delta(myapi_app_job_count[5m])

但这只是临时 workaround,修正代码后直接查询指标本身即可得到准确的当前任务数:

myapi_app_job_count

2. 处理方式的选择

必须在代码中处理,因为Gauge类型指标的语义是「当前时刻的状态值」,而非累加值。你的代码错误在于用Add累加数值,正确做法有两种:

  • 直接用Set方法设置当前任务数(最简洁):
    metrics.JobStats.WithLabelValues(l1,l2,l3).Set(float64(jobs_cnt))
    
  • 如果需要清理旧标签值(比如标签组合动态变化),可先重置再设置:
    metrics.JobStats.WithLabelValues(l1,l2,l3).Set(0)
    metrics.JobStats.WithLabelValues(l1,l2,l3).Add(float64(jobs_cnt))
    

在Grafana中用查询函数修正属于临时方案,不符合Prometheus指标的语义规范,长期会导致指标含义模糊,增加排查问题的难度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:00:53