记一次使用grok解析失败原因_grokparsefailure
最近使用grok过滤清洗日志数据,一个不注意,logstash日志解析后一直有个_grokparsefailure标签,最终发现是grok表达式有错。
解决过程
- 测试日志文本 :
目的是获取日志文本里的“read”
"\r\n---------- 入参开始 ----------\r\nOPERATE : read\r\nSPENDTIMExxxxx
- 错误正则表达式 :
(?<=OPERATE : )(.*?)(?=\s)
logstash官网上说grok插件是在正则表达式之上,支持所有正则表达式,使用Oniguruma正则表达式库,所以我使用了某在线正则表达式校验获得了
以上正则表达式,最终是grok解析失败
- 正确的正则表达式
(?<=OPERATE : )(.*?)(?=\R))
在解析错误后,意识到还是要回归Oniguruma文档,查阅后发现新建一行(日志格式是每个key-value都 general newline)要使用\R匹配,至此解决。
- 参考链接
https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html#_description_133
https://github.com/kkos/oniguruma/blob/master/doc/RE