流利的从OpenShift提取日志,需要重新标记

时间:2018-06-26 18:41:24

标签: elasticsearch kubernetes openshift fluentd

我希望你能帮助我,因为我真的很努力。

我们的设置是使用流利的将日志从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})。

有人可以帮忙吗?

1 个答案:

答案 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_tagoutput_ops_tag取代。上面的规则使项目名称成为OCP 3.6中标记的一部分,这使我可以按项目过滤日志数据。

可能值得检查fluentd和fluent-plugin-rewrite-tag-filter的版本,看看是否可以将fluent-plugin-rewrite-tag-filter升级到支持嵌套属性的版本。