Sentryについて特徴を整理してみた

# 背景・目的
Sentryについて触れる機会がありましたので、基本的な知識等を整理します。
また、アカウントを作成してみます。

# まとめ
下記に特徴をまとめます。

|特徴|説明|
|:--|:--|
|Sentryの概要|ソフトウェア監視ツール<BR><BR>エラー追跡からパフォーマンス監視まで、コードレベルの観測性を提供し、問題を簡単に診断する<BR>アプリケーションコードの健全性を継続的に学習できるようにする|
|Sentryの機能|・エラー監視<BR>・トレース<BR>・プロファイリング<BR>・パフォーマンス監視<BR>・リリースヘルスモニタリング<BR>・LLMモニタリング<BR>・定期的なジョブ監視<BR>・環境をまたいだデータの可視性<BR>・コードカバレッジ<BR>・シームレスな開発者ワークフロー<BR>・100 を超えるプラットフォームの SDK サポート|
|料金プラン|無料の開発者プランが 1 つ<BR>3 つの有料プラン<BR>・チーム<BR>・ビジネス<BR>・エンタープライズ|

# 概要
## 製品ウォークスルー
下記を基に整理します。

https://docs.sentry.io/product/

### Sentryとは何ですか?
> Sentry は、開発者がコード関連の問題を特定して修正するのに役立つソフトウェア監視ツールです。エラー追跡からパフォーマンス監視まで、Sentry はコードレベルの観測性を提供し、問題を簡単に診断し、アプリケーション コードの健全性を継続的に学習できるようにします。

- ソフトウェア監視ツール
- エラー追跡からパフォーマンス監視まで、コードレベルの観測性を提供し、問題を簡単に診断する
- アプリケーションコードの健全性を継続的に学習できるようにする

### Sentry は何に役立ちますか?
> フルスタック アプリケーション監視ソリューションとして、Sentry は、アプリをスムーズに実行し続けるために役立つ次の機能を提供します。

- アプリをスムーズに実行し続けるために機能を提供する

#### エラー監視
> Sentry のエラー監視機能により、問題の根本原因を迅速に特定し、何が問題なのかを理解して修正できるようになります。
> Sentry は、処理されない例外 (エラー) を自動的にキャプチャします。次に、類似のエラーを問題としてグループ化し、より効率的にトリアージして管理できるようにします。


> - Web プロジェクトを監視している場合は、ユーザーがアプリで体験したことを再生し、ソース マップを使用してそのエラーを問題のあるコード行に関連付けることができます。
> - フロントエンドとバックエンドの両方に Sentry を設定すると、分散トレースを使用して、対象のイベントに至るまでの一連のイベント (フロントエンドとバックエンドの両方) を確認できるようになります。
> - さらに、統合を設定してソース コードをリンクすると、Sentry は疑わしいコミットやスタック トレースを表示して問題のあるコード行を表示したり、コミットの作成者に基づいて問題の担当者を提案したりできるようになります。


- エラー監視機能により、エラーを自動的にキャプチャする
- 処理されない例外をキャプチャし、類似のエラーを問題としてグループ化し、より効率的にトリアージして管理できるようにする


#### トレース
> トレースは、スタックのさまざまなコンポーネント間の相互作用を調べることで、フロントエンドからバックエンド、およびシステム間にわたるアプリケーションの接続ビューを提供します。
分散トレースを使用すると、速度低下の原因を詳しく調べてコードのパフォーマンスを最適化できます。分散トレースはトランザクションとスパンで構成され、個々のサービスと操作のパフォーマンスを測定します。つまり、読み込みが遅いページを、パフォーマンスの低い API 呼び出しまで簡単に追跡できるということです。

- トレースは、スタックの様々なコンポーネント間の相互作用を調べることで、FEからBE、システム感に渡るアプリケーションの接続ビューを提供する
- 分散トレースを使用すると、速度低下の原因を詳しく調べてコードのパフォーマンスを最適化できる
    - 分散トレースはトランザクションとスパンで構成され、個々のサービスと操作のパフォーマンスを測定する
    - 読み込みが遅いページをパフォーマンスの低いAPIコールまで簡単に追跡できる

#### プロファイリング
> Sentryプロファイリングは、運用中のアプリケーションのパフォーマンスに関するコードレベルの洞察を提供するため、問題のあるコード行をより早く見つけて修正できます。アプリケーションが実行されているすべての環境でコードをプロファイリングするため、どの関数がスパンの遅延の原因になっているかをすぐに確認できます。

