我想要统计唯一标签值的数量。有点像
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")
我想要统计唯一标签值的数量。有点像
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
值返回结果的汇聚器,然后你才能计算它们。
另一个例子: 如果你想基于不同的标签值(例如:app)计算 Kubernetes 集群中部署的应用数量:
count(count(kube_pod_labels{app=~".*"}) by (app))
count(count(hello_info) by (a))
等价于以下SQL:
SELECT
time_bucket('5 minutes', timestamp) AS t,
COUNT(DISTINCT a)
FROM hello_info
GROUP BY t
5分钟
间隔内a
标签的不同值的数量-有关5分钟间隔的详细信息,请参见staleness docs。a
标签的唯一值数量,则必须使用以下PromQL查询:count(count(last_over_time(hello_info[1d])) by (a))
上述示例中的自定义间隔时间 - 1d
可以更改为任意值 - 请参阅这些文档获取可能用于该处的值。
此查询使用last_over_time()函数选择在过去一天内处于活动状态的所有时间序列。时间序列可以在任何时候停止接收新的样本并变得不活动。这种时间序列在5分钟的不活动后不能使用简单的count(...) by (a)
来捕获。Kubernetes中的新部署和横向 Pod 自动缩放是大量无效时间序列(也称为高流失率)的最常见来源。
对我有效的方法如下:
count(count by (a)(delta(hello_info[10m]) > 0)) OR on() vector(0)
它计算不同的非零指标数量。