[英]Regexp for parse log with fluentd
我正在尝试使用一些正则表达式解析应用程序日志。 我能够解析时间戳。 但是在那之后,如果我尝试将更多的表达式添加到流畅的格式中,第一个属性“时间”将消失,并给我一个例外。 没有匹配的记录。
我正在使用Fluentular。
日志消息将类似于:
Date=[2018-04-11 08:44:30,219] Thread=[20] Level=[INFO] EventId=[2] Message=[Request finished in 1.1825ms 200 text/plain; charset=utf-8]
这是带有第一个键的第一个正则表达式(毫秒有问题,但并不重要)。 在属性中,我可以看到带有此值的键时间。
那么,如果我尝试在日志中隔离更多信息,则会丢失第一个密钥,并且无法解析任何其他数据。
我做错了什么?
谢谢
更新:
根据评论,我现在有这个表情
(?<time>\[(?<time>[^\]\[]+)])\s+(?<Thread>\S+)\s+(?<Level>\S+)\s+(?<EventId>\S+)\s+(?<Message>[^ ].*$)
几乎是完美的。 唯一的问题是,表达式也得到方括号
关键线程值Thread = [20]
我不知道是否可以改进此表达式以避免
“线程= []”
更新2:
为了进行测试,我使用插件通过apt安装了fluentd并进行了一些测试,最终的设置是
<parse>
@type kv
time_key Date
types Date:time:%Y-%m-%d %H:%M:%S,Thread:integer,Level:string,EventId:integer,Message:string
kv_delimiter /\]\s+/
kv_char "=["
现在看起来更好:
2018-04-11 08:44:30.219000000 +0200 kv_log: {"Thread":20,"Level":"INFO","EventId":2,"Message":"Request finished in 1.1825ms 200 text/plain; charset=utf-8]"}
我建议使用Fluentd的键值对解析器插件解析键值对。
参数
kv_delimiter /\\]\\s+(?=\\w+=)/
(或仅/\\]\\s+/
)(请参阅此处如何拆分kvp对 ) kv_char "=["
(该字符串将用于从值中拆分键)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.