時間のかかっている処理をログから抽出したいと思い検索し見つけたツールです。
ただのRubyのスクリプトで
$> ruby [ダウンロードしたスクリプトファイルのパス] < [対象のログファイルのパス(production.log等)
で解析し、コンソールに結果を出力してくれます。
ただ、現時点の最新(1.2)が私の環境(Rails 1.2.5)のログだとうまく動いてくれず(ZeroDivisionErrorが発生)、スクリプトを修正する必要がありました。
修正は、スクリプトの181行目に対し以下のように行いました。
修正前) next unless $_.index("Completed in") == 0
修正後) next unless $_.index("Completed in")
同じ現象が発生するなら試してみて下さい。
また、通常はリクエストURLからコントローラーとアクションを推測して集計されます。そのためruotes.rbの設定によっては、うまく単位がまとまってくれない場合があります。
その場合、ログに指定した形式でプロセスIDを出すようにすると、コントローラーのアクションごとに集計してくれるようになります。
それは、config/environment.rbに以下の記述を追加すればできるようになります。(ちなみに、スクリプトのヘルプ(-?を与えて実行で出力される)で指定される記述だとうまくいきませんでした)
class Logger
alias format_message old_format_message
def format_message(severity, timestamp, progname, msg)
old_format_message(severity, timestamp, progname, "#{msg} (pid:#{$$})")
end
end
ちょっと修正が必要でしたが、ほぼ手間なしで有用な分析情報が手に入れられます。サイトの改善などに悩んでいるRails開発者には便利なツールといっていいでしょう。