2018/06/25 - 13:30

Railsアプリのパフォーマンスの測定にNew Relicを導入した

:

:

:

こんにちは。kamui tracker担当のエンジニアのkawashigeです。
kamui trackerではサービスやメンバーの増加に伴う運用の改善を進めています。
その中でWebのリクエストのパフォーマンスの測定にNew Relic APMを導入したので紹介します。

エラー管理ツールのSentryの導入については下記記事を御覧ください。

https://tech.eviry.com/2018/06/11/introduction_of_sentry/

なぜ導入したのか

これまでkamui trackerではスロークエリの確認をして遅いリクエストの改善は行っていましたが、個別のWebのリクエストについてパフォーマンスを測定していませんでした。
そのため、スロークエリになるほど遅いリクエスト以外は体感で遅いことに気付いたリクエストのみを改善するという状況でした。
リクエストについて定量的に測定して、リクエスト数の多く、レスポンスの悪いリクエストを効率的に対応するためにパフォーマンス管理ツールのNew Relicの導入を行うことにしました。

https://newrelic.com/

過去データが24時間しか見れないなどの制限はありますが、現状無料プランで運用しています。

導入方法

次にSentryをRailsアプリケーションに導入する方法を紹介します。

アプリケーションの修正

Gemfileに下記gemを追加します。

gem 'newrelic_rpm'

あとはNew Relicのサイトからnewrelic.ymlをダウンロードして、アプリケーション名等を修正しconfig配下に格納するだけで測定が可能です。

今回kamui trackerではWebのパフォーマンスの測定のみ行うため、バッチサーバでNew Relicを送信しない設定を行っています。
環境変数でNew Relicエージェントの有効・無効の設定ができるため、schedule.rbに下記環境変数を追加しています。
※kamui trackerではwheneverを使用してバッチの起動設定を行っています。

env :NEW_RELIC_AGENT_ENABLED, false

New Relic画面での確認方法

上記設定を行うとNew Relicの画面上でパフォーマンスの測定結果が確認可能です。

Overview

Overviewの表示では指定期間でのWebのリクエストの時間をDBやRuby、外部サービスごとに確認できます。

Transactionの表示ではWebのリクエストを総時間や平均時間順にソートして確認できます。

トランザクションを選ぶとDBやRuby、外部サービスごとの消費時間、呼び出し数、平均時間が確認できます。

上記画面を使ってリクエスト数が多く、平均時間の長いリクエストを確認しパフォーマンス改善を行っていきます。
実際にNew Relicを使って遅いリクエストを発見して修正できました。

まとめ

RailsアプリケーションへのWebのパフォーマンス監視ツールのNew Relic APMの導入について説明しました。
現状無料プランでの利用ですが、New RelicはAPM以外の機能もあるので今後導入を検討していきます。

kamui trackerではいろいろなツールを導入して開発・運用のフローを改善していきたいエンジニアを募集しています!
ご興味のある方は下記からご連絡ください。

https://www.wantedly.com/projects/177301

kamui trackerについては下記ブログ投稿を御覧ください。

https://tech.eviry.com/2018/05/15/introduction_of_kamui_tracker/