私はSentry(djangoプロジェクトで)を使用していますが、エラーをどのようにして適切に集めることができるかを知りたいと思います。特定のユーザーアクションをエラーとしてログに記録しているため、基になるシステム例外はなく、culprit
属性を使用してフレンドリエラー名を設定しています。メッセージはテンプレート化されており、共通のメッセージ(「User 'x'は 'y'」のためアクションを実行できませんでしたが)は全く同じではありません(異なるユーザー、異なる条件)。Sentryはどのようにエラーを集計しますか?
Sentryは、同じ例外としてエラーを集計するかどうかを判断するために、いくつかの属性セットを使用していますが、コードを見ても、どうやって解決するかはわかりません。
誰でもコードを詳しく調べて、私が望むように集約を管理するために設定する必要があるプロパティを教えてもらえますか?
[UPDATE 1:イベントのグループ化]
この行はsentry.models.Groupに表示されます意味になり
class Group(MessageBase):
"""
Aggregated message which summarizes a set of Events.
"""
...
class Meta:
unique_together = (('project', 'logger', 'culprit', 'checksum'),)
...
- 私は、現時点では設定していたプロジェクト、ロガーと犯人を - 問題をchecksum
です。私はさらに調査するつもりですが、「チェックサム」はバイナリ同値性を示唆しています。これは決して動作しません。同じ例外のインスタンスをdifferenct属性でグループ化する必要がありますか?
[UPDATE 2:イベントのチェックサム]:
def get_checksum_from_event(event):
for interface in event.interfaces.itervalues():
result = interface.get_hash()
if result:
hash = hashlib.md5()
for r in result:
hash.update(to_string(r))
return hash.hexdigest()
return hashlib.md5(to_string(event.message)).hexdigest()
次の停車駅 - イベントinterfaces
から来るのか
イベントチェックサムがsentry.manager.get_checksum_from_event
方法から来ていますか?
[UPDATE 3:イベント・インターフェース]
私はinterfacesはセントリイベントに渡されたデータを記述するための標準メカニズムを指すことが働いており、私は、標準sentry.interfaces.Message
とsentry.interfaces.User
インターフェースを使用していません。
これらの両方に例外インスタンスに応じて異なるデータが含まれるため、チェックサムは決して一致しません。これらをチェックサム計算から除外できる方法はありますか? (つまり、異なるなければならないとしても、少なくともUser
インタフェース値は、 - Message
インタフェース値Iは標準化できた。)
[UPDATE 4:溶液]
ここMessage
とUser
のための2つのget_hash
関数でありますそれぞれインターフェース:
# sentry.interfaces.Message
def get_hash(self):
return [self.message]
# sentry.interfaces.User
def get_hash(self):
return []
これら二つを見てみると、唯一Message.get_hash
インタフェースはget_checksum_for_event
方法によってピックアップされた値を返し、これは返される一方(ハッシュ等)Thがありますeの効果は、チェックサムがメッセージだけで評価されるということです。理論的には、メッセージを標準化してユーザー定義をユニークに保つことができます。
私はここで自分の質問に答えましたが、うまくいけば私の調査は同じ問題を抱えている他の人にも役立つはずです。(別に、私はSentryのドキュメンテーションに対して、これの一部としてプルリクエストを提出しました;-))
(カスタムインターフェイスでSentryを使用している/拡張している人には注意してください。例外をグループ化するために使用し、空のリストを返します)。
警告! get_hashをオーバーライドすることは過度の可能性があります。 'Sentryは適切な文字列フォーマットを使用すると、メッセージをインテリジェントにグループ化します.'正しくエラーをフォーマットすることができます。https://docs.getsentry.com/hosted/clients/python/integrations/logging/ – andi