当Docker在同一Docker Compose堆栈中运行时,不会将日志发送到流利的

时间:2019-08-30 07:04:52

标签: 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 个答案:

答案 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的链接控制服务的启动顺序

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