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

Docker容器日志无法发送至Fluentbit的问题咨询与排查

Docker容器日志无法传输到Fluent Bit的问题排查与咨询

我正尝试将Docker容器日志收集到Fluent Bit并统一转发,但app容器的日志只能在自身容器日志中查看,无法显示在Fluent Bit的stdout里。环境是Ubuntu系统,运行Dockerd服务,相关配置如下:

配置文件

fluent-bit.conf

[INPUT]
    Name http
    Listen 0.0.0.0
    port 24224

[OUTPUT]
    Name  stdout
    Match **

Fluentbit Dockerfile

FROM fluent/fluent-bit:2.1.8
ADD fluent-bit.conf /fluent-bit/etc/

docker-compose.yaml

services:
  fluentbit:
    image: 'shubham01/fluentbit:latest'
    container_name: fluentbit
    hostname: fluentbit
    ports:
      - "24224:24224"
      - "24224:24224/udp"
    volumes:
      - ./fluentbit/fluent-bit.conf:/fluent-bit/etc/fluent-bit.conf
      - ./log/:/etc/data
  app:
    container_name: app
    hostname: app
    image: app
    stdin_open: true
    tty: true
    build:
      context: .
      dockerfile: Dockerfile
      args:
        END: 'TEST'
    volumes:
      - "/tmp:/tmp"

    ports:
      - '8080:8080'

    restart: 'on-failure'

    depends_on:
      - fluentbit

    logging:
      driver: fluentd
      options:
        fluentd-address: "fluentbit:24224"
        fluentd-async-connect: "true"
        tag: 'containerssh.{{.ID}}'

Fluent Bit容器日志

Fluent Bit v2.1.8
* Copyright (C) 2015-2022 The Fluent Bit Authors
* Fluent Bit is a CNCF sub-project under the umbrella of Fluentd
* https://fluentbit.io

[2024/01/14 09:02:55] [ info] [fluent bit] version=2.1.8, commit=1d83649441, pid=1
[2024/01/14 09:02:55] [ info] [storage] ver=1.4.0, type=memory, sync=normal, checksum=off, max_chunks_up=128
[2024/01/14 09:02:55] [ info] [cmetrics] version=0.6.3
[2024/01/14 09:02:55] [ info] [ctraces ] version=0.3.1
[2024/01/14 09:02:55] [ info] [input:http:http.0] initializing
[2024/01/14 09:02:55] [ info] [input:http:http.0] storage_strategy='memory' (memory only)
[2024/01/14 09:02:55] [ info] [output:stdout:stdout.0] worker #0 started

咨询问题

  1. 当前的实现思路是否可行?
  2. 这是否为实现该需求的正确方式?
  3. 有无解决当前日志无法传输问题的方案?
  4. 是否因容器使用不同网络导致该问题?
  5. 使用http输入插件是否是Fluentbit接收容器日志的正确方式?

问题解答

  1. 思路可行,但配置存在偏差:通过Docker日志驱动将容器日志发送到Fluent Bit的思路是成立的,但输入插件和日志驱动协议不匹配,导致无法接收日志。

  2. 不是正确方式:app容器使用fluentd日志驱动,但Fluent Bit配置的是http输入插件,两者协议不兼容,自然收不到日志。

  3. 解决日志传输问题的方案:

    • 方案一:修改Fluent Bit输入插件为fluentd,替换当前的http输入:
      [INPUT]
          Name fluentd
          Listen 0.0.0.0
          Port 24224
      
      重启Fluent Bit容器后即可兼容Docker的fluentd日志驱动。
    • 方案二:改用Fluent Bit的docker输入插件,直接读取Docker日志文件,无需依赖日志驱动:
      [INPUT]
          Name docker
          Tag containerssh.{{.ID}}
          Path /var/lib/docker/containers
          Docker_Socket /var/run/docker.sock
      
      同时给Fluent Bit容器挂载/var/lib/docker/containers和/var/run/docker.sock路径,这种方式更直接,也避免了协议兼容问题。
  4. 网络问题可能性低:docker-compose默认会为所有服务创建共享网络,fluentbit:24224应能正常解析到Fluent Bit容器。可进入app容器执行ping fluentbit验证连通性,能ping通则排除网络问题。

  5. http输入插件不是正确选择:Docker的fluentd日志驱动发送的是Fluentd协议日志,而http输入插件接收的是HTTP格式日志,两者不兼容。正确做法是用fluentd输入插件对接Docker的fluentd日志驱动,或用docker输入插件直接读取日志文件。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 13:54:56