【发布时间】:2021-04-12 22:15:33
【问题描述】:
我正在尝试在 fluentd on kubernetes 中解析我的应用程序中的多行日志。
我目前有以下过滤器插入我的流利容器:
<filter kubernetes.**>
@type parser
key_name log
emit_invalid_record_to_error false # do not fail on non-matching log messages
reserve_data true # keep the log key (needed for non-matching records)
<parse>
@type multiline
format_firstline /\d{4}-\d{1,2}-\d{1,2}/
format1 /^(?<time>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3})\s+(?<level>\S+)(?:\s+\[[^\]]*\])?\s+(?<pid>\d+)\s+---\s+\[\s*(?<thread>[^\]]+)\]\s+(?<class>\S+)\s+:\s+(?<message>.*)/
time_format %Y-%m-%d %H:%M:%S.%L
types pid:integer
</parse>
</filter>
这个过滤器应该解析 Spring Boot 风格的日志(这并不重要,因为它也不适用于我的其他过滤器)。
单行日志解析得很好!检测到所有捕获组,时间格式和 pid 类型也保存为整数。但是在多行日志语句的情况下,下一行保持原样并保存为自己的条目。
我从 fluentd 文档中得到了这个解析器的想法:https://docs.fluentd.org/parser/multiline
文档说目前 in_tail 插件适用于多行,但其他输入插件不适用。
我使用的容器使用in_tail 插件来获取日志。但我在过滤器中使用解析器。不确定这是否是问题所在?在文档中,解析器过滤器插件 (https://docs.fluentd.org/filter/parser) 只是链接到解析器插件概述 (https://docs.fluentd.org/parser),而没有提及任何关于单个解析器不起作用的信息。
如果有人能指出我正确的方向,那就太好了!
提前致谢!
【问题讨论】:
标签: regex elasticsearch kubernetes logging fluentd