- プロファイリングは、運用中のアプリケーションのパフォーマンスに関するコードレベルのインサイトを提供する
- 問題のあるコード行をより早く見つけて修正できる
- アプリケーションが実行されているすべての環境でコードをプロファイリングする
- どの関数がスパンの遅延の原因になっているかをすぐに確認できる

#### パフォーマンス監視
> パフォーマンス監視機能は、アプリケーションのパフォーマンスを追跡し、スループットやレイテンシなどの指標を測定し、複数のサービスにわたるエラーの影響を確認するのに役立ちます。

> - Sentry は、時間の経過とともにパフォーマンスが大幅に変化したトランザクションを明らかにすることで、傾向が大きな問題になる前にそれを発見し、対処するのに役立ちます。
> - Sentry は、Web バイタル、モバイル バイタル、クエリ、HTTP リクエストなど、さまざまなカテゴリでアプリのパフォーマンスを監視するのに役立つ分析情報を提供します。イベント サンプルを詳しく調べて、パフォーマンスの変化を調査できます。

- パフォーマンス監視機能は、下記を実施し、複数のサービスにわたるエラーの影響を確認するのに役立つ
    - アプリケーションのパフォーマンスを追跡
    - スループットやレイテンシなどの指標を測定
- 時間の経過とともにパフォーマンスが大幅に変化したトランザクションを明らかにすることで、傾向が大きな問題になる前にそれを発見し、対処するのに役立つ
- Web バイタル、モバイル バイタル、クエリ、HTTP リクエストなど、さまざまなカテゴリでアプリのパフォーマンスを監視するのに役立つ分析情報を提供
    - ベント サンプルを詳しく調べて、パフォーマンスの変化を調査できる

#### リリースヘルスモニタリング
> Sentry にリリースの可視性を与えることで、リリースが劣化し始めた瞬間を把握し、迅速に対処できるようになります。リリース全体をリアルタイムで可視化できるため、クラッシュのないセッション、バージョンの採用、障害率などの主要な指標を確認できます。
> リリースは Sentry の残りの部分と統合されているため、リリース固有の問題を解決できるだけでなく、エラーやパフォーマンスの問題がリリースによってどのように影響を受けたかを直接確認できます。

- リリースの可視性を与えることで、リリースが劣化し始めた瞬間を把握し、迅速に対処できるようになる
- リリース全体をリアルタイムで可視化できるため、クラッシュのないセッション、バージョンの採用、障害率などの主要な指標を確認できる
- リリースは Sentry の他と統合されているため、リリース固有の問題を解決できるだけでなく、エラーやパフォーマンスの問題がリリースによってどのように影響を受けたかを直接確認できる

#### LLMモニタリング
> LLMモニタリング機能を使用すると、アプリのより広いコンテキスト内で AI パイプラインに関する洞察を得ることができます。OpenAI などの AI プロバイダーも使用しているプロジェクトに Sentry を pip install すると、Sentry はトークンの使用状況、プロンプト、モデル ID などの有用なメトリクスを自動的に取得し、LLM モニタリング ダッシュボードに送信します。

- アプリのより広いコンテキスト内でAIパイプラインに関するインサイトを得ることができる
- OpenAI などの AI プロバイダーも使用しているプロジェクトに Sentry を pip install すると、Sentry はトークンの使用状況、プロンプト、モデル ID などの有用なメトリクスを自動的に取得し、LLM モニタリング ダッシュボードに送信する

#### 定期的なジョブ監視
> Cron モニターを使用すると、Sentry でスケジュールされた定期的なジョブの稼働時間とパフォーマンスを監視できます。実装すると、エラーの解決、タイムアウトの検出、サービスの中断の防止に役立つアラートとメトリックを取得できるようになります。

- Cron モニターを使用すると、Sentry でスケジュールされた定期的なジョブの稼働時間とパフォーマンスを監視できる
- 実装により、サービスの中断の防止の役立つ下記のアラートとメトリックを取得できる
    - エラーの解決
    - タイムアウトの検出

#### 環境をまたいだデータの可視性
> Discover は、エラー データを構築して強化することで、環境全体のデータの可視性を提供します。クエリを実行してシステム全体の健全性に関する洞察を獲得し、重要なビジネス上の質問に対する回答をすべて 1 か所で得ることができます。また、独自のダッシュボードを構築して、アプリにとって最も重要なものを監視することもできます。

