7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

dockerのfluentd logging driverで集約したログをs3に蓄積する

Posted at

dockerの勉強のため、実例で学ぶDockerハンズオンの構成をベースに、aws上で動かしてみた。

aws-docker-fluentd-s3.PNG

s3のbucketを用意

ログファイル書き込み先のaws s3 bucketを作成、access keyとsecret keyを取得。

参考:https://joppot.info/2014/06/14/1621

Docker Hubにimageを登録

Dockerfileを作成してGitHubにpush。

Docker HubでAutomated Buildを作成してimageを登録。
GitHubの1リポジトリ上に3種のDockerfileを置いたため、Automated Buildは3つ作成した。

https://hub.docker.com/r/khwada/nginx/
https://hub.docker.com/r/khwada/sinatra/
https://hub.docker.com/r/khwada/fluentd-s3/

なお、s3のbucketなどの情報は、コンテナ起動時に環境変数で指定する。

aws ec2上でdocker containerを起動

参考: http://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html#install_docker

ssh(22)とhttp(80)を開けてec2インスタンスを作成。
dockerをインストール。

Docker Hubからdocker imageをpull。

docker pull khwada/fluentd-s3
docker pull khwada/sinatra
docker pull khwada/nginx

docker containerを起動。

nginxからsinatraへは、link。
nginxおよびsinatraからfluentdへは、log driverで連携。

docker run --name fluentd-s3 -d -p 8888:8888  \
-e "AWS_ACCESS_KEY_ID={s3のaccess key}" \
-e "AWS_SECRET_ACCESS_KEY={s3のsecret key}" \
-e "FLUENTD_S3_BUCKET={s3のbucket名}" \
-e "FLUENTD_S3_REGION={s3のregion、例;aps-northeast-1}" \
khwada/fluentd-s3

docker run --name sinatra -d --log-driver=fluentd --log-opt=fluentd-address=localhost:8888 --log-opt fluentd-tag=docker.{{.Name}} khwada/sinatra

docker run --name nginx -d -p 80:80 --link sinatra:sinatra --log-driver=fluentd --log-opt fluentd-address=localhost:8888 --log-opt fluentd-tag=docker.{{.Name}} khwada/nginx

動作確認

ブラウザから、作成したec2インスタンスにアクセス(http)。
"Hello World!"と表示されれば、nginxとsinatraが正しくlinkできている。

またnginxとsinatraのログが、fluentdで集約され、s3に送られる(10秒ごとにflushするようにしている)。

fluentdコンテナのログでも確認可能(デバッグ用)。

docker logs fluentd-s3

詰まったところ

ローカルマシーンのVM上でdockerを動かしていたとき、s3にログファイルを送れない事象が発生した。
⇒docker run -vでマウントしているディレクトリを、buffer先に指定していると発生する模様。

docker run --name td-agent -d -v /vagrant/log/:/var/log/td-agent -p 8888:8888 khwada/td-agent
td-agent.conf
path /var/log/td-agent/s3
2016-05-05 09:05:36 +0000 [error]: error on output thread error="Text file busy @ sys_fail2 - (/var/log/td-agent/s3.20160505-0842.b5321452e6036d6fa.log, /var/log/td-agent/s3.20160505-0842.q5321452e6036d6fa.log)"
  2016-05-05 09:05:36 +0000 [error]: /opt/td-agent/embedded/lib/ruby/gems/2.1.0/gems/fluentd-0.12.20/lib/fluent/plugin/buf_file.rb:68:in `rename'
  2016-05-05 09:05:36 +0000 [error]: /opt/td-agent/embedded/lib/ruby/gems/2.1.0/gems/fluentd-0.12.20/lib/fluent/plugin/buf_file.rb:68:in `mv'
  2016-05-05 09:05:36 +0000 [error]: /opt/td-agent/embedded/lib/ruby/gems/2.1.0/gems/fluentd-0.12.20/lib/fluent/plugin/buf_file.rb:185:in `enqueue'
  2016-05-05 09:05:36 +0000 [error]: /opt/td-agent/embedded/lib/ruby/gems/2.1.0/gems/fluentd-0.12.20/lib/fluent/buffer.rb:296:in `block (2 levels) in push'
  2016-05-05 09:05:36 +0000 [error]: /opt/td-agent/embedded/lib/ruby/2.1.0/monitor.rb:211:in `mon_synchronize'
  2016-05-05 09:05:36 +0000 [error]: /opt/td-agent/embedded/lib/ruby/gems/2.1.0/gems/fluentd-0.12.20/lib/fluent/buffer.rb:295:in `block in push'
  2016-05-05 09:05:36 +0000 [error]: /opt/td-agent/embedded/lib/ruby/2.1.0/monitor.rb:211:in `mon_synchronize'
  2016-05-05 09:05:36 +0000 [error]: /opt/td-agent/embedded/lib/ruby/gems/2.1.0/gems/fluentd-0.12.20/lib/fluent/buffer.rb:289:in `push'
  2016-05-05 09:05:36 +0000 [error]: /opt/td-agent/embedded/lib/ruby/gems/2.1.0/gems/fluentd-0.12.20/lib/fluent/output.rb:534:in `block (2 levels) in configure'
  2016-05-05 09:05:36 +0000 [error]: /opt/td-agent/embedded/lib/ruby/gems/2.1.0/gems/fluentd-0.12.20/lib/fluent/output.rb:533:in `each'
  2016-05-05 09:05:36 +0000 [error]: /opt/td-agent/embedded/lib/ruby/gems/2.1.0/gems/fluentd-0.12.20/lib/fluent/output.rb:533:in `block in configure'
  2016-05-05 09:05:36 +0000 [error]: /opt/td-agent/embedded/lib/ruby/gems/2.1.0/gems/fluentd-0.12.20/lib/fluent/output.rb:585:in `call'
  2016-05-05 09:05:36 +0000 [error]: /opt/td-agent/embedded/lib/ruby/gems/2.1.0/gems/fluentd-0.12.20/lib/fluent/output.rb:585:in `enqueue_buffer'
  2016-05-05 09:05:36 +0000 [error]: /opt/td-agent/embedded/lib/ruby/gems/2.1.0/gems/fluentd-0.12.20/lib/fluent/output.rb:297:in `block in try_flush'
  2016-05-05 09:05:36 +0000 [error]: /opt/td-agent/embedded/lib/ruby/2.1.0/monitor.rb:211:in `mon_synchronize'
  2016-05-05 09:05:36 +0000 [error]: /opt/td-agent/embedded/lib/ruby/gems/2.1.0/gems/fluentd-0.12.20/lib/fluent/output.rb:295:in `try_flush'
  2016-05-05 09:05:36 +0000 [error]: /opt/td-agent/embedded/lib/ruby/gems/2.1.0/gems/fluentd-0.12.20/lib/fluent/output.rb:140:in `run'

下記に変更したら、正常に送られるようになった。

td-agent.conf
buffer_path /var/tmp/s3
7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?