Sentryとは
Sentry はアプリケーションのエラーやパフォーマンスをリアルタイムで監視し、問題の迅速な特定と修正を支援する開発者向けツールだ。
なぜ試してみたのか
プロジェクトで Sentry を使用していて、基本的な使い方を知りたかった。
今回は Sentry アカウントを作成し、ローカルで実行した Python コードから送られてくるエラーやメッセージを Issues 画面で確認するところまでやってみた。
アカウントを作成する
サインアップページにアクセスする。
フォームを入力して CREATE YOUR ACCOUNT をクリックすると、Welcome to Sentry という画面が表示される。
ここでは画面下部の Skip onboarding. をクリックする。
すると、Sentry の画面が表示される。
Projectを作成する
左サイドバーの Projects をクリックする。
表示された画面右上の Create Project をクリックする。
Create a new projects in 3 steps 画面が表示される。
以下のように設定する。
1. Choose your platform
PYTHON を選択する。
2. Set your alert frequency
デフォルトのままにしておく。
3. Name your project and assign it a team
Project name に my-first-sentry と入力する。
Team -> Create team と順にクリックして、my-first-sentry と入力し、 Create Team をクリックする。
設定内容を確認して、Create Project をクリックする。
すると、Dou you use a framework? というダイアログが表示される。
デフォルト(Nope, Vanilla)のまま Configure SDK をクリックする。
Configure Python SDK 画面が表示される。
画面下部の Take me to issues をクリックする。
Issues 画面が表示される。
Get Started with Sentry Issues
ここからの作業はターミナルで行う。
事前準備として、先ほど作成したプロジェクトと同じ名前の my-first-sentry ディレクトリを作成し、移動する。
mkdir my-first-sentry && cd my-first-sentry
さらに仮想環境を作成し、その中で作業する。
python3 -m venv .venv
source .venv/bin/activate
ここからは画面に従って進める。
1 Install Sentry
Sentry をインストールする。
pip install --upgrade sentry-sdk
画面では Next をクリックする。
2 Configure Sentry
表示されたコードから、dsn の値をコピーして控えておく。
Next をクリックする。
3 Verify
division_by_zero = 1 / 0
で意図的にエラーを発生させよ、と。
Waiting to receive first event to continue
Sentry がエラーを待っている。
my_first_sentry.py
という名前で以下の内容の Python ファイルを作成する。
import sentry_sdk
sentry_sdk.init(
dsn="<your-dsn>",
)
division_by_zero = 1 / 0
<your-dsn>
は手順 2 で控えたあなたの DSN に置き換えて、実行する。
python my_first_sentry.py
すると、画面が以下のように変化し、先に進めるようになった!(これには数秒待つかもしれない)
Event was recieved!
Take me to my error をクリックすると、エラー詳細画面に遷移する。
ここではスタックトレースなどを確認できる。しっかりとエラー情報を送信してくれたようだ。
スタックトレースの下にある mechanism や handled はタグ (Tags)と呼ばれるもので、エラーのフィルタリングや関連付けに利用できるものらしい。
画面右上の Resolve ボタンで、エラーを解決済みとしてマークできるようだ。
明示的なキャプチャ
上記は try/except
で処理されなかったエラーについて、Sentry が自動で捕捉(キャプチャ)してくれる例だった。
Sentry には、明示的にエラーやメッセージをキャプチャするメソッドが用意されている。
Issues 画面は、アプリケーションで発生している問題が一覧で表示される画面だ。
以下には先ほどの ZeroDivisionError
のみが表示されている。
画面右上の「▷」ボタン(Enable real-time updates)をクリックすると、リアルタイムに一覧を更新できるようになる。見ておくとよいだろう。
先ほど控えた DSN を環境変数に入れておこう。この後のコードで dsn
の部分を置き換える必要がなくなる。
export SENTRY_DSN=<your-dsn>
capture_exception
メソッド
適切に処理されたエラーでも、Sentry に通知したい場合があるだろう。そのようなときに利用できるメソッドだ。
以下のコードで試してみる。
import os
import sentry_sdk
sentry_sdk.init(
dsn=os.environ.get('SENTRY_DSN'),
)
try:
raise Exception("My first capture exception!")
except Exception as e:
sentry_sdk.capture_exception(e)
python my_first_capture_exception.py
すると、一覧に Exception
が追加された。
ZeroDivisionError
との違いは、Unhandled
と表示されていないことだ。
エラー詳細を見てみる。
Event Highlights の handled は yes、level は error となっている。
Stack Trace の下を見ると、mechanism は generic, handled は true だ。
capture_message
メソッド
こちらは任意のメッセージをキャプチャできる便利なメソッドだ。デバッグ目的で利用したいケースはあるだろう。
サンプルコードを実行してみる。
Custom Search 欄の issue.priority is high or medium を外して Enter を押し、一覧を更新しておこう。
import os
import sentry_sdk
sentry_sdk.init(
dsn=os.environ.get('SENTRY_DSN'),
)
sentry_sdk.capture_message('My first capture message!')
python my_first_capture_message.py
一覧に追加された内容は、先ほどまでのエラーとは異なって見える。
メッセージそのものが強調され、(No error message) と表示されており、PRIORITY は Low だ。
詳細を見ると、level は info となっていて、Stack Trace ではなく Message が表示されている。Tags はついていない。
見てみた内容は以上だ。
感想
Sentry で非常に簡単にアプリケーションのエラー監視を始められることを確認できた。
明示的なキャプチャの方法もシンプルだった。様々な情報から、エラーやメッセージを容易に判別できそうだ。
使いこなすには Docs に目を通す必要がありそうだが、見てみた感じ充実していそうだった。
機会があれば別の機能も試してみたい。