PromQL 如何统计某个标签的唯一值数量?

统计标签唯一值数量的标准写法是嵌套 count:count(count(metric) by (label))——内层按标签分组,外层统计组数。本文给出实例、变体与常见错误写法。

最佳实践
PromQL 如何统计某个标签的唯一值数量?封面

标准写法:count(count(http_requests_total) by (instance))——内层 by (instance) 把序列按实例分组,外层 count 数出有多少个组,即 instance 的唯一值个数。

分解理解

count(http_requests_total) by (instance)   # 每个 instance 一条结果(值是该实例的序列数)

外层再包一层 count(...)(不带 by),把"多少个分组"聚成一个数字:

count(count(http_requests_total) by (instance))   # 输出:42

常用变体

# 有多少种不同的状态码
count(count(http_requests_total) by (status))

# 每个 job 下有多少个实例
count by (job) (count by (job, instance) (up))

# 直接数 up 的实例数(更简单)
count(up == 1)

常见错误

  • count(http_requests_total) ——数的是序列总数,不是标签唯一值;
  • ❌ 忘记内层 by ——外层无从得知按什么维度去重。

观测云对照

观测云 DQL 的聚合函数直接支持"去重计数"语义(类似 count_distinct),在指标查看器选标签维度即可看到唯一值数量,无需嵌套写法。

常见问题(FAQ)

Q:能列出这些唯一值而不只是数量吗? PromQL 不行;用 API /api/v1/label/<label>/values 或 Grafana 的 label_values()

Q:标签值很多时这个查询慢吗? 两层聚合都走索引,千级取值秒出;百万级高基数场景才会明显变慢。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台