しまった!!いきなり「Apacheのアクセスログを提出して欲しい」と言われたら? (Fluentd Advent Calendar 2013 Day10)

この投稿は Fluentd Advent Calendar 2013 の10日目の記事です。


Fluentdな皆さんはじめまして。k1LoWと申します。

普段はPHPというかCakePHPというかcake.el界隈(1人)に生息しています。

まさかのTreasure Dataの中の人達に挟まれているというガクブルな日程ですが、 まさかの「Fluentd自体の話をしない」というエントリーをぶっこみたいと思います

Fluentdの話や新しいPluginの話を期待していた方申し訳ありません。明日を楽しみにしてください。


というのも、同じような状況におちいった時、皆さんがどういう対応をしているのかを知りたくての質問エントリーです。

小さな規模のプロジェクトの中のFluentd

自分は仕事では「大規模Webサービスの開発運用!!!」ということはやっていなくて、一般的なWeb系の受託開発運用をメインに行っています。(プライベートでWebサービスを作ることはやっています)

そういった規模の領域ですが、ログ収集やイベントメッセージやメッセージのバッファリング機能の利用などで、Fluentdは真っ先に候補に挙がります。

つまり、そういった小さな規模の領域にもFluentdが浸透しはじめたということですね。


「いやいや。そうはいっても特殊なプロジェクトなんじゃないの?」とか「結構予算がついた大規模なプロジェクトなんじゃないの?」とか思われるかもしれません。

では、

例えば、「予算の小さい1台のWebサーバで事足りるような社内用Webシステム」や、「ロードバランサーで2台程度に分散しているような規模のWebシステム」において、Fluentdの導入はメリットなのでしょうか?


メリットです。


具体的な利用方法は、まさに Fluentdが流行る理由がいま分かる、10の実践逆引きユースケース集における1つ目、

「アクセスログを収集して、サイト(ドメイン)毎にファイル名を分けて、gzip圧縮したログのアーカイブをAmazon S3に行う。」です。

簡単バックアップ機能

Fluentd+S3によってログの「安全で」「簡単な」バックアップ機能を外部に配置できるという点は、小さな規模のプロジェクトにおいて、非常に魅力的なのです。


ここでのポイントは、

「安全で簡単なバックアップ『領域』の提供」ではなく

「安全で簡単なバックアップ『機能』の提供」ということです。

機能を簡単に提供できる。


1回設定ファイルを作ってしまえば、あとは各プロジェクトで使いまわせますし、導入コストが小さい分、クライアントにも価値として提案しやすいのです。

ログさえ残っていれば、後で何かあったときに解析できますからね(※注 要件としてリアルタイムで監視が必要な、ミッションクリティカルな大規模プロジェクトを想像してはいけません)。


つまりFluentdは小さな受託案件でも便利なのです。

そのログは誰が使うのか?

上記のような背景でFluentdでのログ保存しているとき、開発者は「何かあったときのデータ」と「将来的な施策のためのデータ」と考えます。大枠ははずれていないと思っています。

なので、ログは「自分が解析するもの」として、ログの保存形式はFluentdのフォーマット(時刻 キー JSON)で保存していたりします。

「アクセスログを提出して欲しいのだけど。Aapcheのログフォーマットで」

ところが、クライアントが「自分で解析したい」という要件が突然発生することがあるのです。

そういったときは当然Apacheのログフォーマットを要求されます。世の中のアクセスログ解析ツールはApacheのアクセスログのフォーマットに対応していますから。



しまった。。。。

S3に保存されたFluentdフォーマットのアクセスログをApacheのログ形式で取得したい!!!

「はじめからrawデータでも転送しておけばいいじゃない」という話は今回は「なし」でお願いします。。。あるんです。そういうことが。信じてください。


こういったときは皆さんはどうしているのでしょうか?

もっと汎用的にいうと「S3に保存されたFluentdフォーマットのログをどう料理しているのか?」と言ってもいいかもしれません。


。。。この要望って「S3」「Fluentd」「Apache」「ログ」とかがキーワードで、ググラビリティが悪すぎるのです。 (「Apache」の「ログ」を「Fluentd」で「S3」に保存する話ばかりがヒットします。。。)

自分たちはこうしているという例

S3からログを取得して、展開→Apacheログフォーマットにコンバート→連結とかをするスクリプトを作っています。

今回、説明のために、@ya_ma23が作っていたRubyスクリプトを、ちょっとだけ汎用的にして(Thorとか使ってみるとかして)、さらに野良gem化してみました。はじめてのRuby。はじめてのgem。RubyとかRubyのCLIの流儀が分からない。。

k1LoW/s3_fluentd_access_log_converter

というわけで

「こうしているよ」とか「これを使えばいいのに」とか「おまえのRubyコードはクソだ!Pull Request送ってやる!」とかありましたら、@k1LoWまでよろしくお願いします!!!

次回は、komamitsuさんです!