モニタリングツールのSentryを導入してみた

# はじめに
自作アプリを運用するにあたってエラーの検知やパフォーマンス状況を監視するためにモニタリングツールを導入することになった(なっていはいないが、、、）

そもそもChatGPTに提案されました
```
...エラーハンドリング、ロギング、モニタリングなど、さらに多くの要素を考慮する必要があります。
```

エラーハンドリング、ロギングなら日々実装しているので問題ないですが
**モニタリング**の文字には？？？でした

ChatGPTにモニタリングのツールを聞いて、それをネットで調べていたところ
モニタリングツールは人気2トップがありました

それが
・Sentry
・New Relic

Sentryはエラーの検知に向いていて、New Relicはパフォーマンスを監視するのに向いています

今回はパフォーマンスの重要度を低くしているため安定運用のためにSentryを選択しました。
ChatGPTさんは両方取り入れるのが良いとのことでしたが、実際に両方取り入れている企業様はいらっしゃるんでしょうか？

Python(FW:Django)製のアプリにSentryを導入していきます

・Sentry公式ドキュメント

https://docs.sentry.io/platforms/python/guides/django/?utm_campaign=Google_Search_Brand_SentryKW_ROW_Alpha&utm_content=g&utm_id=%7B20403208976%7D&utm_medium=cpc&utm_source=google&utm_term=sentry&original_referrer=https%3A%2F%2Fsentry.io%2F

# Sentryの導入手順
1.会員登録

https://sentry.io/signup/?original_referrer=https%3A%2F%2Fwww.google.com%2F&utm_campaign=Google_Search_Brand_SentryKW_ROW_Alpha&utm_content=g&utm_id=%7B20403208976%7D&utm_medium=cpc&utm_source=google&utm_term=sentry
![スクリーンショット 2023-09-09 20.40.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603047/bf159dfb-4272-b154-0090-58a43383495b.png)


今回は無料会員にしました
ちなみに、料金プランはこちら(Google翻訳しています)
![スクリーンショット 2023-09-09 20.37.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603047/952fa133-107a-3c10-6f20-836cf5501783.png)
https://sentry.io/pricing/?original_referrer=https%3A%2F%2Fwww.google.com%2F&utm_campaign=Google_Search_Brand_SentryKW_ROW_Alpha&utm_content=g&utm_id=%7B20403208976%7D&utm_medium=cpc&utm_source=google&utm_term=sentry

2.メール認証
送られてきたConfirm Emailのメールを確認します

ここからはSentryのWebサイトを操作していきます（Google翻訳しています）
3.「セントリーをインストールする」の「始める」をクリックします
![screencapture-self-0734100ae-sentry-io-onboarding-welcome-2023-09-09-20_26_23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603047/c134260f-5a6a-1b05-a5d4-fd26b96f943a.png)

4.Django(ジャンゴ)を選択します
![screencapture-self-0734100ae-sentry-io-onboarding-select-platform-2023-09-09-20_26_56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603047/b01790a9-44e9-cf68-d6b2-92590149310f.png)

5.SDKを設定します
![screencapture-self-0734100ae-sentry-io-onboarding-setup-docs-2023-09-09-20_46_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603047/c83e6fa6-314c-f3c9-8f52-85e0f0427238.png)


SentryのSDKをインストール
```
pip install --upgrade sentry-sdk
```

setting.pyに追加します
```python:setting.py
import sentry_sdk
from sentry_sdk.integrations.django import DjangoIntegration

sentry_sdk.init(
    dsn="https://xxx.your-dsn",
    integrations=[DjangoIntegration()],
    # If you wish to associate users to errors (assuming you are using
    # django.contrib.auth) you may enable sending PII data.
    send_default_pii=True,
    # Set traces_sample_rate to 1.0 to capture 100%
    # of transactions for performance monitoring.
    # We recommend adjusting this value in production.
    traces_sample_rate=1.0,
    # Set profiles_sample_rate to 1.0 to profile 100%
    # of sampled transactions.
    # We recommend adjusting this value in production.
    profiles_sample_rate=1.0,
)
```

urls.pyを編集してエラーを発生させてSentryに検知させます
```python:urls.py
# ...
division_by_zero = 1 / 0
# ...
urlpatterns = [
    # ...
    path('sentry-debug/', division_by_zero),
]
```

VScodeなどのエディタで編集しており、runserverを実行している時にコンソールに以下が出力されると思います
```
    division_by_zero = 1 / 0
                       ~~^~~
ZeroDivisionError: division by zero
```

SentryのWebサイトを見ると
画面下部のメッセージが「エラー待ち」の赤文字から「エラーを受信しました」の緑文字に変わっています。
![スクリーンショット 2023-09-09 21.04.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603047/b5c8ce83-9207-ae69-d511-aa0f305f3f5a.png)

以上

アプリが実行中にエラーが発生するとSentryの管理画面にエラーの情報が表示されます
サンプルがてら置いておきます
![20220630130955.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603047/b4e4463a-7207-17d1-cd63-fd3d142feae4.png)
(https://techblog.cartaholdings.co.jp/entry/archives/4091 より引用)

# おわりに
裏タイトルは「Djangoアプリに監視ツールSentryを導入した」になるんでしょうか
Sentryはリアルタイムにエラーをキャッチし、エラーの情報を知らせてくれます。
これにより、エンジニアはエラーの原因を迅速に特定し、修正することができます。
初心者でも最初のセットアップから実装まで短い時間でできたので導入の手間は軽いと思います。
エラーの対応を迅速にしてUXを向上させましょう！