ELBのアクセスログをFluentdにINPUTしてみた

記事タイトルとURLをコピーする

ちかごろ職種不明の新坂です。

AWSの負荷分散装置、ELBのアクセスログを取得できるようになりましたね。 see: 【AWS発表】Elastic Load Balancerのアクセスログ

冗長化・負荷分散している場合、Webサーバーのアクセスログは分散してしまうので、ELBのログが取得できるというのは有用なのではないでしょうか。

早速試してみたところ、ログは5分間隔または、60分間隔でS3に出力されるようです。S3内では下記のようにディレクトリに仕切られてファイルが配置されます。(厳密にはディレクトリではありませんが、便宜上ディレクトリと表記します。)

ELBアクセスログファイルの配置イメージ(5分間隔)

AWSLogs/000000000000/elasticloadbalancing/ap-northeast-1/2014/03/07/000000000000_elasticloadbalancing_ap-northeast-1_shinsaka-elb_20140307T0510Z_54.238.248.96_1boml1d3.log"
AWSLogs/000000000000/elasticloadbalancing/ap-northeast-1/2014/03/07/000000000000_elasticloadbalancing_ap-northeast-1_shinsaka-elb_20140307T0525Z_54.238.248.96_3t7fk83w.log"
...
AWSLogs/000000000000/elasticloadbalancing/ap-northeast-1/2014/03/08/000000000000_elasticloadbalancing_ap-northeast-1_shinsaka-elb_20140308T0005Z_54.238.248.96_xxxxxxxx.log"
AWSLogs/000000000000/elasticloadbalancing/ap-northeast-1/2014/03/09/000000000000_elasticloadbalancing_ap-northeast-1_shinsaka-elb_20140308T0005Z_54.238.248.96_xxxxxxxx.log"
...

現状

5分間隔で試しました。アクセスが無い場合はファイルは生成されないようです。 また、リージョンは良いとしても、年/月/日とディレクトリが分割されてしまうので、単純にログを確認するのは大変そうです。 AWSブログにあるようにEMR+Hiveで分析するのはスマートですが、いやいや、そこまでは・・・という方もいらっしゃるのではないでしょうか。

Fluentdプラグイン

Fluentdでログを収集すればいいのでは?ということで個人的にINPUTプラグインを作成してみました。

RubyGems https://rubygems.org/gems/fluent-plugin-elb-log

ソース(GitHub) https://github.com/shinsaka/fluent-plugin-elb-log

Fluentdに入れてしまえば、出力プラグインで好きなように保存できますね。 とりあえず作ってみたレベルで運用に耐えられるほどのものではありませんが、オープンソースとしてありますので誰か改善してくれたらなどと思う次第です。