弊社サバゲ〜るの開発では以前、開発環境にFiveRuns TuneUpをインストールしてみたことがあり、これは便利だ是非活用しようと思ったまま、なかなか手つかずの状態になっていました。
FiveRuns TuneUpとは、Railsアプリケーションのパフォーマンスチューニングに役立つ情報を、グラフィカルに表示してくれるプラグインです。
今回、久々にブログ更新しようと思って真っ先に思いついたのがそのFiveRuns TuneUpネタでした。活用方法を調べようと思い、FiveRunsの本家サイトを見たら、
・Workthinkなる会社に買収されたよ、今ははそっちで新しい製品を作っているよ
・「DASH」というサービスは終了するのでデータをエキスポートしてね
と掲示されているページだけがあり、TuneUpプラグインはどうなるのかとか、それまで提供していたサービスについては言及されていません。。
TuneUpはあきらめ、類似サービスを調べたところ、masuidriveさんも利用しているという、New Relicが良さげということが分かりました。
New Relicも TuneUp と同様に Railsアプリケーションにプラグインをインストールし、そのプラグインがNew Relic側にデータを送信し、蓄積するという仕組みです。
料金体系は以下の通りです。今回はお試しということでLiteアカウントを選択してみます。
Free subscribeをクリックし、必要情報を入力し、Submitします。
しばらくすると入力したメアドにメールが届くので、URLをクリックしアクティベーションを行います。
アクティベーション後、Home(Myページ)にプラグインのインストール方法が載っています。ページ上部に小さくRPM Version2が出てるよと表示されているので、せっかくなのでそれにしてみます。
掲載されているとおりに手元の開発環境をセットアップします。
1. Railsアプリケーションにプラグイン(Agent)を入れる
[masayuki@dev_svgr_jp /var/local/projects/svgr.jp]$ script/plugin install http://newrelic.rubyforge.org/svn/newrelic_rpm --force
+ ./CHANGELOG
+ ./LICENSE
+ ./README.md
+ ./Rakefile
+ ./bin/mongrel_rpm
+ ./bin/newrelic_cmd
+ ./cert/cacert.pem
+ ./init.rb
+ ./install.rb
+ ./lib/new_relic/agent/agent.rb
+ ./lib/new_relic/agent/chained_call.rb
-- 略 --
このプラグインが定期的に性能データをNew Relic側に送信するようです。
2. config/newrelic.yml を作成する
HOMEからnewrelic.ymlをダウンロードし、configディレクトリに置きます。デフォルトではproduction / staging環境のみ有効になっているので、developmentでも有効になるよう、172行目を trueにします。
3. Railsアプリを再起動する
さて、サクッとインストールできたようなので、データが蓄積されるまで開発環境をいじっておきます。
10分ほどいじった後、New Relicを見てみます。
おお! どうやらデータが取得できているようです。
My Applicationをクリックすると、概要が表示されます。
この画面で確認できるのは、以下の通り
- 平均レスポンスタイム(Ruby / DB)
- Apdexスコア
Apdex(Application Performance Index)とは、アプリケーションの性能を定義する標準的な指標とのこと。
詳しくは、こちらを参照。 - スループット(request per minute ?)
- ホスト毎のCPU使用率、メモリ使用量
- 直近のイベントノート(コメント)、デプロイ履歴など
なお、Overview以外の下記のタブは、Bronzeアカウント以上でないと見ることができません。
- Web Transaction
- Database
- Transaction Traces
- Errors
取得したデータには、ノート(コメント)が書け、それを共有することができます。
まとめ
FiveRuns TuneUpでは、RailsアプリのMVC毎に何ms時間が掛かっているか棒グラフで表示する非常にシンプルな機能だったのですが、New Relicは(というよりFreeアカウントでは)そこまでは提供されないようです。 Ruby全体のレスポンス、ホスト毎のCPU使用率、メモリ使用量やApdexスコアにより、FiveRunsより大きな粒度でアプリケーションの性能を確認できます。注意すべき点としては、動作環境がproductionかつ1分おきにデータを取得するので、Amazon EC2など従量課金の場合でトラフィックが多いアプリケーションの場合はデータ転送量に注意が必要です。
Railsアプリは遅いと諦める前に、どこがボトルネックなのかを見える化し、チューニングを施す。これらを簡単に行えるツールは今後も需要があるのではないでしょうか。