本文将具体介绍如何在基础镜像 ubuntu:20.04 上搭建 fluentd 镜像,并且实现监控指定目录的日志文件。
构建镜像
首先,从 docker hub 中挑选一个合适的基础镜像,例如 ubuntu:20.04。
$ docker pull ubuntu:20.04
启动该镜像的容器,并在容器内安装 curl、sudo 和 vim 等软件。
$ docker run -it --name fluentd_source --privileged=true -u=root ubuntu:20.04
$ apt-get update
$ apt-get install curl
$ apt-get install sudo
$ apt-get install vim
注意事项:ubuntu:20.04 镜像内没有 sudo 命令,需要进行安装 https://blog.csdn.net/hello_1995/article/details/109222650。
接着,安装 td-agent:
$ curl -fsSL https://toolbelt.treasuredata.com/sh/install-ubuntu-bionic-td-agent4.sh | sh
安装完成后,输入 td-agent
,若出现如下图所示的内容,则表明 fluentd 服务已经正常启动。
将刚才对 fluentd_source 容器所作的修改进行提交,构建新的镜像:
$ docker commit -m="build fluentd image" -a="clvsit" <container_id>
sha256:ed0436c036a6db2c5cbca0bb172d20a83e8f251ab937bd3a039da750533fe096
其中,<container_id>
为 fluentd_source 容器的 ID,控制台打印新镜像的 ID。
最后,为新的镜像打上标签:
$ docker tag <image_id> <image_name>
其中,<image_id>
为上一步返回的新镜像的 ID,<image_name>
为你想要命名的镜像名称。例如,将其命名为 fluentd:v1.0.0
。
部署与验证
为了验证镜像的有效性,首先在指定目录下创建 fluentd
目录,并在该目录下创建 config.conf
。
<source>
@type tail
path /var/log/business/*.log
tag test_log
<parse>
@type none
</parse>
</source>
<match test_log>
@type stdout
@id output_stdout
</match>
<source>
@type monitor_agent
bind 0.0.0.0
port 22430
</source>
<source>
@type http
@id input_http
port 8888
</source>
<source>
@type debug_agent
@id input_debug_agent
bind "127.0.0.1"
port 24230
</source>
然后,输入如下命令启动 fluentd 容器:
docker run -itd --name fluentd \
-p 8888:8888 \
-p 22430:22430 \
-p 24230:24230 \
-p 24230:24230/udp \
-v /<path>/fluentd/log/:/var/log/business/ \
-v /<path>/fluentd/config.conf:/etc/td-agent/td-agent.conf \
fluentd:v1.0.0 td-agent
测试: @type http
在控制台输入如下命令:
curl -X POST -d 'json={"json": "message"}' http://localhost:8888/test_log
通过 docker logs -n 10 fluentd
命令,可以看到 fluentd 接收到 http 请求,并将其作为标准输出(stdout)到控制台。
测试: @monitor_agent
在控制台输入如下命令,来查看 fluentd 各插件的使用情况:
curl http://localhost:22430/api/plugins.json
等待片刻后,会在控制台打印如下所示的内容:
{
"plugins": [
{
"plugin_id": "object:7d0",
"plugin_category": "input",
"type": "tail",
"config": {
"@type": "tail",
"path": "/var/log/business/*.log",
"tag": "test_log"
},
"output_plugin": false,
"retry_count": null,
"emit_records": 0,
"emit_size": 0,
"opened_file_count": 0,
"closed_file_count": 0,
"rotated_file_count": 0
}
// ...
]
}
测试: @tail
在 /<path>/fluentd/log
目录下(你可以在自己挂载的 fluentd 目录下)创建日志文件,例如 1.log
,并往日志文件内随意写入内容:
Hello World!
再次执行 docker logs -n 10 fluentd
,在控制条输出 1.log
日志文件内我们刚添加的内容。