知人より、サイトのアクセスログ解析を頼まれる。
来院状況や広告方法などの参考にしたいとのことだった。
このサイト、某有料レンタルサーバで運営していて、アクセスログは日別に提供されている。
Apache Combined Log 形式なので、とりあえず FTP でサイトの所定のディレクトリから
ダウンロードしてきて、Mac 上で shellscript かなんかでログを解析すれば良いだろうなと
思いつつも、早くも「スクリプト書くの面倒だ」という、業界人としてはあるまじき怠惰な
状況に陥る。気心知れた友達からの依頼ではないのに無償というのがモチベーション低下の
原因なのかななんて思いつつ、まあいいや、断る理由もなし。
で、まずは apache のログってどんなだったかな、と公式サイトのドキュメントを眺めつつ、
ダウンロードしたログファイルの1つを開いて内容の確認。
次に、じゃどうやってこれをパースするか、というところでさっそくググってみた。
自分で考える気はないのか、くらいな勢い。
すると、はてなに「Apache形式のログを解析する正規表現を教えて下さい。」という、
まさにそのまんまなモノが見つかる。ああ、Perl でやるのが一般的なのか。
この回答は Geekなぺーじの「アクセスログの読み方」へのリンクとなっていて、ありがたい
ことにスクリプトがそのまんま記述されている。世の中、親切な人ばかりで、本当に感謝に
耐えないのである。
なんて思いながらスクリプトをつらつらと読んでいたのだが、ググった時に出てきた、他の
サイトも気になってちょっと見てみる。
すると、Geekなぺーじを引用してパターンマッチの部分を改良されているエントリ発見。
「Apache Combined Log を効率的にパースする正規表現メモ」。
[ぴ]さんの「スペースモラトリアムノカミサマ」というブログ。
というか、この方の技術情報は凄すぎ。何で今までこのブログを知らなかったのだろう。
やっぱブログはこうやって使われているのが一番ブログらしい気がする。
ここによると、「最長一致の .* が多数登場するためか、マッチ処理がとても遅い」らしく、
「10万行パースするのに Core2 使って 23.7秒」で「あり得なくね?」とのこと。
じゃうちの PowerPC G4 だとどうなんだ、丸2年半分のログを全部パースしてたら 10万行
どころではないので、何日かかるのだろうなどと恐ろしい想像をしつつ先に読み進めると、
どうやら最短一致でマッチさせるようにすれば、同じ 10万行が 1.12秒だと。まぢ?
これは頂く他ないだろうということで、Request String を分割取得するように記述されて
いるものの方を使わせていただくことにした。
ちなみに、CPAN モジュールに Apache Combined Log 解析するものがあるようだ。
そのうちこっちも試してみよう。
で後は、年月で階層化されたフォルダに格納されているログファイルを順に処理するように
ループの部分を書き、パースした内容をファイルに書き出すようにして完了。
このファイルを、先日作成したデータベースに取り込んで、集計元データを作成。
そして、どういった視点でこのデータを解析するか、だけど、とりあえず
・月別/曜日別/時間帯別の訪問数
・ページ別訪問数
・リファラ別集計
・エージェント別集計
このくらいがあれば大丈夫かな、と。また、グラフ化にあたっては、
SQL 投げた結果を CSV で出力
→NeoOffice の Calc( MS Office の Excel 互換無料ソフト)に取り込んで表作成
→そこからグラフを作成
が、手間はかかるが楽かな。タイトルとか見栄えとか印刷とか考えると。
どうせ Perl 使ってるのだから GD::Graph っていうライブラリを使ってグラフを描画、という
手もあるみたいだが、これはこれでモジュールのインストールからしなきゃならないうえに、
取得データから多次元配列をどう組むか考えなきゃならず、都度データ数とかが変わる場合は
どうやろうかなんて考えてたら眠くなってきた。
今回は断念。そのうちやってみよう。
また集計自体も、Perl で直接ログファイルからやるもんなんだろうけど、全ログから特定の
データを検索したい場合とか、依頼主から思いつきで特定のデータ検索を頼まれた時のことを
考えると、都度いちいちスクリプト書くのもどうかと思うし、せっかくデータベース作ったん
だから慣れてる SQL の方が便利かな、なんて思いもあって。
とりあえず今日はこんなところで。
ところで、この話題を後輩とちょっと話していたときに、その後輩が
「 Mac って、unix も動くんですね、Cygwin みたいなもんですか?」
って聞いてきた。
いや、アレは unix を Windows 上でエミュレーションしてるだけなので違います。
「 unix も動く」と認識していたようで、だから「今の Mac は Windows も動くよ」っていう
話をしていたときにエミュレータ云々の話が出たのか、と納得。
誤解を解くのと説明のため、Wikipedia の「 Mac OS X 」の項を参照してもらった。
こちらも、文才のあるどこかのありがたい方に感謝。
仕事中に編集に勤しんでいる某公務員でなきゃいいけど。