Logstash grok 模式过滤自定义日志消息

Posted

技术标签:

【中文标题】Logstash grok 模式过滤自定义日志消息【英文标题】:Logstash grok pattern to filter custom Log message 【发布时间】:2015-03-16 08:40:25 【问题描述】:

我是 logstash 的新手,我想从日志消息中过滤文件。这是日志消息:

[2015-03-16 13:12:05,130]  INFO - LogMediator ServiceName = TestService_v1,SystemDate = 3/16/15 1:12 PM,ServerIP = 127.0.1.1,ServerHost = Inspiron-3521,SequenceName = Validation,Message = Going to Validate Request ,MessageCode = null,ErrorMessage = null,ErrorDetail = null,ErrorException = null

我想从上面的日志消息中提取所有字段,如 ServiceName、SystemDate、SequenceName 等。此日志消息的 grok 模式或正则表达式是什么?

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

您可以首先使用以下方法将消息分成三部分(时间戳、日志级别和剩余的日志数据):

\[%TIMESTAMP_ISO8601:timestamp\]\s+%WORD:loglevel\s+-\s+%GREEDYDATA:logData

然后您可以将 csv 过滤器应用于 logdata 字段,如下所示:

csv 
  columns => ["serviceName","systemDate","serverIP","serverHost","sequenceName","message","messageCode","errorMessage","errorDetail","errorException"]
  separator => ","

这将在每个之后拆分您的 logData,因此您将获得一个名为 message 的新字段,其中包含文本“Message = Going to Validate Request” 您现在可以编辑各个字段,例如您可以使用以下 grok 过滤器提取实际消息:

Message = %GREEDYDATA:messageText

我发现使用 grok 调试器来计算单个 grok 模式非常有帮助: http://grokdebug.herokuapp.com/

【讨论】:

以上是关于Logstash grok 模式过滤自定义日志消息的主要内容,如果未能解决你的问题,请参考以下文章

Logstash 应该只记录 grok 解析的消息

未找到 logstash grok 过滤器模式

Logstash Grok过滤器Apache访问日志

Logstash收集nginx日志之使用grok过滤插件解析日志

Logstash收集nginx日志之使用grok过滤插件解析日志

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