我希望你能帮助我,因为我真的很努力。
我们的设置是使用流利的将日志从Openshift转发到外部聚合器,然后再转发到ElasticSearch-我们使用的是RedHat提供的日志记录解决方案,但没有内部ElasticSearch / Kibana。该位通常可以正常工作,只是所有应用程序日志都被标记为“ kubernetes.journal.container”,这是默认设置。
我试图重新标记它们以匹配从我们现有的非OpenShift资产中收集的日志,并且为此,我在示例应用程序的Deploymentconfig中添加了标签。我可以在输出的日志中看到此标签,但是无论是在Openshift端还是在聚合器上,都无法使重新标记正常工作(使用rewrite_tag_filter输出插件)。
我们实质上使用的是默认配置映射表(随Openshift 3.7一起提供),但带有外部服务的转发器,以将流量路由到最终添加到我们聚合器的路由:
<match **>
@type forward
heartbeat_type tcp
flush_interval "5s"
<server>
host external-es-host-service
port 24224
</server>
</match>
我尝试在此部分的正上方添加此匹配项以重写标签-它只会停止转发任何日志:
<match kubernetes.journal.container>
@type rewrite_tag_filter
# Retag the logs from application containers based on the kubernetes labels
rewriterule1 ${result['kubernetes']['labels']['logdetails']} ^(.+)$ $1
</match>
我也尝试使用限制性更小的正则表达式(^(。*)$)。
编辑:更多详细信息: 似乎在Openshift端更改标签名称的限制归因于ViaQ插件-除其他外,它们将时间字段更改为“ @timestamp”;没有定义特定的格式化程序会导致错误。
但是,我现在尝试在聚合器端(运行td-agent的3.1.1版本)执行重新标记,但仍然遇到问题。我正在运行此match命令:
# Match for Openshift application logs
<match kubernetes.journal.container>
@type rewrite_tag_filter
<rule>
key $['kubernetes']['labels']['logdetails']
pattern ^([^\.]+)\.([^\.]+)\.([^\.]+)\.([^\.]+)\.([^\.]+)$
tag $1.$2.$3.ocp-$4.$5.${tag}
</rule>
</match>
那行得通,但是如果我尝试从标签部分中删除${tag}
,它将失败(并且在Kibana中没有任何日志)。如果添加一个remove_tag_prefix
指令,我仍然需要包括该标记,该标记消失但留下一个尾随的“。”。如果我删除了该文件,则匹配失败(并且在kibana中没有任何日志)。聚合器端没有任何规则与新标记匹配(有或没有${tag}
)。
有人可以帮忙吗?
答案 0 :(得分:0)
在我运行的OpenShift 3.6中,fluentd的版本为0.12.39。根据这些requirements,fluent-plugin-rewrite-tag-filter版本必须为<2.0.0。似乎fluent-plugin-rewrite-tag-filter v1.6.0不支持['kubernetes']['labels']['logdetails']
并描述为here的所谓“嵌套属性”。
对我来说幸运的是,我想将其替换为的标签可以作为顶级字段(viaq_index_name)使用。这是我的规则:
<match output_**>
@type rewrite_tag_filter
<rule>
key viaq_index_name
pattern ^(.+)$
tag $1
</rule>
</match>
无论出于何种原因,在OCP 3.6中,OCP 3.4中用作标记的项目名称都被output_tag
和output_ops_tag
取代。上面的规则使项目名称成为OCP 3.6中标记的一部分,这使我可以按项目过滤日志数据。
可能值得检查fluentd和fluent-plugin-rewrite-tag-filter的版本,看看是否可以将fluent-plugin-rewrite-tag-filter升级到支持嵌套属性的版本。