一、创建一个运行 fluentd 的 docker容器
docker pull fluent/fluentd:edge-debian
创建配置文件 /root/tmp/fluentd.conf
<source>
@type http
port 9880
bind 0.0.0.0
</source>
<match **>
@type stdout
</match>
启动
[root@svr1 ~]# docker run -p 9880:9880 -v /root/tmp:/fluentd/etc fluent/fluentd:edge-debian -c /fluentd/etc/fluentd.conf
fluentd -c /fluentd/etc/fluentd.conf
2022-10-09 15:18:19 +0000 [info]: parsing config file is succeeded path="/fluentd/etc/fluentd.conf"
2022-10-09 15:18:19 +0000 [info]: gem 'fluentd' version '1.15.2'
2022-10-09 15:18:19 +0000 [warn]: define <match fluent.**> to capture fluentd logs in top level is deprecated. Use <label @FLUENT_LOG> instead
2022-10-09 15:18:19 +0000 [info]: using configuration file: <ROOT>
<source>
@type http
port 9880
bind "0.0.0.0"
</source>
<match **>
@type stdout
</match>
</ROOT>
2022-10-09 15:18:19 +0000 [info]: starting fluentd-1.15.2 pid=6 ruby="3.1.2"
2022-10-09 15:18:19 +0000 [info]: spawn command to main: cmdline=["/usr/local/bin/ruby", "-Eascii-8bit:ascii-8bit", "/usr/local/bundle/bin/fluentd", "-c", "/fluentd/etc/fluentd.conf", "--plugin", "/fluentd/plugins", "--under-supervisor"]
2022-10-09 15:18:20 +0000 [info]: adding match pattern="**" type="stdout"
2022-10-09 15:18:20 +0000 [info]: adding source type="http"
2022-10-09 15:18:20 +0000 [warn]: #0 define <match fluent.**> to capture fluentd logs in top level is deprecated. Use <label @FLUENT_LOG> instead
2022-10-09 15:18:20 +0000 [info]: #0 starting fluentd worker pid=15 ppid=6 worker=0
2022-10-09 15:18:20 +0000 [info]: #0 fluentd worker is now running worker=0
2022-10-09 15:18:20.507753396 +0000 fluent.info: {"pid":15,"ppid":6,"worker":0,"message":"starting fluentd worker pid=15 ppid=6 worker=0"}
2022-10-09 15:18:20.512374850 +0000 fluent.info: {"worker":0,"message":"fluentd worker is now running worker=0"}
查看容器
[root@svr1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d79fa9288e00 fluent/fluentd:edge-debian "tini -- /bin/entr..." 15 seconds ago Up 13 seconds 5140/tcp, 24224/tcp, 0.0.0.0:9880->9880/tcp stupefied_einstein
测试
curl -X POST -d 'json={"json":"message"}' http://127.0.0.1:9880/sample.test
容器打印如下日志
2022-10-09 15:21:49.094392263 +0000 sample.test: {"json":"message"}
二、创建docker容器,发送日志到fluentd
需要docker版本不低于1.8
1. 本地 fluentd 实例
创建配置文件/root/demo.conf
<source>
@type forward
port 24224
bind 0.0.0.0
</source>
<match *>
@type stdout
</match>
启动一个 fluentd 实例
docker run -it -p 24224:24224 -v /root/demo.conf:/fluentd/etc/demo.conf -e FLUENTD_CONF=demo.conf fluent/fluentd:latest
启动一个docker实例,并加载 --log-driver=fluentd
[root@localhost ~]# docker run --log-driver=fluentd ubuntu echo "Hello Fluentd"
Hello Fluentd
在上面的fluentd 实例,会输出如下日志
2022-10-09 08:18:59.000000000 +0000 071b0e3e0c06: {"log":"Hello Fluentd","container_id":"071b0e3e0c063cafe3d503d11926910cfe6b4531ac315036d93874fe172646ad","container_name":"/stoic_mendeleev","source":"stdout"}
2. 远程 fluentd 实例
修改上面创建的远程fluentd配置文件如下
<source>
@type http
port 9880
bind 0.0.0.0
</source>
<source>
@type forward
port 24224
bind 0.0.0.0
</source>
<match **>
@type stdout
</match>
启动远程fluentd实例
docker run -p 9880:9880 -p 24224:24224 -v /root/tmp:/fluentd/etc fluent/fluentd:edge-debian -c /fluentd/etc/fluentd.conf
注意:
docker转发的 input type 是forward
测试发送日志到远程fluentd实例
[root@localhost ~]# docker run --log-driver=fluentd --log-opt fluentd-address=10.0.31.70:24224 ubuntu echo "test log message for remote fluentd"
test log message for remote fluentd
远程 fluentd 实例显示如下
2022-10-09 08:52:36.000000000 +0000 465d12eb1df3: {"container_id":"465d12eb1df39e6de2d9ada56fce60ff384d5d6c753a019eed8f2540526d64d1","container_name":"/unruffled_aryabhata","source":"stdout","log":"test log message for remote fluentd"}
网友评论