53
43

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Rails アプリのエラーを Sentry で管理する & Slack 通知する

Last updated at Posted at 2019-02-14

概要

  • Sentry の使い方と Slack 通知の方法をまとめました
  • Rails を例にしていますが、Sentry 自体の説明については他の言語でも流用できるのではないかと思います

導入

基本的には Gem (sentry-raven) を入れて、initializers などで設定するだけです。詳細な手順は下記を参照してください。

接続先情報は、Sentry の Project 画面 -> Settings -> SDK Setup -> Client Keys (DSN) に載っています。

基本的な使い方

上記の設定をするだけで、Uncaught なエラーを全て Sentry に自動通知してくれます。

しかし Rails アプリの場合、エラーを rescue_from などでキャッチして、アプリ独自のエラー画面を表示したりするケースが多いはずです。その場合、エラー処理の中で Raven.capture_exception(exception) を使って明示的に通知する必要があります。

class ApplicationController < ActionController::Base
  rescue_from Exception do |exception|
    Raven.capture_exception(exception)
    # アプリ独自のエラー画面を表示したりする
  end
  ...
end

Context の活用

Sentry はデフォルトでも基本的な情報を付加してくれますが、Context を使うとさらに便利になります。

Context とは、ざっくり言うと、Key / Value を渡すとそれが Sentry のエラーレポート画面に表示されるというような機能です。やることは、このあと紹介する Context 設定用メソッドを、Raven.capture_exception の実行前に実行するだけです。

Context にはいくつか種類があり、適切なものを選んで使うことで最大のメリットが得られるようになっています。

公式ドキュメント

User Context

ユーザー情報を扱うのに便利な Context です。

Raven.user_context(id: current_user&.id, username: current_user&.name)

下記の Key は特別な意味があります。逆に、 これらの Key を設定しないとあまり恩恵が得られない ので注意してください。

  • id
  • username
  • email
  • ip_address

User Context を設定すると、エラーレポート画面にユーザー情報が表示されるようになったり、ユーザーごとのエラー遭遇率を見れるようになったりします。特に email を設定すると Gravaters からアイコンを引っ張ってきたり、個別にメッセージを送ったりできるようです。

user_context_1.png

Tags Context

エラーをタグ管理したいときに便利な Context です。

Raven.tags_context(event_name: @event&.name)

シンプルに、与えた Key / Value がタグとして付与されて、表示 & 検索ができるようになります。

image.png

Extra Context

その他雑多な情報をとりあえずエラーに付与したいときに便利な Context です。

Raven.extra_context(params: params.to_unsafe_h, url: request.url)

雑にハッシュを丸ごと投げても大丈夫ですが、200KB が上限になっているので気をつけてください。

image.png

どんな情報でも、最悪この Context が受け皿になってくれます。ただし、ユーザー情報を扱うなら User Context を、検索用の情報を作りたいなら Tags Context を使った方が、上述のようなメリットが得られるのでおすすめです。こちらが情報を正しく構造化して渡せば、Sentry 側がそれを活かしたメリットを生み出してくれるようになっています。気持ちがいいですね。

Slack 通知

まず(Project ではなく)Organization の Settings に行き、Integrations から Slack を Install します。

slack_1.png

次に Project の Settings -> Alerts -> Rules -> (+) New Alert Rule から、通知ポリシーを設定します。 Take these actions から Slack っぽい内容のものを選び、チャンネル名などを設定すれば OK です。

おすすめ設定

  • show tags *** in notificationenvironment を選んでおくと、Slack 上でどの環境のエラーかがパッとわかるようになります。
  • 通知条件は下記がおすすめです。その種のエラーが初めて起きた時と、Resolve or Ignore したはずのエラーが再発した時に、1度だけ通知が飛びます。
    • Every time any of these conditions are met:
      • An issue is first seen
      • An issue changes state from resolved to unresolved
      • An issue changes state from ignored to unresolved
image.png
53
43
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
53
43

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?