例如,我正在尝试从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日志的内置解析器也有类似的错误?
答案 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.%3N
或time_format %Y-%m-%d %H:%M:%S.%L
答案 1 :(得分:0)
正面临着类似的问题。
我认为@Crou的答案是正确的,但可以尝试使用%N
。
根据文档,流利的解析器不支持%3N
,%6N
,%9N
和%L