Fluentd是否支持文件输出的日志轮换?

5

我目前在使用的设置是一个包含多个容器的Docker组合堆栈。这些容器将其日志信息发送到运行Fluentd守护程序的日志容器(位于组合堆栈内部)。Fluentd的配置包括一个in_forward源,该源收集日志并将其写入不同的文件,具体取决于容器。我的Fluentd配置文件类似于以下内容:

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

<match container1>
   @type copy
   <store>
     @type file
     path /fluentd/log/container1.*.log
     format single_value
     message_key "log"
   </store>
</match>

...

我的docker-compose.yml文件大致如下:
version: '3'

services:

  container1:
    build: ./container1
    container_name: "container1" 
    depends_on:
     - "logger" 
    logging:
      driver: "fluentd"
      options:
        tag: container1  
    networks:
      static-net:
        ipv4_address: 172.28.0.4  


  ...


  logger:
    build: ./logger
    container_name: "logger"
    ports:
     - "24224:24224"
     - "24224:24224/udp"
    volumes:
     - ./logger/logs:/fluentd/log
    networks:
      static-net:
        ipv4_address: 172.28.0.5          

networks:
  static-net:
    ipam:
      driver: default
      config:
       - subnet: 172.28.0.0/16

一切都按预期运行,但我希望设置Fluentd保留一定数量的日志文件。可以通过在缓冲区部分配置chunk_limit_size参数来更改日志文件的大小。然而,即使我想要这个选项,我仍然不希望Fluentd写入无限数量的文件。缓冲区配置中的buffer_queue_limitoverflow_action似乎没有影响任何内容。一旦部署,该应用程序将持续运行,因此需要进行日志轮换。我有几个问题:
  1. Fluentd是否支持将日志写入文件进行日志轮换?如果是,我应该在Fluentd配置文件中设置哪些参数?
  2. 如果不支持,我能否以某种方式配置Docker,以便利用其对Fluentd的json日志驱动程序进行日志轮换?
  3. 如果不可能,是否有一种方法通过插件或者Fluentd docker容器本身(或者一个sidecar容器)将日志轮换添加到Fluentd中?
1个回答

5
当您使用Docker的fluentd日志记录驱动程序时,不存在容器日志文件,只有fluentd日志,要对其进行轮换,可以使用此链接。如果您想让Docker保留并轮换日志,则需要将stackfile更改为:
    logging:
      driver: "fluentd"
      options:
        tag: container1  

to

  logging:
   driver: "json-file"
   options:
      max-size: "5m" #max size of log file
      max-file: "2" #how many files should docker keep

在 fluentd 中,您需要使用 in_tail 插件而不是 forward(fluentd 应该可以访问位于 /var/lib/docker/containers/*/*-json.log 的日志文件)。
<source>
  type tail
  read_from_head true
  pos_file fluentd-docker.pos
  path /var/lib/docker/containers/*/*-json.log
  tag docker.*
  format json
</source>

我认为这是专门针对Fluentd日志而不是容器日志的,它作为输入并输出到文件。不过我可能错了。谢谢。 - Rh1303
1
--log-rotate-age和--log-rotate-size似乎没有起作用。看起来Fluentd忽略了它们。我正在使用fluent/fluentd:latest Docker镜像,并使用自己的fluent.conf文件配置Fluentd。在其中没有任何花哨的东西。 - Rh1303
1
这是一种做法...我猜。本质上,我将复制JSON日志文件并将它们保存在自己的目标位置作为原始日志文件?在不同的地方拥有两套日志文件似乎有点多余,但我想这就是我必须要做的。我的目标是让fluentd处理所有日志,但能够在“match”部分输出的各个日志文件中进行轮换...如果这有意义的话。 - Rh1303

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接