我目前在使用的设置是一个包含多个容器的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_limit
和overflow_action
似乎没有影响任何内容。一旦部署,该应用程序将持续运行,因此需要进行日志轮换。我有几个问题:
- Fluentd是否支持将日志写入文件进行日志轮换?如果是,我应该在Fluentd配置文件中设置哪些参数?
- 如果不支持,我能否以某种方式配置Docker,以便利用其对Fluentd的json日志驱动程序进行日志轮换?
- 如果不可能,是否有一种方法通过插件或者Fluentd docker容器本身(或者一个sidecar容器)将日志轮换添加到Fluentd中?