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收集nginx日志之使用grok过滤插件解析日志