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

多进程Python服务Prometheus Gauge指标Grafana可视化问题

问题解答

1. Gauge是否适合可上下波动的浮点数值?

完全适合。Gauge类型的核心用途就是表示可任意增减的数值,比如比率、使用率、温度这类会上下波动的场景,完美匹配你的需求。而Counter仅适用于单调递增的计数类指标(如请求次数),显然不符合你的场景。

2. 如何实现仅在指标更新时显示数据点的正确可视化?

针对你遇到的两个问题,分方案解决:

问题1:去除PID标签影响,合并逻辑相同的指标序列

多进程模式下prometheus-client默认会给每个进程的指标添加pid标签,导致Grafana将同一业务指标识别为多条独立序列。有两种解决方式:

方式一:通过PromQL聚合(无需修改代码)

使用聚合函数抽象掉pid标签,保留业务关心的维度:

  • 带some_id标签的指标:
    sum(parse_ratio_gauge) by (some_id)
    
    (若同一some_id对应多进程数值需合并用sum,仅需最新值则改用last)
  • 无业务标签的指标:
    sum(parse_ratio_gauge_2) without (pid)
    

方式二:修改代码全局共享指标(彻底消除PID标签)

若无需跟踪单个进程的指标,可调整Metrics初始化逻辑,让指标在多进程间共享(比如使用共享内存),但此方式需要额外配置,推荐优先使用PromQL聚合方案。

问题2:仅显示指标更新的时间点,避免恒定直线

Prometheus周期性抓取会存储重复的未变化值,导致Grafana显示平直线。通过PromQL过滤出值发生变化的时间点:

针对聚合后的单序列

parse_ratio_gauge_aggregated unless changes(parse_ratio_gauge_aggregated[1m]) == 0

其中1m需与Prometheus的scrape_interval保持一致,该查询仅保留最近1分钟内数值发生变化的时间点。

针对带标签的序列

sum(parse_ratio_gauge) by (some_id) unless changes(sum(parse_ratio_gauge) by (some_id)[1m]) == 0

Grafana可视化补充优化

  • 将图表类型切换为Points(点图),更直观展示离散的更新点
  • 在面板的「Transform」选项中添加「Filter by value」规则,过滤掉与前一个值相同的数据点

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 23:35:29