普罗米修斯与正则表达式查询不匹配
Posted
技术标签:
【中文标题】普罗米修斯与正则表达式查询不匹配【英文标题】:prometheus doesn't match regex query 【发布时间】:2019-07-15 17:58:07 【问题描述】:我正在尝试在 grafana 中编写一个 prometheus 查询,它将选择 visits_totalroute!~"/api/docs/*"
我想说的是,它应该选择路由与/api/docs/*
(正则表达式)不匹配的所有实例,但这不起作用。它实际上只是选择所有实例。我试图通过这样做来强制它选择其他人:
visits_totalroute=~"/api/order/*"
但它不返回任何东西。我在prometheus的查询基础page中找到了这些运算符。我在这里做错了什么?
【问题讨论】:
可能是因为您在正则表达式中有/
。试试visits_totalroute=~".*order.*"
【参考方案1】:
可能是因为您在正则表达式中有/
。尝试使用 visits_totalroute=~".*order.*"
之类的东西,看看是否生成了结果。
也试试这个,
visits_totalroute!~"\/api\/docs\/\*"
如果你想排除所有带有docs
这个词的东西,你可以在下面使用,
visits_totalroute!~".*docs.*"
【讨论】:
第一个选项有效,但第二个选项出错。我宁愿只排除文档,也不愿手动包含我想要的所有内容。 @ninesalt 您可能还需要转义*
。检查更新的答案。
谢谢。这行得通。我不需要逃避 *.我想排除两件事,所以我就这样做了route!~".*docs.*|.*metrics.*"
我想添加一个文档链接:prometheus.io/docs/prometheus/latest/querying/examples,我想强调一下这句话:“Prometheus 中的所有正则表达式都使用 RE2 语法。”【参考方案2】:
原始查询的主要问题是/api/docs/*
只会匹配/api/docs
和/api/docs//////
之类的内容;即查询中的 *
将匹配 0 个或多个 /
字符。
我想你的意思是/api/docs/.*
。
【讨论】:
以上是关于普罗米修斯与正则表达式查询不匹配的主要内容,如果未能解决你的问题,请参考以下文章