FastAPIにSentryを導入した話
個人アドベントカレンダーの2日目の記事になります。 副業で開発しているFastAPIのプロダクトにおいてエラートラッキングを行うためにSentryを導入した話です。

あまね - Qiita Advent Calendar 2022 - Qiita
Calendar page for Qiita Advent Calendar 2022 regarding あまね.
背景
Vue+FastAPIで構築されているシステムのバックエンド側にエラー監視ツールが導入されていなかったので、導入することになりました。
自分が参加したタイミングではすでにフロントエンド側にSentryが導入されていたので、バックエンド側のエラー監視ツールも同じSentryする方針で実装することになりました。
Sentryについては全く事前知識がなかったので、調べながらの実装になったため、今回は調べたことや実装したことをまとめて書いておこうと思います。
Sentryとは
Sentryは、ソフトウェアのエラー追跡とパフォーマンス監視のためのツールです。
GitHub - getsentry/sentry: Developer-first error tracking and performance monitoring
Developer-first error tracking and performance monitoring - getsentry/sentry

Application Performance Monitoring & Error Tracking Software
Application performance monitoring for developers & software teams to see errors clearer, solve issues faster & continue learning continuously. Get started at sentry.io.
エラーについてdebug,info,warn,errorの4つの種類で通知できるほか、発生した例外に関してもスタックトレースを含めて通知してくれます。
パフォーマンス監視機能は、HTTPリクエストの応答時間やデータベースのレイテンシなどを測定することができるようです。
このあたりでデモも体験できます。 https://try.sentry-demo.com/organizations/eager-cod/performance
BugsnagとSentryの違い
普段本業の方ではRuby on Railsのプロダクトにエラー監視ツールとしてBugsnagを用いているので、今回Sentryというツールがあることも知ったので、違いについて軽く調べてみました。 いくつか記事を読んでみたところ機能についてはあまり違いがないようで、導入を決めるにあたっては「Bugsnagはたくさんのサードパーティアプリとの連携が可能で、Sentryは類似のエラーを簡単に解決できることが強み」というような観点で見るということが書いてありました。
Bugsnag
- エラーの根本原因によるグルーピング
- JavaScript,iOS,Android,Python,RubyやJavaなどの50を超える言語やプラットフォームのサポート
- チャットやメール、SMSなどへの即時通知
Sentry
- リアルタイム更新機能で、ユーザーがエラーに遭遇するよりもずっと前に、スタックのあらゆる場所でコードレベルの問題を修正することができる
- 完全なコンテキストがあるので、重要な部分を発見しやすい
- JavaScript、Python、PHP、Ruby、Node、Java、.NET、モバイルなど、あらゆる主要なプラットフォーム、フレームワーク、言語に対応したドロップイン方式の統合
stackshare.io/stackups/bugsnag-vs-sentry
www.testquality.com/blog/tpost/rf623v6o81-rollbar-vs-sent…
また自分はまだ触ったことがないのですが、Rollbarも同系統のツールとしてよく使われることがあるらしいです。
下記食べログさんのNext.jsでは
- 時間単位で受信限度数が設定できる→コスト削減
- 管理画面上でのフィルタリングが可能
- 記事が多い
という理由でSentryを選定されていました。

月間13億PVのエラートラッキングにSentryで挑む|食べログ フロントエンドエンジニアブログ
はじめまして。食べログFE(フロントエンド)チームの佐伯と申します。 このタイトルを書いてみて、数字の大きさに驚きを隠せません。 通常形態のフリーザ様(53万)何人分でしょうか。 2019年9月より食べログではフロントエンドのエラートラッキングにSentryを使用しており、今回は実際に運用して見えてきた課題などをご紹介させていただきたと思います。 ※PV数は2020年6月時点のものを参考にしております https://corporate.kakaku.com/press/mission 概要 ・トラッキングツールの選定理由 ・Sentry導入だけでは全て解決されません ・費用に
実装
Pythonについての公式ドキュメントを参考にして実装しました。

Python | Sentry for Python
Sentry's Python SDK enables automatic reporting of errors and performance data in your application.
1. sentry-sdk のインストール
pipを使ってsentry_sdkをインストールします。
pip install --upgrade sentry-sdk
2. envファイルに環境変数を用意します
SentryのアカウントやProjectを立ち上げた後、「Settings」 -> 「Projects」から該当のプロジェクトを選択し、「Client Keys (DSN)」を確認してenv環境変数として設定します。

