Grok 模式不适用于 $ 字符

Grok pattern does not work for $ character

我使用 logstash 将日志收集到 elasticsearch 中。我正在通过在此 link:

上测试它们来为某些日志创建 grok 过滤器

http://grokconstructor.appspot.com/do/match#result

我对 $ 字符有疑问。不好的是你不知道日志中是否会有 $ 字符。

示例日志:

[8/11/15 10:34:47:047 EEST] 0000003b MbuRmmAdapter I   DCSV1032I: DCS Stack DefaultCoreGroup at Member TEST\G

成功用于该日志的过滤器:

\[%{DATESTAMP:datestamp}\s(?<tzone>.*)\]\s(?<threadid>[\w]{8})\s%{WORD:logshortname}\s+(?<eventtype>[\w]{1})\s(?<msg>.*)

但是如果我们像MbuRmm$Adapter那样在MbuRmmAdapter里面放一个$的话,调试器会说$之后的部分和过滤器不匹配。

我能做什么?

只需为您的 logshortname 字段使用 DATA 模式而不是 WORD 模式,它应该可以正常工作:

\[%{DATESTAMP:datestamp}\s(?<tzone>.*)\]\s(?<threadid>[\w]{8})\s%{DATA:logshortname}\s+(?<eventtype>[\w]{1})\s(?<msg>.*)

您可以在此处查看所有预定义 grok 模式的定义: https://github.com/elastic/logstash/tree/v1.4.2/patterns