当 id 有破折号时 Grok 过滤器不工作

Grok filter is not working when id has dashes

我有如下示例输入。

[2022-01-06 19:51:42,143] [http-nio-8080-exec-7] DEBUG  [50a4f8740c30b9ca,c1b11682-1eeb-4538-b7f6-d0fb261b3e1d]

我实现了一个 grok 过滤器来验证文本。

\[%{TIMESTAMP_ISO8601:timestamp}\] \[(?<threadname>[^\]]+)\] %{LOGLEVEL:logLevel}  \[%{WORD:traceId},%{WORD:correlationId}\]

当我验证它时,它说没有匹配项。 但如果我删除 - 在相关 ID 中,该过滤器工作正常。是否需要对过滤器进行任何修改以在相关 ID 中接受 -?

试试这个。

\[%{TIMESTAMP_ISO8601:timestamp}\] \[%{DATA:threadName}\] %{LOGLEVEL:logLevel}  \[%{DATA:traceId},%{DATA:correlationId}\]

根据 this %{WORD} 模式由这个正则表达式定义 \b\w+\b

  • \w 捕获字母数字
  • \b 捕获单词边界。它可以帮助您执行 whole words only

因此,如果您的原始文本包含 -,它将永远不会被捕获。

您可以尝试 %{DATA},因为它捕获 .*?