尝试定制docker-fluentd-image

参照 README 中的“如何构建自己的镜像”部分,尝试定制 docker-fluentd-image 的记录。

创建一个工作目录

创建并移动到目录。

$ mkdir custom-fluentd
$ cd custom-fluentd

當按照步驟使用curl下載fluent.conf時,卻出現了404錯誤。

$ curl https://raw.githubusercontent.com/fluent/fluentd-docker-image/master/fluent.conf > fluent.conf
$ cat fluent.conf
404: Not Found

所以,请下载 fluent.conf.erb 文件。

$ curl https://raw.githubusercontent.com/fluent/fluentd-docker-image/master/fluent.conf.erb > fluent.conf
$ cat fluent.conf
(正常な設定ファイル)

尽管有些多余,但还是按照原来的步骤创建一个插件目录。

$ mkdir plugins

下载示例的 Dockerfile。

$ curl https://raw.githubusercontent.com/fluent/fluentd-docker-image/master/Dockerfile.sample > Dockerfile
$ cat Dockerfile
(正常な設定ファイル)

定制 fluent.conf

由於在下載的 fluent.conf 中匹配 docker.**,並將日誌保存在映像內的 /fluentd/log/ 路徑中,所以暫時忽略此步驟。

定制Dockerfile以安装插件(可选)

由于示例的Dockerfile中包含了安装fluent-plugin-secure-forward的定制内容,所以可以暂时跳过这一步骤。

建立形象

普通地建造。

$ docker build -t custom-fluentd:latest ./
(略)

进行测试

创建日志目录并将该目录挂载到容器中,然后从构建的镜像启动容器。
(原始步骤中没有提到,但在本地环境中,因为在 root 用户下进行操作,所以还需要执行 chmod 777 log。)

$ mkdir log
$ chmod 777 log
$ docker run -it --rm --name custom-docker-fluent-logger -v `pwd`/log:/fluentd/log custom-fluentd:latest

当启动成功时,标准输出会显示类似这样的消息。

2017-02-02 05:55:17 +0000 [info]: listening fluent socket on 0.0.0.0:24224

在保持上述容器运行的状态下,进入另一个终端并开始操作。
获取上述容器的IP地址。

$ docker inspect -f '{{.NetworkSettings.IPAddress}}' custom-docker-fluent-logger
172.17.0.5

指定Fluentd作为日志驱动程序,并启动另一个容器将日志发送过去。(应该会将输出的字符串发送到Fluentd的标准输出。)

$ docker run --log-driver=fluentd --log-opt fluentd-address=172.17.0.5:24224 python:alpine echo Hello

日志正按照预期进行输出。

$ docker exec custom-docker-fluent-logger cat /fluentd/log/docker.log
20170202T055916+0000    docker.aa89aa191723     {"container_id":"aa89aa1917230756751e0e2652c5d01783c25fa3d631ee1821d12b74637c7f00","container_name":"/boring_curran","source":"stdout","log":"Hello"}

如果这一次没有做,但在没有生成日志的情况下,尝试按照原始步骤中提到的下面的方式似乎是个好主意。

$ docker kill -s USR1 custom-docker-fluent-logger

总结

我已经尝试了一下基本的自定义步骤。接下来,我打算尝试将fluent/fluent-plugin-kafka集成进去。

广告
将在 10 秒后关闭
bannerAds