我正在基于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
?
非常感谢您的时间!
答案 0 :(得分:1)
我认为问题在于您在配置中有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>
答案 1 :(得分:0)
@Genzer
我遇到了与您相同的问题,看来流利的服务必须在其他服务运行之前已经准备就绪。
您可以通过@LinPy的链接控制服务的启动顺序