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
咨询问题
- 当前的实现思路是否可行?
- 这是否为实现该需求的正确方式?
- 有无解决当前日志无法传输问题的方案?
- 是否因容器使用不同网络导致该问题?
- 使用http输入插件是否是Fluentbit接收容器日志的正确方式?
问题解答
思路可行,但配置存在偏差:通过Docker日志驱动将容器日志发送到Fluent Bit的思路是成立的,但输入插件和日志驱动协议不匹配,导致无法接收日志。
不是正确方式:app容器使用
fluentd日志驱动,但Fluent Bit配置的是http输入插件,两者协议不兼容,自然收不到日志。解决日志传输问题的方案:
- 方案一:修改Fluent Bit输入插件为
fluentd,替换当前的http输入:
重启Fluent Bit容器后即可兼容Docker的fluentd日志驱动。[INPUT] Name fluentd Listen 0.0.0.0 Port 24224 - 方案二:改用Fluent Bit的
docker输入插件,直接读取Docker日志文件,无需依赖日志驱动:
同时给Fluent Bit容器挂载[INPUT] Name docker Tag containerssh.{{.ID}} Path /var/lib/docker/containers Docker_Socket /var/run/docker.sock/var/lib/docker/containers和/var/run/docker.sock路径,这种方式更直接,也避免了协议兼容问题。
- 方案一:修改Fluent Bit输入插件为
网络问题可能性低:docker-compose默认会为所有服务创建共享网络,
fluentbit:24224应能正常解析到Fluent Bit容器。可进入app容器执行ping fluentbit验证连通性,能ping通则排除网络问题。http输入插件不是正确选择:Docker的
fluentd日志驱动发送的是Fluentd协议日志,而http输入插件接收的是HTTP格式日志,两者不兼容。正确做法是用fluentd输入插件对接Docker的fluentd日志驱动,或用docker输入插件直接读取日志文件。
内容的提问来源于stack exchange,提问作者Shubham
相关产品推荐
相关产品推荐

