クービック Advent Calendar 2015 の 21日目です。
クービックではアプリパフォーマンス分析のために NewRelic を導入しています。
NewRelic には非常に多くの機能があるのですが、今回は Rails アプリケーションのエラー分析を行う際の工夫をご紹介しようと思います。
Error Analytics
最近、新しく追加された機能です。エラーの種類・頻度が一目でわかります。
大半を紫色のエラーが占めていることが一目瞭然です。
Error Attributes
種類と頻度が分かると、次はなぜそのエラーが発生するのか原因を知りたくなります。
知りたいときに限って、「うー、肝心なログが出てない!ぐぬぬ...」となったことはエンジニアなら少なからず経験あると思います。
NewRelic では、設定ファイルを少し書くだけで、リクエストパラメタが取得可能です。ドキュメントはこの辺りを参照すればよいのですが、読み解くまでに多少時間が掛かりました。
- https://docs.newrelic.com/docs/agents/ruby-agent/attributes/enabling-disabling-attributes-ruby
- https://docs.newrelic.com/docs/agents/ruby-agent/attributes/ruby-attribute-examples
結論としては、こんな感じで書けば 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 になります。
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 と連携できるとありがたいのですが...
クービックではこれらのツールを使っていないので、原始的ではありますがメールでアサインしています。
Share this error をクリックすると、モーダルが表示され、メールを送信することができます。
おわりに
NewRelic で Rails アプリケーションのエラー分析をする際の工夫をいくつかご紹介しました。お役に立てれば幸いです。