Fluentd+;Kubernetes:基于标签隔离日志
我想对部署在Kubernetes上的java应用程序的日志应用concat筛选器,以将多行日志(不仅仅是异常)连接到一个日志事件中 这是解决问题后的最终工作版本 其想法是为部署添加一个标签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
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.*之后,我终于有了不错的多行日志。还学到了另一个教训:重写插件是一个接收器,您需要为任何不应删除的事件制定规则。用最终解决方案更新了问题。