search
LoginSignup
9

More than 5 years have passed since last update.

posted at

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

クービック 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 アプリケーションのエラー分析をする際の工夫をいくつかご紹介しました。お役に立てれば幸いです。

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
What you can do with signing up
9