読者です 読者をやめる 読者になる 読者になる

aspec7's garage

エンジニア生活の中で学んだことの備忘録

DockerのFluentd logging driverは簡単便利

Docker インフラ fluentd

f:id:aspec7:20160318095017j:plain

Docker: Fluentd logging driverって?

docker logs ~ でコンテナで出力したログが見れますが、その内容をLog Driverを使うことで別リソースに集約できます。 そのDriverにfluentdを使うことが出来るので、用途に応じて出力された内容を整理しつつ効率的な管理が可能になります。


使い方

  1. 各コンテナから出力された内容を受けるfluentdサーバの準備
  2. 各コンテナ起動時に1で用意したサーバに向けるオプションをつける

各コンテナから出力された内容を受けるfluentdサーバの準備

fluentの公式コンテナ使うと楽です。 もちろん別途構築したものでも構いません。

各コンテナ起動時に1で用意したサーバに向けるオプションをつける

docker run ~時などに下記のオプションをつけるだけです。

docker run --log-driver=fluentd ~

転送先の設定はlocalhost:24224がデフォルト設定になっており、接続先:ポート番号です。
接続先ポート番号は接続先に合わせて適宜変更します。

docker run --log-driver=fluentd --log-opt fluentd-address=fluentd-server:24224


docker-compose 使って試してみる

準備

今回はdocker-composeを使って、同じDockerホスト上で動作確認してみます。

fluentdサーバ用のお試し用コンフィグを作成

$ cd /path/to
$ mkdir conf
$ vi conf/sample.conf
<source>
  @type forward
</source>

<match docker.**>
  @type stdout
</match>

docker-compose.yml の作成

$ cd /path/to
$ vi docker-compose.yml
version: '2'
services:
  logger:
    image: fluent/fluentd
    ports:
      - "24224:24224"
    volumes:
      - /path/to/conf/:/fluentd/etc
     #- //path/to/conf/:/fluentd/etc # windowsの場合
    environment:
      FLUENTD_CONF: sample.conf

  web:
    image: httpd
    ports:
      - "80:80"
    logging:
      driver: fluentd
    depends_on:
      - logger

動作確認

docker-compose upで起動し、curlでhttpdに接続してログを確認してみます。

$ docker-compose up
$ curl 192.168.99.100
<html><body><h1>It works!</h1></body></html>
  • fluentd サーバで受信したログ
$ docker logs hoge_logger_1

2016-03-24 08:32:13 +0000 docker.68f39162eda7: {"container_id":"68f39162eda7d90ef91d8cdb3d48a468bdb48f081e6ecc5aaa8f5a0875a0960f","container_name":"/hoge_web_1","source":"stdout","log":"192.168.99.1 - - [24/Mar/2016:08:32:13 +0000] \"GET / HTTP/1.1\" 200 45"}
  • Webサーバ側のログを確認しようとすると・・
$ docker logs -f hoge_web_1
"logs" command is supported only for "json-file" and "journald" logging drivers (got: fluentd)

このように、すぐに使うことができます。
あとは、fluentdサーバ側で設定をカスタマイズしていくことで、用途に合わせた柔軟なログ活用ができるようになります。
これで、コンテナ内のログ管理も楽になりますね。