Dockerコンテナのログをfluentdで扱う時に、今まで/var/lib/docker/container以下をみていたのですが、なんか嫌だなーと思っていたら。Dockerにfluentd用のLoggind Driverが追加されたので使ってみました。
Docker v1.8から使えるみたいですね。とりあえずアップデートします。
sudo apt-get update
sudo apt-get install lxc-docker
ちなみに公式ドキュメントはこちら
http://www.fluentd.org/guides/recipes/docker-logging
あんまりfluentd側の書き方は慣れてないのですが。td-agent.confを編集します。log-collector.hoge.comは仮のログ集約サーバのホストです。
<source>
type forward
port 24224
bind 0.0.0.0
</source>
<match docker.**>
type forward
<server>
host logs.hoge.com
port 24224
</server>
</match>
Dockerコンテナ起動時に--log-driverオプションを加えます。
docker run --log-driver=fluentd {イメージ名}
これで、logs.hoge.com(集約サーバ)にコンテナのログが送られます。
こんな感じ
{"log":"log content","container_id":"f7d520f14333a16144748a44c0d0aa2c442b73d6d97a8335ed3b47b7852fa92d","container_name":"/test","source":"stdout"}
docker logs
コマンドは使えなくなるみたいですね。
--log-driverでは他に、json-file、syslog、journald、gelfオプションがあるようです。
参考
http://www.fluentd.org/guides/recipes/docker-logging
http://dev.classmethod.jp/cloud/docker-fluentd-logging-driver/