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

如何让K8s集群内的Fluentd采集集群外Docker容器日志?

实现集群外Docker容器日志采集的方案

方案1:通过Fluentd Forward协议接收外部日志(推荐)

这种方式利用Fluentd原生的forward输入插件,让集群外的Docker容器直接将日志推送到集群内的Fluentd服务,配置步骤如下:

1. 修改集群内Fluentd的配置

在现有Fluentd的配置文件中添加forward类型的输入源,用于接收外部日志:

<source>
  @type forward
  port 24224
  bind 0.0.0.0
  # 可选:添加认证,避免非法日志接入
  <security>
    self_hostname fluentd-service.default.svc.cluster.local
    shared_key your_shared_secret
  </security>
</source>

同时,修改Fluentd的Kubernetes Service,暴露该端口给外部(示例用NodePort,也可根据环境用LoadBalancer):

apiVersion: v1
kind: Service
metadata:
  name: fluentd
  namespace: default
spec:
  type: NodePort
  ports:
    - name: forward
      port: 24224
      targetPort: 24224
      nodePort: 30024 # 可选:指定固定端口,否则自动分配
  selector:
    app: fluentd

2. 配置集群外的Docker容器

启动容器时指定fluentd日志驱动,将日志发送到集群内Fluentd的NodePort地址:

docker run \
  --log-driver=fluentd \
  --log-opt fluentd-address=<集群节点IP>:30024 \
  --log-opt fluentd-shared-key=your_shared_secret \
  --log-opt tag=external.docker.{{.Name}} \
  your-container-image

如果需要全局生效(所有容器默认使用该驱动),修改Docker的daemon.json:

{
  "log-driver": "fluentd",
  "log-opts": {
    "fluentd-address": "<集群节点IP>:30024",
    "fluentd-shared-key": "your_shared_secret",
    "tag": "external.docker.{{.Name}}"
  }
}

修改后重启Docker服务即可。

方案2:让Fluentd拉取外部服务器的日志文件

如果无法修改Docker的日志驱动,可以将外部服务器的Docker日志目录共享给集群内的Fluentd Pod,再通过tail插件读取日志:

1. 共享外部服务器的Docker日志目录

在外部服务器上,将默认的Docker日志目录/var/lib/docker/containers通过NFS(或其他文件共享方式)对外开放。

2. 挂载共享目录到Fluentd Pod

修改Fluentd的Deployment配置,添加Volume挂载:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: fluentd
  namespace: default
spec:
  template:
    spec:
      volumes:
        - name: external-docker-logs
          nfs:
            server: <外部服务器IP>
            path: /var/lib/docker/containers
      containers:
        - name: fluentd
          volumeMounts:
            - name: external-docker-logs
              mountPath: /var/lib/docker/external-containers
              readOnly: true

3. 配置Fluentd读取外部日志

在Fluentd配置中添加tail输入源:

<source>
  @type tail
  path /var/lib/docker/external-containers/*/*-json.log
  pos_file /var/log/fluentd/external-docker-logs.pos
  tag external.docker.{{path.basename}}
  <parse>
    @type json
  </parse>
</source>

注意事项

  • 确保集群节点与外部服务器的网络连通性,开放对应端口(方案1开放24224,方案2开放NFS相关端口)
  • 方案1的shared_key建议使用随机生成的密钥,提升安全性
  • 可在Fluentd过滤规则中添加专属标签,将外部日志与集群内日志区分开,方便Kibana筛选

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 18:37:35