3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

rollbarで通知をフィルタリングする

Last updated at Posted at 2020-04-21

背景

見る必要のないエラーがitemsにいっぱい出てくるなぁ……って思ったら設定します。
私の場合はローカルで開発・テストしてるときに発生するエラーまで載ってしまっていたので設定しました。
以下、そのつもりで例を書いていきます。

仕組み

通知する必要のないitemsの条件をjson形式で記述し、Custom FingerprintingのページのCustom Fingerprinting Rulesに記入して保存すればOKです。

参考:Rollbarでbotが出すエラーを無視する

書式

後述のドキュメントページからサンプルを引用します。

[
  {
    "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があるかと思います。
こんな感じになっています。
image.png
これがずっと下まで続きます。
たとえば、画像に写っている"subtype": "DOMContentLoaded"の通知を全て無視したい場合は(そんな大雑把なフィルタを設定することはありえないでしょうけど)先程のpathbody.telemetry.body.subtypeみたいな値を設定することになるわけですね。
実際にはtelemetryは配列なのでこれだと設定できませんけど。
とりあえずイメージとしてそんな感じ。
それで、pathの値と等しいことが条件であればeqプロパティを、in条件を指定したければinプロパティをpathプロパティと兄弟の階層に記載するということですね。
改めて上記のサンプルを読んでみると、どういう書式でフィルタリングを定義すれば良いのか分かってきたのではないでしょうか?

実践

開発時のテストはまずlocalhostで行うので、とりあえずlocalhostで発生したoccurrenceだけ除外します。
Raw JSONを確認してみると、pathrequest.urlのようです。
私は5500ポートをよく使うので、127.0.0.1:5500localhost: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の条件で引っかかってくれれば成功の旨の表示が出ます。
image.png
jsonを保存して終わりです。めでたしめでたし。

仕上げ

これで終わり……と思ったらまだでした。詰めが甘かった。
以上の設定はあくまでもユーザ定義のfingerprintを作成するための設定です。要するに、この条件に当てはまったOccurrenceはjsonの中に記入したfingerprintの名前でまとめるよ、という設定。
最後にそのまとめたグループをMutedに設定する必要があります。
そのため意図的にエラーを起こし、fingerprint名のOccurrenceをrollbarに載せましょう。
itemsに設定したfingerprintのものが出ているはずなので、チェックボックスで選んでGroupへとMerge。
そのグループについてはMuteする、という設定を行ってようやく通知がオフになります。お疲れ様でした。
image.png

おまけ: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への通知等は送られなくなります。
image.png
設定が終わるとこんな感じ。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?