- Discover は、エラーデータを構築して強化することで、環境全体のデータの可視性を提供する
- クエリを実行してシステム全体の健全性に関するインサイトを獲得し、重要なビジネス上の質問に対する回答をすべて 1 か所で得ることができる
- 独自のダッシュボードを構築して、アプリにとって最も重要なものを監視することもできる

#### コードカバレッジ
> Codecov は、開発者にテスト コード カバレッジを提供します。テスト、カバレッジ、コードの信頼性の向上に役立ち、エラーを監視しながら Sentry で直接テスト カバレッジの分析情報を取得できます。

- Codecovは、開発者にテストコードカバレッジを提供する
- テスト、カバレッジ、コードの信頼性の向上に役立つ
- エラーを監視しながら Sentry で直接テスト カバレッジの分析情報を取得できる

#### シームレスな開発者ワークフロー
> Sentry は、シームレスな開発者ワークフローをサポートするために、次のような多くの統合を提供します。

> - GitHub、GitLab、Azure DevOps、Bitbucket を使用したソース コード管理、コード マッピング、コード所有者、疑わしいコミット。
> - Jira、Github、その他多くのツールを使用した問題追跡。
> - Slack、Discord、PagerDuty などによるアラートと通知。

- 下記の多くの統合を提供する
    - GitHub、GitLab、Azure DevOps、Bitbucket を使用したソース コード管理、コード マッピング、コード所有者、疑わしいコミット
    - Jira、Github、その他多くのツールを使用した問題追跡
    -  Slack、Discord、PagerDuty などによるアラートと通知

#### 100 を超えるプラットフォームの SDK サポート
> Sentry は30 以上のコーディング言語を含む100 以上のプラットフォームとフレームワークをサポートしているため、アプリケーションがどのようなプラットフォームで構築されているかに関係なく、エラーやパフォーマンスの問題を追跡できます。当社の SDK が対応しているため、わずか数行のコードで Sentry を使い始めることができます。

- 30 以上のコーディング言語を含む100 以上のプラットフォームとフレームワークをサポート
- アプリケーションがどのようなプラットフォームで構築されているかに関係なく、エラーやパフォーマンスの問題を追跡できる
- SDK が対応しているため、わずか数行のコードで Sentry を使い始めることができる

## 概念とリファレンス
下記を基に整理します。

https://docs.sentry.io/concepts/

### コンセプト
#### 主な用語と機能
##### キーワード
###### アラート
アラートは、特定のアラート ルール条件が満たされたときに通知を送信することで、コードの問題をリアルタイムで知らせる
カスタマイズ可能なしきい値と統合を備えた複数のタイプのアラートが利用可能

###### 添付ファイル
エラーイベントに関連する構成ファイルやログ ファイルなどの追加ファイルが保存される

###### データ
- Sentry に送信するすべてのもの
- これには、イベント (エラーまたはトランザクション)、添付ファイル、イベント メタデータが含まれる

###### 分散トレース
トレースに複数のサービスでの作業が含まれる場合、トレースはそのサービス全体に分散されるため、分散トレースと呼ばれる

###### DSN
- データ ソース名
- DSN は Sentry SDK にイベントの送信先を指示し、イベントが正しいプロジェクトに関連付けられるようにする
    - プロジェクトを作成すると、Sentry によって DSN が自動的に割り当てられる
###### environment
- SDK に追加できる Sentry 対応のタグ
- development、testing、staging、productionなど、コード デプロイメントの命名規則を参照することを目的としている
- environmentは、他の用途の中でも、問題やトランザクションをより適切にフィルター処理するのに役立つ

###### エラー
- エラーと見なされるものはプラットフォームによって異なる
- 一般的に、例外のように見えるものがあれば、Sentry でエラーとしてキャプチャできる
- Sentry は、プラットフォームに応じて、エラー、キャッチされていない例外、未処理の拒否、およびその他の種類のエラーを自動的にキャプチャする

###### イベント
エラーまたはトランザクション

###### 問題
- 問題は、類似したエラーやパフォーマンスの問題をグループ化したもの
- すべてのイベントには、フィンガープリントと呼ばれる一連の特性があり、Sentry はこれを使用してイベントをグループ化する
- たとえば、コードの同じ部分によってエラー イベントがトリガーされると、Sentry はそれらのイベントをグループ化する
- イベントを問題にグループ化すると、問題がどのくらいの頻度で発生しているか、また、何人のユーザーが影響を受けているかを確認できる

