README の How to build your own image のところを見ながら、docker-fluentd-image のカスタマイズを試してみたメモ。
Create a working directory
ディレクトリを作って移動。
$ 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
(正常な設定ファイル)
Customize fluent.conf
ダウンロードした fluent.conf には docker.**
にマッチしてイメージ内の /fluentd/log/ にログを保存する設定が入っているので、とりあえずこの手順は飛ばす。
Customize Dockerfile to install plugins (optional)
サンプルの Dockerfile では fluent-plugin-secure-forward をインストールするカスタマイズが入っているので、とりあえずこの手順は飛ばす。
Build image
普通にビルド。
$ docker build -t custom-fluentd:latest ./
(略)
Test it
ログディレクトリを作成し、そのディレクトリをコンテナにマウントした上で、ビルドしたイメージからコンテナ起動。
(元の手順にはないが、手元の環境だと 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 を組み込んで試してみようと思う。