用于logstash的grok过滤器

Posted

技术标签:

【中文标题】用于logstash的grok过滤器【英文标题】:grok filter for logstash 【发布时间】:2014-10-15 19:34:38 【问题描述】:

我的日志文件有以下形式的行:

10/13 14:05:18.192 [modulename]: [pid]: (debug level string): message string XYZ:<xyz value>

在哪里

modulename 是一个字符串 pid 是一个整数 debug level string 是一个类似“debug”或“info”或“error”的字符串 message string 是一个字符串 xyz value 是一个整数

示例:

10/13 14:05:18.192 [MyModule]: [12345]: (debug): This is my message. XYZ: 987

我四处搜索并尝试了一些东西,但得到了_grokparsefailure。有人可以帮我看看我可以在 logstash 中使用什么过滤器来解析这些日志吗?

【问题讨论】:

你试过什么?您是否尝试过使用grokdebug.herokuapp.com 逐步添加到您的模式中? 如果我将上面的示例日志提供给 grokdebugger 中的 Discover,它会建议:%SYSLOGPROGURIPATHPARAM %HAPROXYTIME %SYSLOG5424SD: %NAGiosTIME: (debug): 这是我的讯息。 XYZ: 987 ,但是当我在 grokdebugger 中使用调试器链接并使用此模式并提供示例输入时,它不喜欢它。此外,似乎 grokdebugger 将 10/13 视为路径名?和 pid 作为 NAGIOSTIME - 似乎不对。 (?&lt;date&gt;\d\d/\d\d) %TIME:time \[%WORD:module\]: \[%WORD:pid\]: 匹配你日志的开头...看看你能不能完成它 谢谢 - 成功了。我无法将 987(我上面的示例)解析为整数。我试过: (?\d\d/\d\d) %TIME:time [%WORD:module]: [%WORD:pid]: (%WORD:dbg_lvl) : %GREEDYDATA:msg XYZ: %INT:count 但我得到解析错误。如果我删除 XYZ: %INT:count 它可以工作,但我会失去计数。另外,我想结合日期和时间,以便按日期+时间对其进行排序。有没有办法做到这一点? 【参考方案1】:

首先GREEDYDATA 表示直到日志事件结束。因此,dbg_lvl 之后的所有文本都将分配给GREEDYDATA

在这里,试试下面的代码。您的代码过滤器的问题是它无法解析 msg 之后的任何内容。希望这会有所帮助。

(?&lt;date&gt;\d\d/\d\d) %TIME:time \[%WORD:module\]: \[%WORD:pid\]: \(%WORD:log_level\): %CISCO_REASON. %WORD: %BASE10NUM:xyz_number

【讨论】:

它在大多数情况下都有效。但我注意到,每当消息字符串包含 [] 或 ! or ... or aaa.bbb.ccc,解析失败。我在哪里可以找到 CISCO_REASON 的定义和我可以使用的其他内置解析器?基本上我希望能够使用 log_lvl: 和 XYZ: 之间的任何字符串解析日志。

以上是关于用于logstash的grok过滤器的主要内容,如果未能解决你的问题,请参考以下文章

Logstash 中的 Grok 过滤器错误

未找到 logstash grok 过滤器模式

Logstash Grok过滤器Apache访问日志

Logstash笔记-----grok插件的正则表达式来解析日志

使用Logstash filter grok过滤日志文件

logstash grok 过滤器忽略消息的某些部分