-2

私のpython/djangoサイトでは、進行中の多数のエラー/ハートビート/予期しないイベントのステータスを更新する「ダッシュボード」を構築する必要があります。

Django サイトから管理者アカウントにメールを送信することで現在追跡している「イベント」にはいくつかの種類があります
。数時間ごとにファイルをさまざまなサービスや他のマシンに同期し、これがうまくいかない場合はエラー メールを送信します。
2) 起こるべきことが実際に起こったとき。アイテム #1 のイベントがひどく失敗して、電子メールを送信することさえできない場合があります (試してみてください: 例外: イベントの周りは常に機能するはずですが、物事が crontab から削除される可能性があります。エラーメールさえ届かず、成功/ハートビートメールがない場合、発生するはずだったことが発生しなかったことがわかります。)
3) 予期せぬことが起こったとき。バックエンド操作がどのように実行されるかについて多くの仮定を立てました。これらの仮定のいずれかに違反した場合 (たとえば、同じ電子メール アドレスを持つ 2 人のユーザーが見つかった場合)、それについて知りたいと考えています。これらのイベントは必ずしもエラーではなく、調査すべき警告のようなものです。


そこで、python/django から簡単に更新できるダッシュボードを構築して、これらすべてのタイプのアクティビティを俯瞰できるようにして、週に何百通ものメールを送信するのをやめたいと考えています (これはすでに管理不能です)。

4

2 に答える 2

3

Web ページに出力する基本的なロギング システムを作成したいようですね。

たとえば、サイトで何かが発生するたびに記録systemeventsを作成するような単純なアプリを作成できます。Eventシグナルフックを追加して、サイトの残りの部分のどこにでも次のようなコードを記述できるようにします。

from systemevents.signals import record_event

...

try:
    # code goes here
except Exception, inst:
    record_event("Error occurred while taunting %s: %s" % (obj, inst,), type="Error")
else:
    record_event("Successfully taunted %s" % (obj, ), type="Success")

その後、これらのイベントを一覧表示するビューを簡単に作成できます。

ただし、これは非常に問題のある複雑なレイヤーを追加していることに注意してください。エラーがデータベースにある場合はどうなりますか? その後、エラー イベントを記録しようとするたびに、別のエラーが発生します。

組み込みのロギング システムのようなものを使用してテキスト ベースのログ ファイルを作成し、そのテキスト ファイルをインポートして、より読みやすい方法でレイアウトできるものを作成する方がはるかに優れています。

もう 1 つのヒント: Django が例外を処理する方法を変更するには、500 エラー用のカスタム ビューを作成する必要があります。を使用する場合systemeventsは、次のように記述します。

from django.views.defaults import server_error
def custom_error_view(request)
    try:
        import sys
        type, value, tb = sys.exc_info()    
        error_message = "" # create an error message from the values above
        record_event("Error occurred: %s" % (error_message,), type="Error")
    except Exception:
        pass
    return server_error(request)

このコードの正確性はテストされていないことに注意してください。あくまでも目安です。

于 2010-11-24T20:21:28.920 に答える
2

django-sentry を見てみましたか? http://dcramer.github.com/django-sentry/

于 2010-11-24T17:17:04.440 に答える