Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fluentd+;Kubernetes:基于标签隔离日志_Kubernetes_Fluentd_Amazon Eks - Fatal编程技术网

Fluentd+;Kubernetes:基于标签隔离日志

Fluentd+;Kubernetes:基于标签隔离日志,kubernetes,fluentd,amazon-eks,Kubernetes,Fluentd,Amazon Eks,我想对部署在Kubernetes上的java应用程序的日志应用concat筛选器,以将多行日志(不仅仅是异常)连接到一个日志事件中 这是解决问题后的最终工作版本 其想法是为部署添加一个标签 metadata: ... spec: ... template: metadata: labels: logtype: springboot Fluentd配置: # rewrite tag of events with kubernetes label k

我想对部署在Kubernetes上的java应用程序的日志应用concat筛选器,以将多行日志(不仅仅是异常)连接到一个日志事件中

这是解决问题后的最终工作版本

其想法是为部署添加一个标签

metadata:
  ...
spec:
  ...
  template:
    metadata:
      labels:
        logtype: springboot
Fluentd配置:

# rewrite tag of events with kubernetes label kubernetes.labels.logtype=springboot
#
# it is important to change the tag. If the tag is not modified the event will be
# reemitted with the same tag and matched again by the rewrite tag filter -> infinite loop
<match kubernetes.var.log.containers.**>
  @type rewrite_tag_filter
  @log_level debug
  <rule>
    key $.kubernetes.labels.logtype
    pattern /^springboot$/
    tag springboot.${tag}
  </rule>
  # the rewrite tag filter is an event sink. Events that are not reemitted by the plugin
  # are gone. So we need a catch-all rule to reemitt any event that is not caught
  # by the spring boot rule.
  <rule>
    key log
    pattern /^.*$/
    # and the tag must be changed so that the event will skip the rewrite filter after reemitting
    tag unmatched.${tag}
  </rule>
</match>

# Handle multiline logs for springboot logs.
<filter springboot.**>
  @type concat
  key log
  separator ""
  multiline_start_regexp /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{3}\  (ERROR|WARN|INFO|DEBUG|TRACE)/
</filter>
#用kubernetes标签kubernetes.labels.logtype=springboot重写事件标记
#
#更改标记非常重要。如果未修改标记,则事件将被删除
#使用相同的标记重新提交,并通过重写标记过滤器->无限循环再次匹配
@类型重写\标记\过滤器
@日志级调试
key$.kubernetes.labels.logtype
图案/^springboot$/
标记springboot.${tag}
#重写标记筛选器是一个事件接收器。插件未重新提交的事件
#你走了。因此,我们需要一个全面的规则来重新提交任何未捕获的事件
#根据弹簧启动规则。
密钥日志
模式/^*$/
#并且必须更改标记,以便事件在重新提交后跳过重写筛选器
标记不匹配。${tag}
#处理springboot日志的多行日志。
@海螺型
密钥日志
分隔符“”
多行代码{start{u regexp/^\d{4}-\d{2}-\d{2}:\d{2}:\d{2}.\d{3}\(错误{警告}信息{调试}跟踪)/
  • -这可能是输入错误,或者是无效的fluentd配置
  • 我需要查看完整的配置才能确定,但是
    也会在到达
    之前匹配重写的标记。要避免这种情况,请将匹配弹簧靴放在
    ***
    匹配之前,或将
    ***
    匹配缩小到kube的值,例如
    。重新标记的事件被注入到管道的请求中,并按照它们在配置中出现的顺序遍历管道的各个部分

  • 好极了,谢谢你!所以我建立了一个无限循环。有道理。在修复匹配标记并将**更改为kubernetes.var.log.contains.*之后,我终于有了不错的多行日志。还学到了另一个教训:重写插件是一个接收器,您需要为任何不应删除的事件制定规则。用最终解决方案更新了问题。