使用流利的

时间:2018-04-11 10:17:10

标签: regex fluentd

我试图用一些正则表达式解析应用程序日志。我能够解析时间戳。但在那之后,如果我尝试在流畅的格式中添加更多表达式,那么第一个属性" time"给我一个例外,消失了。没有记录匹配。

我正在使用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]

这是第一个带有第一个密钥的正则表达式(存在毫秒问题,但并不重要)。在属性中,我可以看到带有此值的关键时间。

First regexp ok

然后如果我尝试在日志中隔离更多信息,我会丢失第一个密钥,而且我无法解析任何其他数据。

Regexp with second key

我做错了什么?

由于

更新:

基于评论现在我有这个表达

(?<time>\[(?<time>[^\]\[]+)])\s+(?<Thread>\S+)\s+(?<Level>\S+)\s+(?<EventId>\S+)\s+(?<Message>[^ ].*$)

Regexp 3

几乎是完美的。唯一的问题是,表达式也得到方括号

关键线程 价值线程= [20]

我不知道是否可以改进此表达式以避免

&#34;螺纹= []&#34;

更新2:

为了进行测试,我通过apt安装了流畅的插件并进行了一些测试,我的最终设置就像

<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]"}

1 个答案:

答案 0 :(得分:1)

我建议使用Key-Value Pairs Parser Plugin for Fluentd解析键值对。

<强>参数