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

Prometheus PromQL添加id=~"\.+"过滤后无结果问题排查

PromQL过滤非空id的写法问题分析

你的问题确实出在id=~"\.+"的正则写法上,具体原因和修正方案如下:

问题根源

id=~"\.+"这个正则的含义是匹配包含至少一个点(.)的id值,而不是你想要的“非空id”。如果你的非空id里没有点字符,自然会匹配不到任何数据,导致查询无结果。

正确的非空id过滤写法

方法一:直接用非空判断(推荐,性能更优)

不需要正则,直接用id!=""过滤掉空id,写法直观且性能更好:

((sum by (a,b) (irate (request_total{a=~"xyz.*", b=~"tty", id!="", status=~"^[45][0-9][0-9]$"}[10m])))/ (sum by (a,b) (irate (request_total{a=~"xyz.*", b=~"tty", id!="", status=~".*"}[10m])))) *100

方法二:使用正确的正则匹配

如果一定要用正则,把正则改成id=~".+",这里的.是正则元字符,代表任意单个字符,+表示至少出现一次,整体含义就是“匹配长度至少为1的非空id”:

((sum by (a,b) (irate (request_total{a=~"xyz.*", b=~"tty", id=~".+", status=~"^[45][0-9][0-9]$"}[10m])))/ (sum by (a,b) (irate (request_total{a=~"xyz.*", b=~"tty", id=~".+", status=~".*"}[10m])))) *100

额外注意点

你原来查询里的status=~"\.*"也是错误的,这个正则是匹配“零个或多个点”,而不是所有状态值,应该改成status=~".*"(匹配任意状态)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 08:35:08