###### パフォーマンス監視
- パフォーマンス監視とは、アプリケーションのパフォーマンスを追跡し、送信されているトランザクションの数や特定のトランザクションのすべての発生時の平均応答時間などのメトリックを測定すること
- これを行うために、Sentry はトランザクションとスパンで構成される分散トレースをキャプチャし、個々のサービスとそれらのサービス内の操作を測定する


###### プロジェクト
- プロジェクトは Sentry のサービスまたはアプリケーションを表す
- アプリケーションで使用される特定の言語またはフレームワークのプロジェクトを作成できる
    - たとえば、API サーバーとフロントエンド クライアントに別々のプロジェクトを作成できる
- プロジェクトを使用すると、組織内の個別のアプリケーションにイベントを関連付け、組織内の特定のユーザーとチームに責任と所有権を割り当てることができる

###### リリース
- リリースとは、環境にデプロイされたコードのバージョン
- リリースについて Sentry に通知すると、それに関連する新しい問題や回帰を特定し、次のリリースで問題が解決されているかどうかを確認し、ソースマップを適用できる


###### リリースの健全性
リリースの健全性データは、クラッシュやバグがユーザー エクスペリエンスに及ぼす影響についての洞察を提供し、新しい問題ごとに傾向を明らかにする

###### sentry.io
- SaaS 顧客向けの Sentry のユーザー インターフェイス。SDK によってキャプチャされたイベント データが視覚化される(自己ホスト型ユーザーの場合、ユーザー インターフェイスは会社の内部ドメインにある)

###### Sentry SDK
- アプリケーション監視用の Sentry のプログラミング言語/フレームワーク固有のライブラリ
- アプリケーションに当社の SDK のいずれかを追加すると、アプリケーションからのイベント データがキャプチャされて Sentry に送信され、エラー レポートとパフォーマンス レポートを提供できるようになる

###### span
- スパンはトレースを構成する基本単位
- 親子スパンの複数のグループが Sentry のトレースを構成し、trace_id を共有する
- これにより、問題の根本原因をより早く突き止めることができる

###### チーム
- チームは Sentry プロジェクトに関連付けられており、そのメンバーはグループとして問題通知を受け取る

###### トレース
トレースは、ページの読み込み、アプリケーション内でユーザーが何らかのアクションを完了したインスタンス、バックエンドの cron ジョブなど、測定または追跡する操作全体の記録。

###### トランザクション
- トランザクションは、ページの読み込み、ページのナビゲーション、非同期タスクなど、測定または追跡する操作をサポートするために呼び出されるサービスの単一のインスタンスを表す
- トランザクション イベントは、トランザクション名によってグループ化される


##### 主な特徴
###### 問題
- アプリケーション内のグループ化された問題に関する情報を表示する。
- ここから、問題の詳細ページに移動して、問題をより詳細に確認できる

###### プロジェクト
- メンバーであるプロジェクトをチーム別に一覧表示し、プロジェクトの概要を表示する
- ここから各プロジェクトのプロジェクト詳細ページに移動して、より詳細な情報を表示できる

###### 探索
- Sentry は、アプリケーションのトレース、メトリック、プロファイル、リプレイ、イベントなど、アプリケーションのデータを検索および調査する複数の方法を提供し、問題をより迅速かつ簡単にデバッグするために必要な情報を取得する
- Discover ページを使用して、環境全体のイベントをクエリし、結果を視覚化し、システム全体の健全性に関する洞察を獲得する

###### Insights
- Sentry は、リクエスト、アセット、キャッシュ、キューなど、アプリのパフォーマンスのさまざまな部分を改善するためにサービスレベルで機会を特定するのに役立つ洞察を提供する
- Insights の見出しの下にあるモジュールは、プロジェクトがそのカテゴリでどのように実行されているかの概要を提供し、サンプル イベントとそのトレースを確認して潜在的な問題を診断する機能も提供する

###### パフォーマンス
- トランザクション データを検索または参照できるsentry.ioのメイン ビュー
- このページには、トランザクションや傾向を視覚化するグラフと、関連するトランザクションを表示して詳細情報にドリルダウンできる表が表示される

###### アラート
新しいアラート ルールを作成したり、既存のアラート ルールを管理する

###### ダッシュボード
- 複数のプロジェクトにわたるエラーとパフォーマンス データをナビゲートできるようにすることで、アプリケーションの健全性の幅広い概要を提供する
- ダッシュボードは 1 つ以上のウィジェットで構成され、各ウィジェットは 1 つ以上のDiscoverまたはIssuesクエリを視覚化する

