Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
31
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

@ikuyamada

Sentryを使って、Webアプリで起きた例外をキャプチャしてオンラインで見られるようにする

概要

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アプリケーションに、導入してみます。

test.py
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

そうすると、上で登録した管理画面上に例外をあらわした項目が下記のように作成されているはずです。

default   Sentry.png

さいごに

Sentryは、実行時エラーを全て捕捉して管理することの出来る非常に優れたツールだと思います。無料で簡単に導入可能ですし、皆さんも導入検討されてみてはいかがでしょうか。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
31
Help us understand the problem. What are the problem?