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

如何统计Prometheus唯一指标总数及监控Histogram时间序列数量

问题1:如何获知Prometheus中唯一指标的总数?

要统计Prometheus里所有唯一指标名称的数量,你可以直接用这个PromQL查询:

count(count by (__name__) ({__name__=~".+"}))

拆解一下这个查询的逻辑:

  • {__name__=~".+"} 匹配所有存在的时间序列(__name__是Prometheus为每个指标自动添加的内置标签,专门存储指标名称)
  • count by (__name__) 按指标名称对序列分组,这里我们其实只需要分组后的唯一指标名称,分组后的计数值并不重要
  • 外层的count会统计这些分组后的唯一指标名称的总数,也就是你要的唯一指标总数

如果想排除Prometheus自身的内置指标(比如以__开头的系统标签对应的指标),可以把查询调整为:

count(count by (__name__) ({__name__=~"[^_].+"}))
问题2:监控Histogram指标的动态时间序列数量

针对你提到的http_api_end_point_latency_seconds这个Histogram指标,我分两种常见场景给你解决方案:

场景1:统计该指标所有存在的时间序列总数(包含自动生成的le标签)

Histogram类型的指标会为每个le分桶生成单独的时间序列,如果你要统计当前所有这些序列的总数量,直接用:

count(http_api_end_point_latency_seconds)

这个查询会返回当前时刻该指标下所有时间序列的总数,涵盖不同uri、status、authStatus和le组合的所有情况。

场景2:统计业务维度的唯一序列数(排除自动生成的le标签)

如果你更关注业务层面的标签组合(uri、status、authStatus)数量,不想被le分桶的自动标签干扰,可以用两种方式实现:

  • 方式一:用without关键字忽略le标签
    count without (le) (http_api_end_point_latency_seconds)
    
  • 方式二:用by关键字明确指定要保留的业务标签
    count by (uri, status, authStatus) (http_api_end_point_latency_seconds)
    

如果要把这些业务标签组合的数量汇总成一个总数,就在外层再套一个count:

count(count by (uri, status, authStatus) (http_api_end_point_latency_seconds))

这样就能得到当前时刻不同业务标签组合的唯一序列数量,完全不受le分桶的影响。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:27:14