docker의 fluentd logging driver에서 집계한 로그를 s3에 축적

6093 단어 Fluentd도커AWS
docker 공부를 위해 그림에서 배우는 Docker 핸즈온의 구성을 기반으로 aws에서 움직여 보았다.



s3 버킷 준비



로그 파일 쓰기 대상의 aws s3 bucket을 작성, access key와 secret key를 취득.

참고 : htps : /// 조포 t. 인후/2014/06/14/1621

Docker Hub에 이미지 등록



Dockerfile을 만들고 GitHub에 push.

Docker Hub에서 Automated Build를 만들고 이미지를 등록합니다.
GitHub의 1 리포지토리 상에 3종의 Dockerfile을 두었기 때문에, Automated Build는 3개 작성했다.

htps : // 후 b. 도 c r. 코 m/r/k후다/응진 x/
htps : // 후 b. 도 c r. 코 m / r / k 후다 / 시나 t 등 /
htps : // 후 b. 도 c r. 코 m/r/k 후다/f ㅅ엔 tds3/

또한, s3의 bucket 등의 정보는, 컨테이너 기동시에 환경 변수로 지정한다.

aws ec2에서 docker container 시작



참고 : htp // // cs. 아 ws. 아마존. 코 m/아마조네 CS/ㄱ st/로 html

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까지 링크.
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가 올바르게 링크 할 수 있습니다.

또한 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

좋은 웹페이지 즐겨찾기