You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AKS集群部署Fluentd采集日志出现重复写入Elasticsearch问题求助

问题根因

当前Fluentd采用DaemonSet模式部署,每个AKS集群节点都会运行一个Fluentd实例。你配置的日志采集路径为所有节点统一挂载的Azure文件共享路径,所有节点的Fluentd都会读取同一份日志文件,每条日志被每个实例各采集上报一次,最终重复次数和集群节点数完全一致。

解决方案

方案1(最优推荐,符合Kubernetes日志采集规范)

调整应用输出配置,将自定义日志直接打印到stdout/stderr,无需写入共享文件存储。Fluentd默认仅采集当前节点上运行的容器的标准输出日志,不会出现跨节点重复采集的问题。

方案2(必须保留日志写入共享文件存储的场景)

修改Fluentd部署模式,将DaemonSet改为单实例Deployment,仅运行一个Fluentd实例专门负责读取共享存储内的日志文件,从根源上避免多实例重复采集。如果日志量较大可配置HPA弹性扩缩容,注意将pos文件挂载到独立共享存储,避免实例重启后重复读取历史日志。

方案3(无需调整部署和应用配置,快速修复)

通过配置去重逻辑避免Elasticsearch存储重复日志:

  1. 先在Fluentd镜像中预装fluent-plugin-record-modifier、fluent-plugin-digest插件
  2. 调整Fluentd ConfigMap,新增Filter段生成日志唯一标识:
<filter kubernetes.**>
  @type record_modifier
  <record>
    _unique_id ${Digest::SHA256.hexdigest(record.to_json + time.to_i.to_s)}
  </record>
</filter>
  1. 修改Elasticsearch输出配置,指定用生成的唯一标识作为文档ID:
<match **>
  @type elasticsearch
  # 原有其余配置保持不变
  id_key _unique_id
</match>

配置生效后,重复上报的同一条日志会因为文档ID一致被Elasticsearch自动覆盖,不会出现重复条目。

内容的提问来源于stack exchange,提问作者Hitesh Nayyar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 12:15:00