概要
Sentryは、PythonやJavaScript、Ruby、PHPなど、様々な言語で実行時に捕捉されなかった例外を自動的にトラップし、オンラインで閲覧可能にするツールです。
元々はDisqusの社内で開発され(当時の社内ブログ)、その後、オープンソースとして公開されました。
Sentryは、オープンソースなので、比較的簡単にLinuxサーバやHerokuなどのPaaS上にも入れることが出来るほか、Webサービスとしても提供されており、ユーザ登録することで使用することも出来ます。
Sentryを使うと、特に500エラーなど、ユーザが実際に目にする例外をオンラインで簡単に監視することが出来るため、非常に便利です。
サービスへの登録
今回は、Webサービス版を使用してみたいと思います。Webサービス版は、個人で使用し、秒間2回以下の例外を捕捉する場合には、無料で使用することが出来ます。
まずは、こちらからユーザ登録を済ませ、自分のチームを作成します。
次に、新しいプロジェクトを作成し、Platformで「Flask (Python)」を選択します。
これで、オンラインでの登録処理は完了です。
プログラムへの導入
まず、必要であれば、virtualenvを作成します。
% virtualenv --no-site-packages .venv
% source .venv/bin/activate
次に、必要なライブラリを導入します。
% pip install flask raven blinker
そして、以下のように、エラーを出すだけの機能を持ったFlaskアプリケーションに、導入してみます。
from flask import Flask
app = Flask(__name__)
from raven.contrib.flask import Sentry
app.config['SENTRY_DSN'] = 'https://[APP_CODE]@app.getsentry.com/20258'
sentry = Sentry(app)
@app.route("/err")
def err():
raise RuntimeError('Error')
if __name__ == "__main__":
app.run()
([APP_CODE]はWebサービスの管理画面で取得可能なURLに置き換えてください)
必要はコードは三行程度です。あとはRavenが自動的に例外を捕捉し、サーバサイドに送信してくれます。
実装状況の確認
作成したFlaskアプリケーションを実行し、curlで、/errにアクセスしてみます。
% python test.py
% curl localhost:5000/err
そうすると、上で登録した管理画面上に例外をあらわした項目が下記のように作成されているはずです。
さいごに
Sentryは、実行時エラーを全て捕捉して管理することの出来る非常に優れたツールだと思います。無料で簡単に導入可能ですし、皆さんも導入検討されてみてはいかがでしょうか。