Sentry:コードが壊れた瞬間を即座に捉えるOSSエラートラッキング基盤
Sentry:コードが壊れた瞬間を即座に捉えるOSSエラートラッキング基盤
ひとことでいうと
Sentry(セントリー)は、アプリケーションで起きたエラーをリアルタイムに集めて分析・通知してくれるオープンソースのデバッグ(不具合調査)プラットフォームです。「ユーザーとログは手がかりを与えてくれる。Sentryは答えを与えてくれる」というキャッチコピーのとおり、単なるログ収集にとどまらず、エラーの整形・集約・パフォーマンス計測まで一気通貫で扱えます。クラウド版(sentry.io)とサーバーへの自己インストール版の両方があるため、規模やセキュリティ要件に合わせて選ぶことができます。JavaScript・Python・Go・Rustなど20言語以上に対応しており、ウェブ・モバイル・バックエンドを問わず導入できるのが大きな特長です。
このソフトで何ができる?
Sentryが提供する機能は大きく三つに分かれます。
一つ目はエラートラッキングです。例外(プログラムが想定外の動きをした瞬間)が起きると、スタックトレース(どこで何が起きたかの詳細な記録)・操作履歴・ユーザー情報・リクエストのヘッダーなどを自動で集めます。同じ種類のエラーはまとめてグループ化してダッシュボードに表示されるので、どの問題が多く発生しているかひと目でわかります。
二つ目は**パフォーマンス監視(Insights)**です。トレーシングという仕組みを使ってリクエストの遅延箇所を特定し、データベースへのクエリや外部APIへの呼び出しなど、どこがボトルネック(処理の詰まり場所)になっているかを図で可視化します。OpenTelemetryという業界標準の形式にも対応しています。
三つ目はセッションリプレイ・ログ・アップタイム監視などの拡張機能です。フロントエンド(ブラウザ上のUI部分)でのユーザー操作を動画のように再現したり、ログとトレースをひもづけて横断的に調べたりできます。
こんな人におすすめ
-
本番環境のエラーを素早く検知したいバックエンドエンジニア — デプロイ(プログラムを公開する作業)直後の不具合をユーザーが気づく前にキャッチし、修正サイクルを大幅に短縮できます。SlackやPagerDutyへのアラート連携も標準でサポートしています。
-
フロントエンドのUXバグを再現したいWebアプリ開発チーム — セッションリプレイ機能により、エラーが起きる直前のユーザー操作を動画形式で確認できます。「手元では再現できない」問題を追うときに特に力を発揮します。
-
マイクロサービス間の遅延を可視化したいSREやプラットフォームエンジニア — 分散トレーシングに対応しているため、複数のサービスをまたぐリクエストの流れをウォーターフォール図(段階ごとの処理時間を棒グラフ状に並べた図)で確認し、ボトルネックを即座に特定できます。
インストール・使い方
Sentryのセルフホスト版(自分のサーバーで動かすバージョン)は、Dockerを使った公式手順が推奨されています。ソースコードから一からビルドするよりも、公式の getsentry/self-hosted リポジトリ(ソースコードの置き場)を使うのが最も手軽です。
Step 1: 前提ソフトウェアの確認
Docker Engine 19.03以上とDocker Compose v2が必要です。また、最低でも4 CPU・8 GB RAM・20 GBのディスク容量を用意してください。ターミナル(文字で命令を送る画面)を開いて、以下のコマンドをコピー&ペーストして実行すると、インストール済みのバージョンを確認できます。
docker --version
docker compose version
バージョン番号が表示されれば準備OKです。何も表示されない場合はDockerのインストールから始めてください。
Step 2: self-hostedリポジトリの取得と初期セットアップ
git clone https://github.com/getsentry/self-hosted.git
cd self-hosted
./install.sh
git clone はリポジトリをダウンロードするコマンドです。./install.sh を実行すると、PostgreSQL・Redis・Kafka・Zookeeper・ClickHouseなど必要なコンテナ(プログラムを動かす小さな仮想環境)のイメージをすべて自動でダウンロードします。データベースのセットアップと初期管理者ユーザーの作成まで一括で行ってくれるので、手動の作業はほとんどありません。
Step 3: サービスの起動
docker compose up -d
-d オプションはバックグラウンド(画面に出力を表示せずに裏側で動かす)での起動を意味します。デフォルトでは http://localhost:9000 でWebのUIにアクセスできます。初回ログイン後にプロジェクトを作成し、各言語向けSDKのDSN(Data Source Name:イベントの送信先URL)を取得することで、アプリへの組み込みを開始できます。
Step 4: SDKの組み込み(Pythonの例)
pip install --upgrade sentry-sdk
import sentry_sdk
sentry_sdk.init(
dsn="https://<your-key>@<your-host>/0",
traces_sample_rate=1.0,
)
# この例外は自動的にSentryに送信されます
raise ValueError("テストエラー")
pip install はPythonのライブラリをインストールするコマンドです。dsn= の部分にStep 3で取得したURLを貼り付けると、アプリで発生した例外がSentryへ自動送信されます。JavaScript・Go・Ruby・Javaなど他の言語にも同様のSDKが用意されています。
動かしてみた
今回の検証では、リポジトリのファイル構造と開発者向けの各種スクリプト群を確認しました。devenv/ ディレクトリには config.ini・sync.py・post_fetch.py などの環境同期ツールが整備されており、コード貢献者(コントリビューター)向けの開発フローが体系的にまとめられていることがわかります。
./devenv/sync.py
./devenv/post_fetch.py
./devenv/config.ini
./bin/mock-event
./bin/mock-traces
./bin/mock-replay
./bin/send_metrics.py
bin/ ディレクトリには mock-event・mock-traces・mock-replay など、ローカル開発時にイベントやトレースデータをモック(ダミーデータで代替)するスクリプトが揃っています。実際の本番トラフィックがなくてもUIや処理フローを手元で検証できる仕組みが整っており、開発・テストのしやすさへの配慮が随所に見られます。
手軽に動作確認したい場合は、前述の self-hosted リポジトリ経由のDocker Composeが最もおすすめです。セルフホスト版を動かす前に、必要スペック(4 CPU・8 GB RAM・20 GBのディスク)を事前に確認しておくと安心です。
ブラウザで試す
SentryはPostgreSQL・Redis・Kafka・ZooKeeper・ClickHouseなど多数のミドルウェアを組み合わせたフルスタックのWebアプリケーションです。そのため、ブラウザ上だけで動く簡易デモを提供するのは技術的に難しい構成になっています。
まず感触を確かめたい方には、公式のクラウド版(sentry.io)の無料プランがおすすめです。サインアップするだけですぐにホスト済みの環境で全機能を試せるため、セルフホストの前に使い心地を確かめる手段として最適です。
実践:はじめの一歩
-
まずテストエラーを送ってみる — SDKを組み込んだら、意図的に例外を発生させてSentryのダッシュボードにイシュー(エラーのまとまり)が表示されることを確認しましょう。
sentry_sdk.capture_exception(e)を使えば任意の例外を手動で送信することもできます。 -
ソースマップを設定する — JavaScriptのビルド後コードでは、ソースマップ(難読化されたコードを元のコードに対応づけるファイル)を設定すると、エラーの発生箇所が元のソースコード上で確認できるようになります。
-
リリーストラッキングを有効にする — デプロイのバージョンをSentryに通知する設定を入れると、「どのリリースから問題が始まったか」をすぐに特定できるようになります。
-
GitHubやGitLabと連携する — インテグレーション(外部サービスとの連携機能)を設定すると、エラーが発生したコード行から直接PRやコミット履歴にジャンプできます。原因調査の時間が大幅に短縮されます。
-
traces_sample_rateを段階的に調整する — パフォーマンス監視を本番環境で使う際は
traces_sample_rate=0.1(10%のリクエストだけを記録する設定)程度から始めて、サーバー負荷を見ながら少しずつ調整するのがコツです。最初から全量記録(1.0)にするとトラフィックが多い場合にコストが増えることがあります。
活用例
-
ECサイトの決済エラー監視 — 決済フロー中の例外をSentryでキャッチし、ユーザーID・カート情報などのカスタムコンテキスト(追加情報)を付与することで、再現性の高いバグレポートを自動生成できます。
-
SaaSプロダクトのリグレッション検知 — CI/CD(継続的インテグレーション・デリバリー)パイプラインにSentryのリリーストラッキングを組み込み、デプロイ直後のエラー急増を自動検知してアラートを発火させることで、問題の早期ロールバックが可能になります。
-
モバイルアプリのクラッシュ分析 — React NativeやFlutterのSDKを使えば、iOS/Androidアプリのネイティブクラッシュとシンボリケーション(難読化されたスタックトレースを元のコードに対応づける処理)を一元管理できます。
-
社内ツール・管理画面の品質向上 — 外部に公開しない社内向けシステムでも、エラーを放置せず集約して管理できます。ユーザーからの問い合わせが届く前に問題を検知して修正できるため、サポートコストの削減にもつながります。
-
学習・個人開発プロジェクトのデバッグ効率化 — 無料プランでも基本機能が使えるため、個人開発のWebアプリやAPIサーバーに組み込んで本番環境のエラーを手軽に追跡できます。ローカルでは再現しにくい環境依存の不具合を発見するのに特に役立ちます。
-
マイクロサービスのパフォーマンスボトルネック調査 — 複数のサービスが連携するシステムで、どのサービスがどれだけレスポンスを遅らせているかをトレースで可視化できます。チーム全体の開発速度向上と安定した運用の両立に貢献します。
用語とポイント解説
DSN(Data Source Name) SDKがイベントを送信するためのエンドポイントURL(送信先のアドレス)です。プロジェクトごとに自動で発行されます。かんたんに言うと、「Sentryへの宅急便の送り先住所」です。この値を間違えるとエラーがSentryに届かなくなるため、コピーミスには注意しましょう。
イシュー(Issue) 同じ種類のエラーをまとめてグループ化したものです。フィンガープリントアルゴリズム(エラーの特徴を抽出して同一かどうかを判断する仕組み)により自動で集約されます。かんたんに言うと、「同じ原因のエラーをひとまとめにした案件票」です。イシュー単位で担当者を割り当てたり、解決済みのマークを付けたりして管理できます。
ブレッドクラム(Breadcrumb) エラーが発生する直前のユーザー操作・ネットワーク通信・コンソール出力などを時系列で並べたログのことです。かんたんに言うと、「事故現場に至るまでの足跡」です。「どんな操作をしてからエラーになったか」を追跡・再現する際に非常に役立ちます。
トレース(Trace) 分散システムを横断する一連のリクエスト処理の記録です。OpenTelemetryという業界標準の形式に対応しています。かんたんに言うと、「複数のサービスをまたいだ処理の旅の記録」です。どのサービスでどれだけ時間がかかったかをウォーターフォール図で確認できます。
セッションリプレイ ユーザーのブラウザ操作をDOMスナップショット(ページの状態のコマ撮り)として記録し、後から動画のように再生できる機能です。かんたんに言うと、「ユーザーがどんな操作をしていたかのビデオ録画」です。「自分では再現できないバグ」を確認するのに強力な手段となります。
オブザーバビリティ(Observability/可観測性) システムの内部状態を外部の指標から観測・推測できるようにするという考え方です。ログ・メトリクス・トレースの三本柱から構成されます。かんたんに言うと、「ブラックボックスな機械の中身を外から透視する技術」です。Sentryはこの三本柱を統合したプラットフォームとして機能します。
スタックトレース(Stack Trace) エラーが発生した瞬間に、どのファイルの何行目のどの関数を通ってきたかを順番に記録したものです。かんたんに言うと、「エラーに至るまでの処理の経路一覧」です。Sentryはこれを見やすく整形して表示してくれるため、原因の特定が素早くなります。
シンボリケーション(Symbolication) 難読化(読みにくくする変換)やコンパイル(機械語への変換)が施されたコードのスタックトレースを、元のソースコードの行番号と対応づける処理です。かんたんに言うと、「暗号化されたエラー記録を人間が読める形に翻訳すること」です。モバイルアプリやビルド済みのJavaScriptを調査する際に欠かせない仕組みです。
サンプリングレート(traces_sample_rate)
パフォーマンスデータをどの割合のリクエストに対して記録するかを決める設定値です。1.0 で全量、0.1 で10%を記録します。かんたんに言うと、「10件のアクセスのうち何件を詳しく記録するかの割合」です。本番環境ではサーバー負荷やコストを考慮して、適切な値に調整することが推奨されます。
エラーの早期発見からパフォーマンスのボトルネック特定、モバイルクラッシュの分析まで、Sentryは幅広いシーンで活躍します。ぜひ本番環境のエラー監視や、個人開発プロジェクトのデバッグ効率化などに活用してみてはいかがでしょうか。