はじめに
エラー監視の文脈で紹介されることが多い Sentry (https://sentry.io/ 以降、Sentry) ですが、Performance Monitoring の機能を利用してさくっと Web API の ボトルネックを探せた感動を共有したいです 🤗
"さくっと" には前提があります。
詐欺にならないように App Monitoring Service と記載しましたが、 OSS の紹介を期待して読み始めた皆さん、ごめんさい 🙇🙇♀️
"さくっと" の前提 😈
Sentry の契約
プランはこちらです。
私の場合、自社で Team プランに入っていましたが、一番下のプランから Performance Monitoring の機能が使えるみたいです。
HTTP Frame Work が Sentry に対応しており、かつ モニタリングに対応したバージョンの SDK に対応している
対応言語・プラットフォームはこちらです。
私の場合 プロジェクトの FastAPI (Python Frame Work) のバージョンに依存した SDK だと Monitoring データの蓄積が始まらなかったので、FastAPI をバージョンアップする必要がありました。
SDK を install してトラック用コードを埋め込む
FastAPI の場合は本当にこれだけのコードを書くだけで Monitoring データの蓄積が始まりました。
import sentry_sdk
sentry_sdk.init(
dsn="https://examplePublicKey@o0.ingest.sentry.io/0",
traces_sample_rate=1.0,
)
ボトルネックをどのように探すのか
Performance Monitoring の画面に表示されている event_id (リクエスト単位のid) をクリックすると以下のような画面が表示され、http 通信・DB のどこに時間がかかっているかのタイムラインを表示してくれます。
上記スクリーンショットでわかるように、 ORM で 1 + N な問い合わせが速度低下の原因になっていることを確認できました。
所感
たった数行のコードを追加するだけで、発行されているSQLも含めた情報を出してくれることに驚きました。前提さえ揃っていればいればすぐにボトルネックの当てがつくので、是非試していただきたいです。
以上、共有でした。