当 Docker 在同一个 Docker Compose 堆栈中运行时,它不会将日志发送到 fluentd



我正在尝试在基于教程 https://docs.fluentd.org/container-deployment/docker-compose 的 Docker Compose 堆栈中使用 Fluentd。

我的堆栈如下:

version: '3'
services:
one:
image: alpine:3.10.2
command: sh -c 'while true; do echo $$(hostname) - $$(date); sleep 2; done'
depends_on:
- fluentd
logging:
driver: "fluentd"
options:
fluentd-async-connect: 'true'
fluentd-address: localhost:24224
tag: service.one
two:
image: alpine:3.10.2
command: sh -c 'while true; do echo $$(hostname) - $$(date); sleep 1; done'
depends_on:
- fluentd
logging:
driver: "fluentd"
options:
fluentd-async-connect: 'true'
fluentd-address: localhost:24224
tag: service.two
fluentd:
image: fluent/fluentd:v1.7-debian-1
volumes:
- ./fluentd/conf:/fluentd/etc
- ./logs:/apps/logs
ports:
- "24224:24224"
- "24224:24224/udp"

fluent.conf很简单:

<source>
@type forward
port 24224
bind 0.0.0.0
</source>
<match **>
@type stdout
</match>
<match *.*>
@type file
path /apps/logs/service.one/${tag}.%Y_%m_%d__%H-%M-%S.log
# time_slice_format %Y%m%d
# time_format %Y_%m_%d__%H-%M-%S
<buffer tag,time>
timekey 1d
timekey_use_utc true
flush_interval 30s
</buffer>
</match>

我正在使用

# Docker for Mac
$ docker -v                                 
Docker version 19.03.1, build 74b1e89
$ docker-compose -v 
docker-compose version 1.24.1, build 4667896b

当我使用docker-compose up -d启动堆栈时,fluentd容器不会从其他容器接收任何日志。

我发现,如果我启动fluentd,然后再启动其他,日志记录将按预期工作。(或者--force-recreate其他容器的工作方式相同(。

有人遇到同样的问题吗?或者fluentd应该这样使用?

非常感谢您的时间!

我认为问题是您在配置中有 2 个match指令,第一个指令阻止了第二个指令。

试试这个:

<source>
@type forward
port 24224
bind 0.0.0.0
</source>

<match *.*>
@type copy
<store>
@type file
path /apps/logs/temp/log.${tag}.txt
# time_slice_format %Y%m%d
# time_format %Y_%m_%d__%H-%M-%S
<buffer tag, time>
@type file
path /apps/logs/${tag}/entry_%Y%m%d.log
timekey 1m
timekey_wait 30s
timekey_use_utc true
</buffer>
</store>
<store>
@type stdout
</store>
</match>

@Genzer

我遇到了与您相同的问题,似乎在其他服务运行之前必须准备好流畅的服务。

您可以通过@LinPy的链接控制服务的启动顺序

https://docs.docker.com/compose/startup-order/

最新更新