Apacheログの独自解析
Apache
Apacheのログの解析には商用からオープンソースなものまで様々なものがあります。
オープンソースなものならAnalogとかAWStatsとかWebalizerとか。。。。
しかしながら、どれもこれもかゆいところに手が届かないというか、帯に短したすきに長しというか。
なかなか自分で満足できるログ解析の仕組みがなかったりします。
商用ならもっと満足度の高いものがあると思いますが、ログ解析ソフトってかなり高価なんですよね。
だったら自分で解析しちゃえ!というのが独自解析の趣旨です。
ここでは、独自解析する際の方針や使える技のメモを簡単に紹介します。
アクセスログの設定
解析するには、まずアクセスログがどのようなファイルに、どのようなフォーマットで出力されるのかが重要です。
私が便利だと思うのは、
・日ごとに00:00:00-23:59:59までのアクセスログを1ファイルに出力
・フォーマットはcombined
です。
上記の具体的な設定方法についてはApacheのアクセスログ設定を参照。
複数ドメイン対応の場合には、combinedではなく、VirtualHost情報も含めるべきですが、ログ解析プログラムを適用する時点では、単一ドメインのアクセスログにしておくべきです。
※マルチドメイン対応のログ解析を独自に行うつもりはないので
日ごとに1ファイルに出力しておけば、ログ解析を実行するタイミングは1日1回前日分を解析すればよいことになります。(リアルタイムで解析することは考えていません)
また、アクセスログが1ファイルで1日ごとに完結しているので、ログ解析結果に表示されている結果もきちんと1日ごとに完結していることになります。
マッチング
アクセスログがcombined形式である場合には、以下のPerlの正規表現でマッチングが可能です。
m/^([^ ]+) ([^ ]+) ([^ ]+) (\[[^\]]+\]) "(.*) (.*) (.*)" ([0-9\-]+) ([0-9\-]+) "(.*)" "(.*)"$/;
ここでマッチさせて得られたフィールドを元に統計情報を作成していくことになります。