Apache の ログ を、リアルタイムに QuartzComposer で表示するものをつくりました。 tail -f /var/log/httpd/access.log の代わりにつかう、みたいな。
Download
httpd2qc package (Universal Binary, tested on Tiger)
Screencast
プライバシーをまもるために、リモートホストのIPアドレスは “xxx.xxx.xxx.xxx” にしています。実際にはばっちり表示されます。
Quick Start
- ApacheLogPatch.plugin を、/Library/Graphics/Patches にコピー
- Apacheの設定ファイル (httpd.conf とか) に、filter.rb へ カスタムログ を パイプするような設定を加える
例:LogFormat "%h \"%{Referer}i\" %U" httpd2qc CustomLog "|/opt/local/httpd2qc/filter.rb" httpd2qc - ApacheLogDisplay.qtz を 開く
- Apache を restart
- 眺める
Detail
- ApacheのカスタムログをパイプでRubyスクリプトに流しこむ
- Rubyスクリプト (filter.rb) は、文字列のURI デコードなどをして、QuartzComposerのカスタムパッチ用にデータをつくる (ここでもうちょっと賢いことができそう)
- QuartzComposerのカスタムパッチ (ApacheLogPatch) は、流れてきたデータをQCStructureのスロット (とりあえず3つ) に詰め込む
ApacheLogPatch は、QCStructureのオブジェクトを出力します。実際には、[リクエストパス、リモートホストのアドレス、リファラー、検索キーワード] の要素をもつQCStructure の配列になっています。
より詳しくはソースを。
ToDo
- 背景に世界地図を描いておいて、ログが来たときにIPアドレスから地理情報を取得して、それらしき場所を点滅させる (IP2Location とかをつかえばよさそう)
- もうちょっとカスタマイザブルに
- もうちょっとかっこよく
きっかけ
Google本社では、検索キーワードがリアルタイムに画面を流れているのが見れるとか聞きました。僕が行ったときには、そんなディスプレイは見当たらなかったのだけれど。
せっかく自宅サーバをMacで動かしているのだし、なにか面白いことはできないもんかなー、と風呂でぼんやり考えていて、最近遊んでいる QuartzComposer の CustomPatch と組み合わせてみたら? と。
日本語