(django プロジェクトで) Sentry を使用していますが、エラーを適切に集計する方法を知りたいです。特定のユーザー アクションをエラーとしてログに記録しているため、根本的なシステム例外はなく、culprit
属性を使用してわかりやすいエラー名を設定しています。メッセージはテンプレート化されており、共通のメッセージ (「ユーザー 'x' は 'y' のためアクションを実行できませんでした」) が含まれていますが、完全に同じになることはありません (ユーザーが異なる、条件が異なる)。
Sentry は明らかに内部でいくつかの属性セットを使用して、エラーを同じ例外として集計するかどうかを決定しますが、コードを調べたにもかかわらず、その方法がわかりません。
コードをさらに掘り下げて、必要に応じて集計を管理するために設定する必要があるプロパティを教えてくれる人はいますか?
[更新 1: イベントのグループ化]
次の行が sentry.models.Group に表示されます。
class Group(MessageBase):
"""
Aggregated message which summarizes a set of Events.
"""
...
class Meta:
unique_together = (('project', 'logger', 'culprit', 'checksum'),)
...
これは理にかなっています-私が現在設定しているプロジェクト、ロガー、犯人-問題はchecksum
. さらに調査しますが、「チェックサム」はバイナリの同等性を示唆していますが、これは決して機能しません。同じ例外のインスタンスを異なる属性でグループ化することが可能でなければなりませんか?
[更新 2: イベント チェックサム]
イベント チェックサムは次のsentry.manager.get_checksum_from_event
メソッドから取得されます。
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
はどこから来るのか?
[更新 3: イベント インターフェイス]
インターフェイスは監視イベントに渡されるデータを記述するための標準メカニズムを参照し、標準とインターフェイスを使用していることを理解しました。sentry.interfaces.Message
sentry.interfaces.User
これらはどちらも、例外インスタンスに応じて異なるデータを含むため、チェックサムが一致することはありません。これらをチェックサム計算から除外する方法はありますか? (または、少なくともUser
インターフェイス値は異なる必要があるため、Message
標準化できるインターフェイス値です。)
[更新 4: 解決策]
それぞれおよびインターフェイスの 2 つのget_hash
関数を次に示します。Message
User
# sentry.interfaces.Message
def get_hash(self):
return [self.message]
# sentry.interfaces.User
def get_hash(self):
return []
これら2つを見ると、Message.get_hash
インターフェイスのみがメソッドによって取得された値を返すget_checksum_for_event
ため、これが返されます(ハッシュなど)。これの最終的な効果は、メッセージでチェックサムが評価されることです。単独 - 理論的には、メッセージを標準化し、ユーザー定義を一意に保つことができることを意味します。
I've answered my own question here, but hopefully my investigation is of use to others having the same problem. (As an aside, I've also submitted a pull request against the Sentry documentation as part of this ;-))
(Note to anyone using / extending Sentry with custom interfaces - if you want to avoid your interface being use to group exceptions, return an empty list.)