【发布时间】:2019-07-06 11:24:37
【问题描述】:
我正在尝试使用正则表达式在 Kibana 中查找一些日志。我知道 Kibana 不支持“经典”正则表达式,而是支持 Lucene 查询语法。我已经阅读了它的文档 (https://www.elastic.co/guide/en/elasticsearch/reference/6.7/query-dsl-regexp-query.html#regexp-syntax) 并且我的查询应该可以工作,但它们没有。
这是一个示例日志条目,我想用我的查询来定位:
时间为:同步于 2019-02-12 19:15:09.402 开始;帐户 下载:+760ms/760ms;账户数据下载:+1221ms/1981ms; 分类推送:+0ms/1981ms;分类 开始时间:+131ms/2112ms;分类完成:+123ms/2235ms;在 总计:2235 毫秒。
我最终要找到的是所有“分类开始”时间超过某个阈值的日志条目。但是,我的查询在尝试接近最终查询时已经失败。
我在查询时得到结果:
message:"/categorization started/"
但是当我将其修改为:
message:/categorization started/
我什么也得不到。以下任何尝试也无济于事:
message:/categorization\sstarted/
message:/.*categorization\sstarted.*/
message:/.*categorization.*started.*/
此时我已经迷路了——为什么所有这些查询都不匹配?
在我看来,应该得到我想要的最终查询应该如下(查找分类开始时间为 10,000 毫秒或更多的所有条目):
message:/.*categorization started:\+<10000-99999>ms.*/
不用说,这当然也不返回任何内容,当上述查询已经失败时,这并不让我感到惊讶。
谁能向我解释我做错了什么?
谢谢
【问题讨论】:
-
开头和结尾不能有
/。+必须进行双重转义。".*categorization started:\\+<10000-99999>ms\\.*"。确保设置"flags":"ALL"。 -
可能有误会。我正在使用 kibana 网站输入查询。在那里它解释了正则表达式必须在前导和尾随斜杠中捕获。见:elastic.co/guide/en/elasticsearch/reference/6.7/…
-
不确定,但您匹配的字符串可能是空格标记的。见this article。
-
您的链接,我猜也是您,跳过了文档中解释这一点的部分:“...Elasticsearch 会将正则表达式 应用于标记器生成的术语对于该字段,而不是该字段的原始文本。”
-
我不相信 Lucene 处理得很好。我在 Kibana 中找到了另一种方法来执行此操作。检查这个stackoverflow.com/a/55160264/2251411
标签: regex amazon-web-services elasticsearch lucene kibana