【问题标题】:how to extract fields like severity, time, message etc from kubernetes logs using fluentd如何使用 fluentd 从 kubernetes 日志中提取严重性、时间、消息等字段
【发布时间】:2020-01-09 18:36:30
【问题描述】:

如何使用 fluentd 从 kubernetes 日志中提取不同的字段,例如严重性、时间、流、消息。我有多个来自 kubernetes 的日志模式。如何使用 fluentd 从不同类型的模式中提取字段

示例错误日志 - {"log":"2019-09-06 21:57:50.864 DEBUG 1 --- [ntainer#2-0-C-1] class : error message \"\n","stream":"stdout","time":"2019-09-06T21:57:50.864955417Z"}

我正在使用的正则表达式 - ^(?:{"log":"(?<time>\d+(?:-\d+){2}\s+\d+(?::\d+){2}\.\d+)\s"*(?<level>\S+) (?<pid>\d+) --- \[(?<thread>[\s\S]*?)\] (?<class>\S+)\s*:\s* (?<message>[\s\S]*?)(?=\g<time>|\Z).*)

我在使用正则表达式时遇到模式未找到错误。下面是我的流利配置

 <source> 
   type tail 
   path /var/log/containers/*.log
   pos_file /var/log/es-containers.log.pos
   tag kubernetes.* 
   format /^(?:{"log":"(?<time>\d+(?:-\d+){2}\s+\d+(?::\d+){2}\.\d+)\s"*(?<level>\S+) (?<pid>\d+) --- \[(?<thread>[\s\S]*?)\] (?<class>\S+)\s*:\s* (?<message>[\s\S]*?)(?=\g<time>|\Z).*)/
   time_format %Y-%m-%dT%H:%M:%S.%NZ
   read_from_head false
 </source>

【问题讨论】:

    标签: elasticsearch kubernetes fluentd


    【解决方案1】:

    嗯,我经历过。我发现玩正则表达式很不健康:)。

    我就是这样解决的。

    1. 我制作了将日志写入 json 的应用程序。在我的例子中,它是一个使用 log4j 的 java 应用程序。因此可以轻松地将其转换为 json。
    2. 所以应用程序日志开始看起来像{"level":"INFO","timestamp":"2019-09-06 11:33:24,987","thread":"http-nio-8090-exec-5","file":"AccountService.java","line":"51","message":"A sample info log","trace":""}
    3. 现在 kubernetes 日志将应用程序日志与日志对象包装为 json。
    4. blog 的帮助下,我可以在弹性搜索中将所有信息作为属性获取。

    【讨论】:

    • 感谢您的回复。我们有来自第三方的日志,将其更改为 json 格式会很复杂。是否可以基于正则表达式进行提取。我能够识别正则表达式,但 fluentd 失败并出现模式不匹配错误
    • 最初尝试github.com/fluent/fluent-plugin-grok-parser,这变得非常复杂,因为日志包含多行堆栈跟踪、消息、随机系统输出等。
    猜你喜欢
    • 1970-01-01
    • 2014-10-02
    • 2018-08-31
    • 2019-04-06
    • 1970-01-01
    • 2018-03-28
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多