如何实现仅从存活Pod抓取指标的Prometheus查询?
解决Pod重启后仅查询运行中Pod指标的Prometheus方案
直接用Prometheus内置的up指标就能搞定,核心逻辑是:只有运行中Pod对应的监控target会返回up=1,已终止Pod的target要么up=0要么会被Prometheus清理掉,通过关联这个指标就能过滤出有效数据。
针对Tomcat繁忙线程数的场景,给你两个实用的查询写法:
写法一:关联过滤(推荐)
tomcat_threads_busy * on(instance, namespace) group_left() up{job="tomcat"} == 1
- 解释:
up{job="tomcat"} == 1筛选出所有正常运行的Tomcat监控实例,通过on(instance, namespace)和tomcat_threads_busy指标做标签关联,group_left()保留业务指标的所有原有标签,最终只保留运行中Pod的繁忙线程数数据。
写法二:直接匹配过滤
如果你的指标和up指标的标签匹配度更高(比如都带pod标签),也可以用更简洁的写法:
tomcat_threads_busy and on(pod) up{job="tomcat"} == 1
- 解释:
and逻辑会只保留同时满足两个条件的样本,也就是只有对应up=1的Pod的线程数指标会被保留。
额外说明
up是Prometheus自动生成的指标,不需要额外配置,每个被监控的target都会生成,完全依赖Prometheus的服务发现和健康检查机制,比手动加标签更可靠。- 如果你的指标没有
instance或pod这类共同标签,只需要把on()里的标签换成两者共有的标签(比如namespace、service等)即可。
内容的提问来源于stack exchange,提问作者Gamby
相关产品推荐
相关产品推荐

