Grafana仪表盘统计求助:按唯一deploymentId统计name数量
解决Grafana统计唯一deploymentId数量的问题
问题分析
你当前的查询("count", rate(name{tenant=~"$Agencies"}[$__rate_interval]))存在两个核心问题:
rate()函数仅适用于**计数器类型(Counter)**指标,用于计算每秒变化率。如果name是标签或 gauge 类型指标,rate()会返回0,因为这类指标值不会随时间持续递增。- 你的需求是统计唯一
deploymentId的数量,而rate()的逻辑和这个需求完全不匹配。
修正后的查询语句
直接使用以下PromQL查询即可实现需求:
count(count by (deploymentId) (name{tenant=~"$Agencies"}))
语句拆解
- 内层
name{tenant=~"$Agencies"}:根据仪表盘顶部的Agencies过滤器,筛选出对应租户下的所有name指标(需确保这些指标包含deploymentId标签)。 count by (deploymentId):按deploymentId分组,统计每个分组下的name指标数量——只要某个deploymentId存在至少一个name指标,就会生成一条对应的时间序列。- 外层
count():统计分组后生成的时间序列总数,也就是唯一deploymentId的数量,和你示例中期望的结果一致。
额外注意事项
- 如果
name指标可能存在空值或无效标签的情况,可以添加标签过滤条件,比如name{tenant=~"$Agencies", deploymentId!=""}来排除无效的deploymentId。 - 确保
deploymentId是指标的标签之一,否则查询会报错或返回0。
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

