【问题标题】:prometheus doesn't match regex query普罗米修斯与正则表达式查询不匹配
【发布时间】:2019-07-15 17:58:07
【问题描述】:

我正在尝试在 grafana 中编写一个 prometheus 查询,它将选择 visits_total{route!~"/api/docs/*"}

我想说的是,它应该选择路由与/api/docs/*(正则表达式)不匹配的所有实例,但这不起作用。它实际上只是选择所有实例。我试图通过这样做来强制它选择其他人: visits_total{route=~"/api/order/*"} 但它不返回任何东西。我在prometheus的查询基础page中找到了这些运算符。我在这里做错了什么?

【问题讨论】:

  • 可能是因为您在正则表达式中有/。试试visits_total{route=~".*order.*"}

标签: grafana prometheus


【解决方案1】:

可能是因为您在正则表达式中有/。尝试使用 visits_total{route=~".*order.*"} 之类的东西,看看是否生成了结果。

也试试这个,

visits_total{route!~"\/api\/docs\/\*"}

如果你想排除所有带有docs这个词的东西,你可以在下面使用,

visits_total{route!~".*docs.*"}

【讨论】:

  • 第一个选项有效,但第二个选项出错。我宁愿只排除文档,也不愿手动包含我想要的所有内容。
  • @ninesalt 您可能还需要转义 *。检查更新的答案。
  • 谢谢。这行得通。我不需要逃避 *.我想排除两件事,所以我就这样做了route!~".*docs.*|.*metrics.*"
  • 我想添加一个文档链接:prometheus.io/docs/prometheus/latest/querying/examples,我想强调一下这句话:“Prometheus 中的所有正则表达式都使用 RE2 语法。”
【解决方案2】:

原始查询的主要问题是/api/docs/* 只会匹配/api/docs/api/docs////// 之类的内容;即查询中的 * 将匹配 0 个或多个 / 字符。

我想你的意思是/api/docs/.*

【讨论】:

    猜你喜欢
    • 2022-12-22
    • 1970-01-01
    • 1970-01-01
    • 2020-01-07
    • 2020-05-28
    • 2023-02-11
    • 2020-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多