如何跨不同Pod查询test_coverage指标的最新值
问题描述
我有一个服务用于从Pull Request中收集项目的test_coverage数据,采集器部署在不同Pod中,数据示例如下:
test_coverage{project="a", pod="pod-a"} 80@1684921872 82@1684921882 test_coverage{project="a", pod="pod-b"} 90@1684982920
我希望获取跨不同Pod的最新测试覆盖率值(即90),尝试使用last_over_time(test_coverage{project="a"}[1w])后得到两个结果:
test_coverage{project="a", pod="pod-a"} 82 test_coverage{project="a", pod="pod-b"} 90
请问如何仅返回值90?
解决方案
你可以通过聚合函数去掉pod标签并筛选出目标值,根据实际需求选择以下两种方式:
方式1:取所有Pod最新值中的最大值
如果你的场景里最新的覆盖率恰好是最大值(如示例中的90),可以用max聚合函数:
max(last_over_time(test_coverage{project="a"}[1w]))
last_over_time先获取每个Pod的最新覆盖率,max再从这些值中取出最大的那个,同时自动去掉pod标签,最终只返回90。
方式2:取所有Pod中最新采集的覆盖率值
如果需要严格获取时间戳最晚的采集值(不管数值大小),可以用topk聚合函数配合by ()去掉标签:
topk(1, last_over_time(test_coverage{project="a"}[1w])) by ()
topk(1, ...)会选出所有序列中时间戳最晚的那个值,by ()则移除所有标签,最终只返回该值。
内容的提问来源于stack exchange,提问作者Tom76kimo
相关产品推荐
相关产品推荐

