LoginSignup
9
9

More than 5 years have passed since last update.

NewRelic で Rails アプリのエラーを分析する

Posted at

クービック Advent Calendar 2015 の 21日目です。

クービックではアプリパフォーマンス分析のために NewRelic を導入しています。

NewRelic には非常に多くの機能があるのですが、今回は Rails アプリケーションのエラー分析を行う際の工夫をご紹介しようと思います。

Error Analytics

最近、新しく追加された機能です。エラーの種類・頻度が一目でわかります。

newrelic_error_analytics.png

大半を紫色のエラーが占めていることが一目瞭然です。

Error Attributes

種類と頻度が分かると、次はなぜそのエラーが発生するのか原因を知りたくなります。

知りたいときに限って、「うー、肝心なログが出てない!ぐぬぬ...」となったことはエンジニアなら少なからず経験あると思います。

NewRelic では、設定ファイルを少し書くだけで、リクエストパラメタが取得可能です。ドキュメントはこの辺りを参照すればよいのですが、読み解くまでに多少時間が掛かりました。

結論としては、こんな感じで書けば ok です。

config/newrelic.yml

common: &default_settings
  license_key: your-secret-license-key
  app_name: YourAppName 
  attributes:
    enabled: true
    include:
      - "request.parameters.*"
    exclude:
      - "request.parameters.user.password"
      - "request.parameters.user.current_password"

"request.parameters.*" で任意のパラメタを include するようにしておき、マスクしておくべきものは exclude に指定します。

これだけで NewRelic 上でリクエストパラメタを確認できるようになります。
場所としては、右側の Error attributes になります。

no_method_error1.png

no_method_error2.png

rescue した例外を NewRelic に通知する

通常は newrelic_rpm を Gemfile に書いておけば、よしなにエラーを NewRelic に通知してくれるのですが、

class MyController < ApplicationController
  rescue_from StandardError, with: :render_500

  def render_500(e = nil)
    render file: 'public/500', status: :internal_server_error
  end
end

こういうコードでエラーを握りつぶしている場合は、通知されません。
このような場合は、

class MyController < ApplicationController
  rescue_from StandardError, with: :render_500

  def render_500(e = nil)
    NewRelic::Agent.notice_error(e)
    render file: 'public/500', status: :internal_server_error
  end
end

と書いてあげれば OK です。

Error をアサインする

Ticketing integrations によると、JIRA, Lighthouse, Pivotal Tracker と統合できるようです。Github Issue と連携できるとありがたいのですが...

クービックではこれらのツールを使っていないので、原始的ではありますがメールでアサインしています。

newrelic_share_this_error.png

Share this error をクリックすると、モーダルが表示され、メールを送信することができます。

おわりに

NewRelic で Rails アプリケーションのエラー分析をする際の工夫をいくつかご紹介しました。お役に立てれば幸いです。

9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9