はじめに
Rails環境でSentryを導入したので導入手順をまとめました。
以前まではsentry-raven
というGemが使用されていましたが、こちらがメンテナンスモードに入ってしまい、
現在はsentry-rails
、sentry-ruby
への移行が推奨されています。
この記事ではsentry-rails
、sentry-ruby
を使用し進めます。
Sentryとは?
Webアプリケーションで起きたエラー等をロギングできるサービスです。
導入も簡単でUI/UXがGoodなダッシュボードも使えます
料金(2021年3月27日時点)
プラン | Developer | Team | Business | Enterprise |
---|---|---|---|---|
料金 | $0/月 | $26/月 | $80/月 | 要問い合わせ |
無料のプラン(Developer)でも個人で使うのであれば十分すぎるほどサービスを利用できます。
エラーをSlackへ通知やDiscover
というクエリ機能を使用するには、Developer以上への登録が必要です!
その他詳細は公式を参照してください。
導入
Sentry.ioにアカウント登録
下記URLにアクセスしサインアップを行ってください。
基本設定
サインアップ後に基本設定のチュートリアルが開始されます。
今回はRailsを使用するのでplatformの選択でRailsを選択します。
ロギングを行いたいアプリのGemfileにsentry-ruby
とsentry-rails
を追加し、bundle install
を行います。
gem 'sentry-ruby'
gem 'sentry-rails'
config/initializers/sentry.rbを作成し、チュートリアルで表示されているコードをまるっと貼り付けます。
Sentry.init do |config|
config.dsn = 'https://123456789abcdefghi.ingest.sentry.io/987655'
config.breadcrumbs_logger = [:active_support_logger]
# Set tracesSampleRate to 1.0 to capture 100%
# of transactions for performance monitoring.
# We recommend adjusting this value in production
config.traces_sample_rate = 0.5
# or
config.traces_sampler = lambda do |context|
true
end
end
※ config.dsnがベタ書きされていますが環境変数などに入れる事が推奨されています。
ここまでの設定ですでに使える!
信じがたい位簡単ですよね。
試しにアプリの適当な箇所でエラーを起こしてみるとダッシュボードのissuesに通知が届くかと思います。
オプション設定
ユーザーを特定したい
config.send_default_pii = true
send_default_pii
をtrueにすることでユーザーのIP、Cookie、request bodyがSentryに追加情報として送信されます。
が
外部サービスに個人情報を送信することになるので取り扱いに注意!
ユーザーidなど特定の情報のみであればset_user
を使いidのみ追加も出来ます。
deviseを使用したサンプル書いておきます。
before_action :sentry_set_user, if: :user_signed_in?
def sentry_set_user
Sentry.set_user(id: current_user.id)
end
set_user
にはusername, email, ip_addressが用意されており、任意のkey/valueを保存することも出来るようです。
環境を指定したい
enabled_environments
のリストを追加することにより、特定の環境でのみロギングが行われるようになります。
config.environment = Rails.env
config.enabled_environments = %w[production]
任意のデータを送信したい
ロギングレベルを指定し任意のイベントを送信することが出来ます。
Sentry.capture_message("I'm looking forward to seeing Jujutsu Kaisen movie.", level: :info)
カスタムコンテキストを使用する事でイベントに任意のデータを添付し送信することも出来ます。
Sentry.configure_scope do |scope|
scope.set_context(
'character',
{ name: 'Mighty Fighter', age: 19 }
)
end
issueの下の方にスクロールするとset_context
で渡したデータが送信されているのが確認できます。
まとめ
ざっと使い方紹介させて頂きましたが他にもTransactionやBreadcrumbsなど便利なイベントが用意されているので気になるかたは公式ドキュメントでご確認下さい