背景
見る必要のないエラーがitemsにいっぱい出てくるなぁ……って思ったら設定します。
私の場合はローカルで開発・テストしてるときに発生するエラーまで載ってしまっていたので設定しました。
以下、そのつもりで例を書いていきます。
仕組み
通知する必要のないitemsの条件をjson形式で記述し、Custom FingerprintingのページのCustom Fingerprinting Rules
に記入して保存すればOKです。
書式
後述のドキュメントページからサンプルを引用します。
[
{
"condition": {
"path": "body.trace.exception.class",
"in": ["EOFError", "Errno::ECONNREFUSED", "Errno::ETIMEDOUT"]
},
"fingerprint": "connection-error",
"title": "Connection error"
},
{
"condition": {"all": [
{"path": "body.trace.exception.class", "eq": "TimeoutError"},
{"path": "body.trace.frames.*.filename", "contains": "payments"}
]},
"fingerprint": "payments-timeout-error",
"title": "Timeout error in payments code"
},
{
"condition": {
"path": "body.trace.exception.class",
"eq": "ActionController::RoutingError"
},
"fingerprint": "{{ default_fingerprint }}-{{ context }}",
"title": "{{default_title }} in {{ context }}"
}
]
ドキュメントはCustom Fingerprinting Rulesに記載されています。
かいつまんで書くとこんな感じ。
- jsonには、condition, fingerprint, titleの3つのプロパティを記載する。
- fingerprintは任意
- titleは任意
- conditionにはpathと、「pathの値」が満たす条件を記載する。
path
とは、rollbarが送信するoccurrenceが持つraw jsonの中のプロパティを示す値です。
実際にraw jsonを見てみる方が早いと思います。
itemsから特定のitemをクリックし、Occurrences
タブを開き、表示されているOccurrenceのTimestamp
をクリックします。
Occurrenceのページが開くので、下の方にスクロールしてください。Raw JSON
があるかと思います。
こんな感じになっています。
これがずっと下まで続きます。
たとえば、画像に写っている"subtype": "DOMContentLoaded"
の通知を全て無視したい場合は(そんな大雑把なフィルタを設定することはありえないでしょうけど)先程のpath
にbody.telemetry.body.subtype
みたいな値を設定することになるわけですね。
実際にはtelemetryは配列なのでこれだと設定できませんけど。
とりあえずイメージとしてそんな感じ。
それで、pathの値と等しいことが条件であればeq
プロパティを、in条件を指定したければin
プロパティをpath
プロパティと兄弟の階層に記載するということですね。
改めて上記のサンプルを読んでみると、どういう書式でフィルタリングを定義すれば良いのか分かってきたのではないでしょうか?
実践
開発時のテストはまずlocalhostで行うので、とりあえずlocalhostで発生したoccurrenceだけ除外します。
Raw JSON
を確認してみると、path
はrequest.url
のようです。
私は5500ポートをよく使うので、127.0.0.1:5500
とlocalhost:5500/
を除外しましょう。
出来上がったものがこちらになります。
[
{
"title": "Local error",
"fingerprint": "local-error",
"condition": {
"any": [
{
"path": "request.url",
"contains": "127.0.0.1"
},
{
"path": "request.url",
"contains": "localhost"
}
]
}
}
]
最後はOr test (without saving) against this occurrence ID:
という欄に、実際に無視したいOccerrenceのIDを入力してみて、記入したjsonの内容でフィルタに引っかかるかどうかをテストします。
Occurrence IDはRaw JSON
に載っているuuid
ではなく、OccurrenceのページのURLから取得します(私は勘違いしました)。
有効でないIDを入力した時のエラーメッセージYou can find it in a url like https://rollbar.com/MyCompany/Website/items/123/occurrences/456/ (In this example, the occurrence ID is 456)
からもそのことを確認できます。
有効なIDを入力し、晴れてjsonの条件で引っかかってくれれば成功の旨の表示が出ます。
jsonを保存して終わりです。めでたしめでたし。
仕上げ
これで終わり……と思ったらまだでした。詰めが甘かった。
以上の設定はあくまでもユーザ定義のfingerprintを作成するための設定です。要するに、この条件に当てはまったOccurrenceはjsonの中に記入したfingerprint
の名前でまとめるよ、という設定。
最後にそのまとめたグループをMutedに設定する必要があります。
そのため意図的にエラーを起こし、fingerprint
名のOccurrenceをrollbarに載せましょう。
itemsに設定したfingerprintのものが出ているはずなので、チェックボックスで選んでGroupへとMerge。
そのグループについてはMute
する、という設定を行ってようやく通知がオフになります。お疲れ様でした。
おまけ:chatworkに通知するのもやめる
上記のフィルタリングと、chatwork等の外部サービスへのnotificationのフィルタリングは別物です。
Settingsからhttps://rollbar.com/lagless/lagless-reminder/settings/notifications/を開いて設定を変更しましょう。
私の場合はwebhookでcloud functionsにJSONを送信し、そこからchatworkに通知するという流れでrollbarの通知を出していました。
そこで、上記で設定したfingerprintのlevelを最低の「Debug」あたりにしておき、webhookのJSON送出のlevelをDebugより一つ上のinfo以上という設定にしておくと、chatworkへの通知等は送られなくなります。
設定が終わるとこんな感じ。