どうしても映画に出てくるようなハッカーになりたいのであったが、しかし技術力もなければ勇気もない、そのうえオレは無能。そこでこのツール。アイムハッカーの出番だ。これを使えば誰でもハッカーを気取れるぞ。
2010年のYAPCで映画にでてくるハッカーになりたい という発表をしましたが、なんとなく動かすには敷居が高く感じられるとともに、直接 stdin を読む仕様であったため使えないケースも多く、僕は殆ど使わなくなってしまいました。
先日 uutransfer という screen のログから出力を拾ってほげほげするみたいなツールを書いてから、そういう仕組みをもうちょい応用できないかと考えた結果上記のようなものができあがりました。
簡単にまとめると「tail -f してるアクセスログをリアルタイムで解析してなんかソレっぽく表示するツール」です。
ImHacker というふざけた名前ですが、それは置いといて、node で動くように全部 JavaScript で書いてあります。
使いかた
基本的には GNU screen 上で動かすことを考えて作ってあります。screen 上で、まぁとにかく適当なサーバに ssh で入って (後述しますが mosh だとダメです) アクセスログを tail -f しときます。
ImHacker 自体は次のようにして起動します。
git clone git://github.com/cho45/imhacker.git npm install node app.js
起動して http://localhost:2012/ にアクセスすると、まず最初は設定ダイアログが開くので、アクセスログのフォーマットを指定します。Apache の LogFormat の行をそのままコピペしたら使える感じで作ってあります。設定したら Save を押してダイアログを閉じます (localStorage に設定を保存するので、次からは開きません)
アクセスログを tail -f しているウィンドウの番号に対応する数字のボタンを押します (右上の screen window と書いてあるやつ)。するとログの解析がはじまります。
とりあえず動かしてみたいなら、http://localhost:2012/#demo とするとデモモードで動きます。
コンセプト
- イマ! この! tail -f している! まさに! この! ログを! カイセキ! したいんだ! という感じなので screen からログをひろいます
- ほとんど全ての処理をクライアントサイド (ブラウザ) で行うので、拡張しやすいです。なんかカッコイイグラフを増やしたい。
- もともと来年の YAPC (今年は応募してない) で話すネタを作るつもりだったんですが Perl が一切使われてない
現状の機能
- req/sec の時系列推移
- レスポンスタイムのグラフ化
- リクエストメソッドの統計
- レスポンスステータスの統計
- 遅いレスポンスをかえす path をリスト
- 500 エラーをかえしている path をリスト
- IP アドレスによる時系列トラッキング
- まぁまぁのアクセスがあるサイトでやると楽しいとおもうのでやってみてください
備考
- mosh だと、サーバ側で特殊なことをしていて、クライアント側では部分書き換えをするみたいなことをしているみたいで、screen のログに「見たまま」記録されないので ssh を使う必要があります
- screen 上で動かさなくても、./bin/imhacker-in というコマンドに出力をパイプすると、全クライアントにその内容が送信されるようになります。すなわち tail -f /var/log/access_log | ./bin/imhacker-in としても良いです
- bootstrap をつかってみました
- 最初は Perl で作ろうとおもったけど socket.io を使いたかったのでやめた。あと node のほうが動かすのが簡単そう

