如何为管道分隔的日志消息定义grok模式?

时间:2015-08-18 20:11:08

标签: logstash-grok

在您点击logstash过滤器之前,设置ELK非常简单。我有一个日志分隔10个字段。我可能有一些空白,但我相信会有10个字段:

7/5/2015 10:10:18 AM|KDCVISH01|
|ClassNameUnavailable:MethodNameUnavailable|CustomerView|xwz261|ef315792-5c41-4bdf-aa66-73317e82e4d6|52|6182d1a1-7916-4874-995b-bc9a23437dab|<Exception>
afkh akla  487234 &*<Exception>

问: 1-我很困惑grok或正则表达式模式将只选择我正在寻找的字段而不是来自另一个字段的类似匹配。例如,什么是DATESTAMP模式只选择第一个值而不是最后一个字段中存在的时间戳(保存在堆栈跟踪中)的保证?

2-有没有办法定义位置映射?例如,第1个fiels是dateTime,第2个是机器名,第3个是类名,依此类推。无论字段值是否存在,这都将确保我在Kibana中显示字段。

1 个答案:

答案 0 :(得分:0)

我知道我迟到了,但这是一个我正在使用的简单解决方案,

将您的space替换为filter { mutate { gsub => ["message","\|"," "] } grok { match => ["message","%{DATESTAMP:time} %{WORD:MESSAGE1} %{WORD:EXCEPTION} %{WORD:MESSAGE2}"] } }

选项1:

|

选项2:filter { grok { match => ["message","%{DATESTAMP:time}\|%{WORD:MESSAGE1}\|%{WORD:EXCEPTION}\|%{WORD:MESSAGE2}"] } }

除外
{{1}}

工作正常:http://grokdebug.herokuapp.com/。检查一下