如何使用fluentd从kubernetes日志中提取严重性,时间,消息等字段

时间:2019-09-06 23:29:26

标签: elasticsearch kubernetes fluentd

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

示例错误日志-{"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>

1 个答案:

答案 0 :(得分:0)

我已经经历过了。我发现使用正则表达式非常不健康:)。

这就是我解决的方法。

  1. 我制作了将日志写为json的应用程序。就我而言,这是一个使用log4j的Java应用程序。因此可以轻松将其转换为json。
  2. 因此应用程序日志开始看起来像Property: app.beans[0] Value: Origin: class path resource [application-local.yaml]:86:6 Reason: No converter found capable of converting from type [java.lang.String] to type [com.myprojects.BeanInterface]
  3. 现在kubernetes日志将应用程序日志与日志对象一起包装为json。
  4. blog的帮助下,我可以获得所有信息作为弹性搜索中的属性。