nigoblog

暫定無職のブログ

Apache + fluentd + S3でアクセスログ収集をやってみた

というわけでタイトルまんまなんですが、
参考文献が大量にあるのでその紹介と、
ハマった部分を事細かに説明します。

  1. apache fluentd S3対応のための参考文献
  2. ハマった部分
  3. まとめ

apache fluentd S3対応のための参考文献

こちらはwebサーバーがnginxの場合
S3とFluentdを用いた効率的なログ管理 | SmartNews開発者ブログ

こちらはwebサーバーがapache(httpd)の場合
Apache アクセスログを fluentd で S3 に保存する(修正版) - ようへいの日々精進

上記の記事で大方できるでしょう。
というわけで収集方はこちらに任せるとして、ハマった部分を書いていきます。

ハマった部分

service td-agent start

とりあえずインストールまではいき、そこから起動しようとした時、

> service td-agent start

もしくは

> /etc/init.d/td-agent start

で起動します。
すると

Starting td-agent: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluentd-0.10.39/lib/fluent/supervisor.rb:34:in `chown': Operation not permitted - /var/log/td-agent/td-agent.log (Errno::EPERM)

というエラーが!
パーミッションを755にすると

Starting td-agent: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluentd-0.10.39/lib/fluent/supervisor.rb:30:in `initialize': Permission denied - /var/log/td-agent/td-agent.log (Errno::EACCES)

というエラーに。
これの解決方法は

> chown td-agent:td-agent /var/log/td-agent

とすることで解決できます。
単純に権限の問題でした。

service td-agent status

では実際に動いているかをチェックします。

> service td-agent status

もしくは

> /etc/init.d/td-agent status

するとなんと

td-agent dead but pid file exists

というのが表示されました。
これは不親切で起動は成功しているけど、引き続き動いていないということ。

というわけで何が原因かを調査するのですが、動いていないのでログも取れず。
なのでデバッグは直接td-agentを動かします。

> td-agent

するとログも動きますのであとはエラーに合わせ対応していくだけ。

Amazon S3とうまく接続されていない

おそらくrefuse connection ... 等のエラーが現れた場合、
それはS3のendpointの設定がうまく行ってないと思われます。

自分は最初 bucket名も含めたendpointを設定していました。

s3_endpoint [bucket名].s3-ap-northeast-1.amazonaws.com

これではうまくいかず、単純にリージョンのendpointのみで大丈夫で
東京リージョンならば

s3_endpoint s3-ap-northeast-1.amazonaws.com

でokです。
こちらを参考に
Regions and Endpoints - Amazon Web Services

他にもapacheログへのアクセス権限がないなど、細かいのがありましたが、
上記3つはかなり脅威的でした。
(基本のLinuxの知識がまだまだ足りない)

というわけで以上
Apache + fluentd + S3
でのログ収集設定の苦労話でした。


こういうのを参考にもっと力を身につけたいですね。

まとめ

今回のことをやる上で、やはりLinuxの基本知識がまだまだ欠落しているなと。
もう少し詳しく掘り下げて勉強していきたいと思います。
あとはapacheのアクセスログをどう活用していくかについても考えていきたいと思います。