繁体   English   中英

Prometheus 查询以计算唯一的 label 值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM