Fluentd 日志源格式 RegEX

Posted

技术标签:

【中文标题】Fluentd 日志源格式 RegEX【英文标题】:Fluentd log source format RegEX 【发布时间】:2015-04-28 02:57:15 【问题描述】:

我有这种格式的日志:

2015-02-25 18:33:06,975 INFO c.a.p.c.b.s.Monitor akka://application/user/daemons/monitor : 91 active threads, 4175691776 bytes used

我想出了这个正则表达式:

(?<time>[^ ]* [^ ]*) (?<method>[^ ]*) (?<path>[^ ]*) (?<message>[^ ].*$)

当我在Fluentular 中测试时 (我将使用它作为 fluentd 日志输入的格式)我明白了 字段:

time  =>    2015/02/25 18:33:06 +0000
method  =>    INFO
PATH    =>  <empty>
message => c.a.p.c.b.s.Monitor akka://application/user/daemons/monitor : 91 active threads, 4175691776 bytes used

我无法破坏消息字符串。我希望匹配的组是:

time  =>    2015/02/25 18:33:06 +0000
method  =>    INFO
PATH  =>    c.a.p.c.b.s.Monitor
message =>    akka://application/user/daemons/monitor : 91 active threads, 4175691776 bytes used

什么是正确的正则表达式

【问题讨论】:

【参考方案1】:

问题是您的输入字符串中INFOc.a.p.c.b.s.Monitor 之间有两个空格。添加+ 以允许在该位置有一个或多个空格,您会得到:

(?<time>[^ ]* [^ ]*) (?<method>[^ ]*) +(?<path>[^ ]*) (?<message>[^ ].*$)

您可能希望也可能不希望将这些添加到其余组件中,例如:

(?<time>[^ ]* [^ ]*) +(?<method>[^ ]*) +(?<path>[^ ]*) +(?<message>[^ ].*$)

【讨论】:

以上是关于Fluentd 日志源格式 RegEX的主要内容,如果未能解决你的问题,请参考以下文章

在 fluentd 中使用具有不同匹配类型的单个源

fluentd收集Docker stdout日志

使用Docker搭建ELK日志搜集系统

Docker通过EFK(Elasticsearch + Fluentd + Kibana)查询日志

Java 输出 JSON 日志

Java 输出 JSON 日志