You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何过滤PromQL中已下线服务IP(PushGateway场景)

问题

在Grafana中使用变量功能标记被监控服务的所有IP,原PromQL语句如下:

label_values(jvm_memory_bytes_used{exported_job="$application"}, exported_instance)

但该语句会返回已下线服务的IP。由于使用PushGateway,并非所有被监控服务都有up指标,无法通过up进行过滤。尝试通过过滤jvm_memory_bytes_used值大于0的样本修改语句:

label_values(jvm_memory_bytes_used{exported_job="$application"} > 0, exported_instance)

但该语句存在语法错误,需要可行的过滤已下线服务IP的方案。

解决方案

方法1:基于近期数据存在性过滤

label_values不支持直接在指标参数中使用数值过滤条件,需先通过聚合函数筛选出有有效上报数据的实例,再提取标签。使用count_over_time统计最近一段时间内的样本数量,仅保留有数据的实例:

label_values(count_over_time(jvm_memory_bytes_used{exported_job="$application"}[5m]) > 0, exported_instance)
  • 说明:[5m]指定统计最近5分钟的数据,count_over_time返回每个实例在该时间段内的样本数,大于0表示实例在近期有数据上报(处于在线状态),再通过label_values提取对应的exported_instance(服务IP)。

方法2:基于最新样本值过滤

如果只需判断最新一次上报的指标值是否有效,可使用last_over_time获取最近的样本值并过滤:

label_values(last_over_time(jvm_memory_bytes_used{exported_job="$application"}[1m]) > 0, exported_instance)
  • 说明:[1m]取最近1分钟内的样本,last_over_time获取该时间段内的最新指标值,大于0则认为服务当前在线,再提取对应的IP标签。

方法3:去重优化(避免重复IP)

由于同一个服务IP可能对应heap和nonheap两种指标类型,直接提取标签会出现重复项,可通过by(exported_instance)聚合后再过滤:

label_values(count_over_time(jvm_memory_bytes_used{exported_job="$application"}[5m]) by (exported_instance) > 0, exported_instance)
  • 说明:by(exported_instance)按服务IP聚合统计结果,确保每个IP仅出现一次,优化变量列表的展示效果。

内容的提问来源于stack exchange,提问作者esther lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 14:42:37