eviry tech & service blog

「株式会社エビリー」の社員ブログです。弊社では、クラウド型動画配信サービス「millvi」、ソーシャル動画データ及び分析サービス「kamui tracker」、YouTube総合メディア「かむなび」を開発・提供しています。https://eviry.com/

Railsアプリのエラー管理ツールにSentryを導入した

これは旧eviry tech blogから移行した記事です。

こんにちは。kamui trackerを担当しているエンジニアのkawashigeです。
私の担当しているkamui trackerというRailsアプリケーションにエラー管理ツールのSentryを導入したので紹介します。

なぜ導入したのか

これまでエラーの通知にはアプリケーション内でメール送信する方式を採用していましたが、次のような問題点がありました。

  • バッチ処理の並列処理でエラーなどでメールの通知が大量になることがある
  • 発生したエラーの状況の管理が煩雑(スプレッドシートで手動管理)
  • エラー発生数、頻度などの統計情報の確認が難しい

上記問題を解消するためにエラー管理ツールの導入を行いました。
エラー管理ツールの選定においてには次のツールについても調査、検討を行いました。

  • Sentry
  • Bugsnag
  • Airbrake
  • Rollbar

検討した結果次の理由でSentryを選択しました。

  • 必要な機能がそろっている
    • エラーをまとめる機能
    • 通知を一定期間で抑止できる機能
  • 月毎の料金が安くスタートできそうだった
  • OSSで利用できるのでイベント数が増えた際に自前の運用も選択できる

導入手順

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

アプリケーションの修正

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

gem 'sentry-raven'

あとは、これまでメール送信していた部分をSentryへの通知に変更するだけです。
簡単ですね!

- ExceptionMailer.notify(e).deliver_now # メールでのエラー通知処理
+ Raven.capture_exception(e)            # Sentryへのエラーの通知処理

※実際はメール送信処理はコメントアウトしておき、Sentryの障害時はメール送信処理を戻せるようにしています。

Sentry画面での確認方法

通知したエラーはSentryの画面からIssueごとに確認ができ、同一のイベント(エラー)はひとつにまとめられます。
この画面上で、担当者を割り当てたり、Pivotal Trackerのチケットを作成したりできるので管理しやすくなりました。

エラーについてはメール通知とSlack通知を行うように設定しています。
通知の設定で一定期間内は同一の通知を行わないようにできるので通知が溢れることはなくなりました。

Slackへの通知では直接エラーの無視や担当者の割り当てができるので便利です。

Sentryのステータスの確認

SaaSのサービスなのでサービスの稼働状況を確認する必要があります。
障害時はエラー通知方法を変更する必要があるため、下記ページで障害の情報を購読しておきましょう。

https://status.sentry.io/

まとめ

エラー管理ツールのSentryを導入することで、効率的な障害対応、エラー管理ができるようになりました。
まだ運用し始めたばかりですので、通知の設定や管理方法などはこれから見直していきます。
障害対応時は迅速な対応が必要ですので、ツールを活用して効率的にすばやく対応できるようにしていきたいですね!

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

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