流利的正则表达式匹配错误

时间:2018-08-14 13:29:40

标签: regex elasticsearch kubernetes fluentd

例如,我正在尝试从kubernetes解析日志

2018-08-14 13:21:20.013 [INFO][67] health.go 150: Overall health summary=&health.HealthReport{Live:true, Ready:true}

这是配置

<source>
  @id calico-node.log
  @type tail
  format /^(?<time>[^ ]* [^ ,]*)[^\[]*\[[^\]]*\]\[(?<severity>[^ \]]*) *\] (?<message>.*)$/
  time_format %Y-%m-%d %H:%M:%S
  path /var/log/containers/calico-node**.log
  pos_file /var/log/es-calico.pos
  tag calico-node
</source>

根据regex101.com,此模式应与此字符串匹配。但是,在尝试解析此内容时,我流利了一个错误

2018-08-14 13:21:20 +0000 [warn]: [calico-node.log] "{\"log\":\"2018-08-14 13:21:20.013 [INFO][67] health.go 150: Overall health summary=\\u0026health.HealthReport{Live:true, Ready:true}\\n\",\"stream\":\"stdout\",\"time\":\"2018-08-14T13:21:20.013908223Z\"}" error="invalid time format: value = {\"log\":\"2018-08-14 13:21:20.013, error_class = ArgumentError, error = string doesn't match"```

可能是什么问题? apache日志的内置解析器也有类似的错误?

2 个答案:

答案 0 :(得分:0)

据我所见,您在fluentd config中遗漏了一些东西。

您的time_format %Y-%m-%d %H:%M:%S不能与时间戳2018-08-14 13:21:20.013一起使用,因为它缺少.%3N

应如下所示: time_format %Y-%m-%d %H:%M:%S.%3Ntime_format %Y-%m-%d %H:%M:%S.%L

答案 1 :(得分:0)

正面临着类似的问题。 我认为@Crou的答案是正确的,但可以尝试使用%N。 根据文档,流利的解析器不支持%3N%6N%9N%L

https://docs.fluentd.org/configuration/parse-section