SENTRY_DSN=< DSNの値 >
3. FastAPIに組み込み
下記のようなinit_sentry関数を定義して、FastAPIのmain.pyから呼び出しすだけです。
import sentry_sdk
from sentry_sdk import set_user
from sentry_sdk.integrations.fastapi import FastApiIntegration
from sentry_sdk.integrations.sqlalchemy import SqlalchemyIntegration
from sentry_sdk.integrations.starlette import StarletteIntegration
from app.core.config import settings
def init_sentry() -> None:
if settings.SENTRY_DSN is None:
return
sentry_sdk.init(
dsn=settings.SENTRY_DSN,
environment=settings.ENV,
integrations=[
StarletteIntegration(),
FastApiIntegration(),
SqlalchemyIntegration()
],
traces_sample_rate=1.0,
)
# 追加分のみ抜粋
from app.sentry import init_sentry
init_sentry()
FastAPIなどのASGI Webフレームワークには SentryAsgiMiddlewareというmiddlewareが提供されているほか、SQLAlchemyのためのSqlalchemyIntegrationも用意されているので、このあたりを初期化時に組み込めば簡単に使用することができます。
今回はひとまずエラー監視ができればよさそうだったので、traces_sample_rateの値は1.0で設定しました。
この設定だけでエラーが起きたときに詳細の情報やトレースバックをSentry上で確認することができるようになりました。

感想
「エラー監視ツールの導入」 と聞くと大げさに聞こえますが、想定よりもだいぶ簡単に導入することができました。 もちろんこれ以上にもパフォーマンスの計測やSlack連携、使い方に応じたカスタマイズなど、たくさんの機能が入っているようなので、完全に使いこなすためにはまだまだやることがありそうでした。
参考
いろんな事例を公開してくださっている企業や開発者の方々に感謝です。
導入について

エラー監視には Sentry が超便利! - Qiita
避けられないアプリケーションのエラー監視 アプリケーションを運用する上でエラー監視は避けて通れませんよね。 とはいえ、エラー監視のツールやサービスは今やたくさんあるので、どれを使ったらいいか迷うところでもあります。 僕はお仕事で Sentry を使っているのですが、これま...

Sentryで始めるエラー監視

Next.jsにSentryを導入した際の課題と解決策について|食べログ フロントエンドエンジニアブログ
はじめまして、2021年11月に食べログFE(フロントエンド)チームにジョインした遠藤です。 Next.jsを採用した新規プロジェクトに参画し、Sentryの導入を行いました。本記事ではSentryを導入した際の課題と解決策について記載していきます。 1. はじめに 「Sentryとは何か?」、「食べログでSentryを選定した理由」などにご興味がある方はまず下記の記事を読んでみてください。 Sentryは便利ですが以前はアプリケーションに導入するにはいくつかのファイルを作成して、エラーやパフォーマンスをトラッキングするのに様々な設定を行う必要がありました。 そこでSent
Sentryを活用するためにやっていること - Classi開発者ブログ
フロントエンドエキスパートチームのlacolacoです。 この記事ではアプリケーション監視プラットフォームのSentryをClassiの中でどのように活用しているかを少し紹介します。Sentryの運用に悩んでいる方の参考になれば幸いです。 Sentryの用途 Classiでは大きく2つの目的でSentryを利用しています。ひとつはアプリケーションのエラーの監視(以後エラー監視と呼びます)、もうひとつはWebフロントエンドのパフォーマンスの監視(以後パフォーマンス監視と呼びます)です。 Sentryは多くのプログラミング言語用にSDKがあり、Classiでは主にJavaScriptとRubyのS…
パフォーマンス
Sentryのパフォーマンス監視 - 清水川のScrapbox
Sentryのパフォーマンス監視 https://sentry.io/for/performance/ 利用するメリット 処理の重いAPI・画面・機能が把握できる DBに発行したSQLと処理時間が分かる コスト 設定は簡単 -> sentry-sdk サービス利用料 https://sentry.io/pricing/ Developer Plan (無料)では50K通知/月まで Team Pla

SentryのPerformance Monitoringを活用する

Sentryのパフォーマンス監視機能とPythonで使える便利設定 — HACK The Nikkei
Sentryのパフォーマンス監視機能の概要や、Pythonで使用する場合の便利な設定を紹介します
記事の更新をメールで受け取る
質問・リクエストを送る
記事についての質問や、取り上げてほしいテーマがあればお気軽にどうぞ。いただいた質問はブログ記事として回答し、Q&Aページで公開することがあります。