Logstash Grok模式如何适配完全缺失第四字段的日志格式
Logstash Grok多格式日志兼容解决方案
问题根因
原有的Grok模式仅对[符号设置了可选属性,]符号以及[formname]字段后的尾随空格仍为强制匹配项,因此完全缺失第四字段的日志无法适配。
修正后的Grok模式
\s?\[%{DATA:loglevel}\] %{TIMESTAMP_ISO8601:logts} \[%{DATA:threadname}\] (?:\[%{DATA:formname}\] )?%{DATA:podname} %{DATA:filler1} \[%{DATA:classname}\] %{GREEDYDATA:fullmesg}
修改逻辑
- 用
(?:)包裹整个[formname]片段(注意尾部空格也包含在内),构成非捕获分组,不会额外生成冗余字段 - 分组末尾加
?标识整个分组完全可选,该片段存在时正常提取formname值,不存在时直接跳过匹配后续字段 - 两种日志格式都可以被正常匹配,不会出现匹配失败问题
可选配置
如果需要formname字段即使无值时也默认保留空字符串,可在Logstash的Grok过滤器配置中补充如下参数:
grok { match => { "message" => "上述修正后的Grok模式" } add_field => { "formname" => "" } overwrite => [ "formname" ] }
内容的提问来源于stack exchange,提问作者vr3w3c9
相关产品推荐
相关产品推荐