###### リリース
- 各リリース バージョン、関連プロジェクト、各リリースの採用段階、各コミットの作成者、およびクラッシュのないユーザーの割合やクラッシュのないセッションの割合などのリリースの健全性データの概要を提供する
- リリースページに直接移動することも、問題の詳細ページから「最終確認」の下にリストされているリリース ID を選択して移動することもできる

## 価格と請求
下記を基に整理します。

https://docs.sentry.io/pricing/

### 用語
- ボリューム
    - ボリュームとは、イベントと添付ファイルの合計数、または組織から送信されたデータの合計量を指す
- 予約ボリューム
    - 月単位または年単位で事前に割引料金で支払う事前に決められたデータ量
    - 基本プランには、データ カテゴリごとに設定されたボリューム量が含まれている
- 従量課金制の予算
    - 従量課金制 (PAYG) の予算を設定すると、超過分がカバーされ、予約ボリュームを使い果たした後も監視が失われることがなくなる
    - 毎月の超過分に対して支払う最大額

### 価格設定: 仕組み
- 処理されたデータの量に基づいて請求する
- 各有料プランには、以下の月間イベント量が事前に設定されており、料金に含まれている
    - 50,000 個のエラー
    - 10Mスパン
    - 50回のリプレイ
    - 1 個の cron モニター
    - 1GBの添付ファイル
- 予約済みの追加データ量を割引価格で支払うこともできる
    - 未使用の予約量は、各請求月の末に期限切れになる
    - データ カテゴリの潜在的な超過分をカバーするために使用できる従量課金制の予算を確保することもできる
    - 従量課金制の予算は、予約量が使い果たされた場合にのみアクセスされ、使用した分 (設定した最大量まで) に対してのみ請求される
    - 予約ボリュームと従量課金の予算を使い切った後に送信されたデータは破棄され、課金されない
    - 請求サイクルの残りの期間の監視が失われることを意味する
        - 予算が使用量と一致している

### 請求サイクル
- Sentry では、有料プランと予約ボリューム用と従量課金制使用量用の 2 つの異なる請求サイクルが使用される
    - サブスクリプションの請求サイクル
        - 有料プランと予約ボリュームの請求サイクル
        - 月単位または年単位で請求を選択できる
    - 従量課金制の請求サイクル
        - 従量課金制の使用量に対する請求サイクル
        - 月単位で請求される

### プランと無料トライアル
Sentry には、下記のプランがある
- 無料の開発者プランが 1 つ
-  3 つの有料プラン
    - チーム
    - ビジネス
    - エンタープライズ

# 実践
1. [sentry.io](https://sentry.io/welcome/)から「GET STARTED」をクリックします
1. 下記を入力します
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/cc8b4a8d-4ac5-9c40-751b-4f089bd8889a.png" width=400 />

1. 画面が表示されるので、「オンボーディングをスキップします」をクリックします
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/c110e893-eef6-ac3d-473a-a23fecfd1880.png" width=400 />

1. トップページが表示されます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/67c79c4e-87d7-1da0-a361-5a9b5d3695bd.png)

## Settings
### MFA
1. ナビゲーションペインで「Settings」をクリックします
1. 画面上部の「General」をクリックします
1. 「My Account」をクリックします
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/4887a36d-d4ae-320c-3e87-1fd4f1dc68a8.png" width =300 />

1. Securityをクリックします
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/cc288f77-bfb2-c8bf-da60-68ee76cb4d1f.png" width= 200 />

1. 認証用アプリで「Add」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/5e9f3df2-0493-cccd-85f2-35bba54c7098.png)

1. 認証用アプリでQRコードを読み取りConfirmをクリックします
1. Get Recovery Codesをクリックします
1. 「コードを見る」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/11a0f699-dd91-e1cc-b3e3-a2373a1e2aea.png)
1. リカバリーコードをダウンロード or コピーします

## Projects
1. ナビゲーションペインで「Quick Start」をクリックします
1. Create a projectで「Start」をクリックします
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/733b2b85-b89b-deef-8987-26f3e73a51dc.png" width= 300 />


1. 下記を入力し、「Create Project」をクリックします
    - platform
    - alert frequency
    - Project name
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/3c923e18-9783-f288-6205-740833ed7c13.png)

1. できました
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/2659a563-5a2b-d93d-327f-8c96bd7a43be.png" width=400 />


# 考察
今回は、Sentryの特徴をまとめてアカウントの作成〜プロジェクトの作成まで行いました。
今後は、実際に監視を入れて機能を試してみたいと思います。


# 参考
https://sentry.io/