1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SentryでPythonコードからのエラーキャプチャを試してみた

Posted at

Sentryとは

Sentry はアプリケーションのエラーやパフォーマンスをリアルタイムで監視し、問題の迅速な特定と修正を支援する開発者向けツールだ。

なぜ試してみたのか

プロジェクトで Sentry を使用していて、基本的な使い方を知りたかった。

今回は Sentry アカウントを作成し、ローカルで実行した Python コードから送られてくるエラーやメッセージを Issues 画面で確認するところまでやってみた。

アカウントを作成する

サインアップページにアクセスする。

スクリーンショット 2024-11-30 155246.png

フォームを入力して CREATE YOUR ACCOUNT をクリックすると、Welcome to Sentry という画面が表示される。

スクリーンショット 2024-11-30 160325.png

ここでは画面下部の Skip onboarding. をクリックする。
すると、Sentry の画面が表示される。

Projectを作成する

スクリーンショット 2024-11-30 194728.png

左サイドバーの Projects をクリックする。
表示された画面右上の Create Project をクリックする。

Create a new projects in 3 steps 画面が表示される。

スクリーンショット 2024-11-30 201147.png

以下のように設定する。

1. Choose your platform

PYTHON を選択する。

2. Set your alert frequency

デフォルトのままにしておく。

3. Name your project and assign it a team

Project namemy-first-sentry と入力する。
Team -> Create team と順にクリックして、my-first-sentry と入力し、 Create Team をクリックする。

スクリーンショット 2024-11-30 195510.png

設定内容を確認して、Create Project をクリックする。

スクリーンショット 2024-11-30 165002.png

すると、Dou you use a framework? というダイアログが表示される。

Do you use a framework?

デフォルト(Nope, Vanilla)のまま Configure SDK をクリックする。

Configure Python SDK 画面が表示される。

スクリーンショット 2024-11-30 202243.png

画面下部の Take me to issues をクリックする。

Issues 画面が表示される。

スクリーンショット 2024-11-30 202556.png

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 ファイルを作成する。

my_first_sentry.py
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 をクリックすると、エラー詳細画面に遷移する。

スクリーンショット 2024-11-30 213627.png

ここではスタックトレースなどを確認できる。しっかりとエラー情報を送信してくれたようだ。

スタックトレースの下にある mechanismhandled はタグ (Tags)と呼ばれるもので、エラーのフィルタリングや関連付けに利用できるものらしい。

画面右上の Resolve ボタンで、エラーを解決済みとしてマークできるようだ。

明示的なキャプチャ

上記は try/except で処理されなかったエラーについて、Sentry が自動で捕捉(キャプチャ)してくれる例だった。

Sentry には、明示的にエラーやメッセージをキャプチャするメソッドが用意されている。

Issues 画面は、アプリケーションで発生している問題が一覧で表示される画面だ。
以下には先ほどの ZeroDivisionError のみが表示されている。

スクリーンショット 2024-11-30 220304.png

画面右上の「▷」ボタン(Enable real-time updates)をクリックすると、リアルタイムに一覧を更新できるようになる。見ておくとよいだろう。

先ほど控えた DSN を環境変数に入れておこう。この後のコードで dsn の部分を置き換える必要がなくなる。

export SENTRY_DSN=<your-dsn>

capture_exception メソッド

適切に処理されたエラーでも、Sentry に通知したい場合があるだろう。そのようなときに利用できるメソッドだ。

以下のコードで試してみる。

my_first_capture_exception.py
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 と表示されていないことだ。

スクリーンショット 2024-11-30 221745.png

エラー詳細を見てみる。
Event Highlightshandledyeslevelerror となっている。
Stack Trace の下を見ると、mechanismgeneric, handledtrue だ。

スクリーンショット 2024-12-01 103942.png

capture_message メソッド

こちらは任意のメッセージをキャプチャできる便利なメソッドだ。デバッグ目的で利用したいケースはあるだろう。

サンプルコードを実行してみる。

Custom Search 欄の issue.priority is high or medium を外して Enter を押し、一覧を更新しておこう。

my_first_capture_message.py
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

スクリーンショット 2024-11-30 223609.png

一覧に追加された内容は、先ほどまでのエラーとは異なって見える。
メッセージそのものが強調され、(No error message) と表示されており、PRIORITYLow だ。

詳細を見ると、levelinfo となっていて、Stack Trace ではなく Message が表示されている。Tags はついていない。

スクリーンショット 2024-11-30 224102.png

見てみた内容は以上だ。

感想

Sentry で非常に簡単にアプリケーションのエラー監視を始められることを確認できた。

明示的なキャプチャの方法もシンプルだった。様々な情報から、エラーやメッセージを容易に判別できそうだ。

使いこなすには Docs に目を通す必要がありそうだが、見てみた感じ充実していそうだった。

機会があれば別の機能も試してみたい。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?