Apacheログを眺める話

長い事放置したなぁ。

さて、Apacheのログフォーマットをいじるよ。

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D %v %I %O %X" combined_DvIOX

最近のお気に入りはコレ。logioモジュールが必要。
ほんとは %D %X %v %I %O だよなー、って思ったけど一度これでスタートしちゃった所があるので、これでやってます。
http://httpd.apache.org/docs/2.2/ja/mod/mod_log_config.html
いろいろ出せるんだよねー。実は%{Foobar}oはかなりアツイ。

さてさて、%Dの応答にかかった時間(マイクロ秒)を出したので、せっかくだからログをtailしながら見たいじゃん、って思って速攻で書いたのが↓のフィルタ

$ cat /path/to/aplfilter
#!/usr/bin/perl

my ($host, undef, $user, $date, $time, $method, $req_uri, $httpver, $status, $byte, $referer, $ua, $D, $v, $I, $O, $ret);
while (<>) {
        ($host, undef, $user, $date, $time, $method, $req_uri, $httpver, $status, $byte, $referer, $ua, $D, $v, $I, $O, $ret) = ($_ =~ m|^(.*) (.*) (.*) \[([^:]+):(.*) \+[0-9]+\] "(.*) (.*) HTTP/(.*)\" (.*) (.*) \"(.*)\" \"(.*)\" ([0-9]+) (.*) ([0-9]+) ([0-9]+) (.*)|);
        print "$host\t$time\t$D\t$method\t$req_uri\n";
}

一行が長いのはご愛嬌。↓こうやって使うよ。

$ tail -f /path/to/access_log | /path/to/aplfilter

出したい中身が変えたくなったらaplfilterを書き換える。出力フォーマットをオプション化?その場で使うだけのクソスクリプトにそんなことしないよ。えへ。