[英]Prometheus query to count unique label values
我想计算唯一 label 值的数量。 就像
select count (distinct a) from hello_info
例如,如果我的指标“hello_info”有标签 a 和 b。 我想计算唯一 a 的数量。 在这里,对于 a = "1"、"2"、"3",计数将为 3。
hello_info(a="1", b="ddd")
hello_info(a="2", b="eee")
hello_info(a="1", b="fff")
hello_info(a="3", b="ggg")
count(count by (a) (hello_info))
首先,您希望聚合器的每个值为a
,然后您可以对它们进行计数。
count(count(hello_info) by (a))
相当于下面的SQL:
SELECT
time_bucket('5 minutes', timestamp) AS t,
COUNT(DISTINCT a)
FROM hello_info
GROUP BY t
参见time_bucket() function 说明。
例如,它默认每5-minute
间隔返回 label 的不同值a
数量 - 有关 5 分钟间隔的详细信息,请参阅过时文档。
如果您需要计算 label 在自定义时间间隔内(例如,在过去一天内)的唯一值a
数量,则必须改用以下 PromQL 查询:
count(count(last_over_time(hello_info[1d])) by (a))
自定义间隔 - 在上述情况下为1d
- 可以更改为任意值 - 请参阅这些文档了解可能的值,可以在那里使用。
此查询使用last_over_time() function 来选择在最后一天处于活动状态的所有时间序列。 时间序列可以随时停止接收新样本并变为非活动状态。 在 5 分钟不活动后count(...) by (a)
捕获此类时间序列。 Kube.netes 中的新部署和pod 水平自动缩放是大量不活动时间序列(也称为高流失率)的最常见来源。
其他示例:如果要根据标签的不同值(例如:app)计算kubernetes集群中部署的应用程序数量:
count(count(kube_pod_labels{app=~".*"}) by (app))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.