如何使用Logstash匹配无分隔符日志并提取指定字段?
Logstash 无分隔符日志解析方案
所需过滤器
使用Logstash内置的grok过滤器即可实现,它支持通过正则表达式自定义规则提取任意非结构化日志中的字段,是处理无分隔符日志的首选组件。如果需要同步转换时间格式,可以搭配date过滤器使用。
具体配置示例
filter { grok { match => { "message" => "^(?<data1>\d+)%{DATA:data2}\s+%<data3>[a-zA-Z]+%{NUMBER:timestamp}$" } } # 可选配置:将提取的字符串格式时间戳转为Logstash标准时间类型 date { match => [ "timestamp", "yyyyMMddHHmmss.SSS" ] target => "@timestamp" } }
规则说明
上述grok匹配规则针对你给出的日志样例设计,各段含义如下:
^(?<data1>\d+):匹配日志开头连续的数字序列,提取为data1字段%{DATA:data2}:匹配数字段之后到空格前的所有字符,提取为data2字段\s+:匹配日志中间的多个空白字符,跳过分隔段%<data3>[a-zA-Z]+:匹配空白段之后到时间戳前的纯字母序列,提取为data3字段%{NUMBER:timestamp}$:匹配日志末尾带小数点的数字时间戳,提取为timestamp字段
该配置对你给出的样例日志12345abcd? abcd20211129113821.323可以直接输出所需的四个字段,如果实际生产环境的日志字符规则有调整,修改对应位置的正则匹配逻辑即可。
内容的提问来源于stack exchange,提问作者Rafianda Rafi
相关产品推荐
相关产品推荐

