避けられないアプリケーションのエラー監視
アプリケーションを運用する上でエラー監視は避けて通れませんよね。
とはいえ、エラー監視のツールやサービスは今やたくさんあるので、どれを使ったらいいか迷うところでもあります。
僕はお仕事で Sentry を使っているのですが、これまでエラー監視ができてなかった処理に Sentry での監視を追加したらめちゃくちゃ簡単すぎて感動を覚えたのでご紹介します。
この記事では python での設置についてだけ書きますが、 Sentry が対応している言語であれば基本的に同じようなやり方で設定できるようになっていると思います。
Sentry の設定方法
1. sentry-sdk のインストール
sentry-sdk
を pip でインストールします。
$ pip install --upgrade sentry-sdk
2. Sentry の設定
以下のコードをプログラムの実行時に必ず呼ばれるどこかに記述します。
例えば設定ファイルを扱うパッケージの __init__.py
の中に書くのがいいかと思います。
import sentry_sdk
sentry_sdk.init('< DSNの値 >')
なんと、たったこれだけでエラー監視の設定ができます!
あとはエラーが起きるのを待つだけ。
※エラーが出ないのが一番いいんだけど・・・
エラー通知を試してみる
エラー通知を試すために以下のようなプログラムを実行してみます。
import logging
import sentry_sdk
# sentry sdk 初期化
sentry_sdk.init('< DSNの値 >')
# ログを出力
logging.debug('DEBUG レベルのログ')
logging.info('INFO レベルのログ')
logging.warning('WARN レベルのログ')
logging.error('ERROR レベルのログ')
# 例外
raise Exception('this is exception.')
すると Sentry の画面をみると以下のように、 ERROR レベルのログと例外の2つのエラーが通知されたことがわかります。
BREADCRUMBS
の箇所にエラーが発生するまでに出力されたログが表示されます。
例外の通知の場合は例外が発生するまでのスタックトレースも一緒に表示されます。
※ ERROR ログの場合でもスタックトレースを表示できるので、後の方にやり方を書いてます。
logger の設定がデフォルトのままだと WARN レベル以上のログしか表示されませんが、これは設定を変えれば DEBUG のログを出すこともできます。
めちゃ便利!
Sentry の issue
ERROR レベルのログ
例外
ERROR
レベルのログでもスタックトレースを表示する
以下のように logger.error()
の引数に exc_info=True
を指定すると ERROR ログの通知の場合でもスタックトレースが sentry で表示されるようになります。
import logging
import sentry_sdk
# sentry sdk 初期化
sentry_sdk.init('< DSNの値 >')
# ログを出力
logging.debug('DEBUG レベルのログ')
logging.info('INFO レベルのログ')
logging.warning('WARN レベルのログ')
logging.error('ERROR レベルのログ', exc_info=True)
# 例外
raise Exception('this is exception.')
最高じゃん!
まとめ
とりあえず sentry_sdk.init()
を呼んでおけばエラー通知が使えるというこのお手軽さがまじで最高じゃないですか???
エラー通知以外にもなんらか検知したいイベントの通知や、sentry 上で見たい情報をいろいろ付け足すこともできます。
とにかくめちゃ便利です。
強いて欠点をあげるなら、 Sentry から送られてくるエラー通知の数に上限が設定されていて、その上限を上げるには課金が必要なくらい。
でもここまでのクオリティのサービスなら課金するに値する価値が十分にあると思います。
さあ、あなたも今日から Sentry を始めよう!
https://docs.sentry.io/error-reporting/quickstart/?platform=python