🚨

SentryでSlackにエラーを送るAlertの設定方法

2021/06/21に公開

はじめに

前回、
エラー監視ツール Sentryの導入方法(TeamPlan)
でSentryの導入方法を記事にしました。

今回はその続きで、エラーが起きた時に自動的にSlackに通知がいく方法を
書いていこうと思います。
Sentryは既に導入されている前提で話を進めます。

では、早速やっていきます。

現状

前回の記事でここまで設定出来たかと思います。

  • projectの作成
  • Goのコード作成
  • Dsnの取得
  • issuesの作成

project

issue

package main

import (
	"log"
	"time"

	"github.com/getsentry/sentry-go"
)

func main() {
	err := sentry.Init(sentry.ClientOptions{
		Dsn: "{Dsn名}",
	})
	if err != nil {
		log.Fatalf("sentry.Init: %s", err)
	}

	defer sentry.Flush(2 * time.Second)

	sentry.CaptureMessage("It works!")
}

この状態になっていない方、導入方法が知りたい方は前回の記事をご覧ください。

設定方法

Slackと統合する

  1. 左のタブの setting をタップし、次の画面で、 Integrations をタップする。

  1. Slackをクリックします。

※teamPlan以上が必要です。
developerPlanの場合、 Requires Team Plan or aboveと言われます。

↓developerPlanの場合、こんな画面になります。

  1. 「Add ワークスペース」ボタンを押します。

  1. Slackのワークスペースと接続する。

  1. 許可するを押すと、SentryとSlackのチャンネルが接続されます。

Slackがinstalledに変わっています。

アラートを作成する。

アラートというのは通知設定です。
Sentryの仕様として、一旦Sentryに全てのエラーが送られます。
そして、エラーが来た事をメールやSlackなどに通知する事が出来ます。
ここのアラートの設定で、
このエラーは通知する。しない。
この場所に送る。
何分置きに送る。
などの設定が出来ます。

では、設定していきます。

  1. 左側タブの Alerts をタップします。

  2. 右上の Create Alert Rule をタップします。

  3. この画面に来ると思います。
    いろんな種類のアラートを作成出来ますが、今回はオーソドックスなアラートを作成しようと思います。
    右下の Set Conditions をタップします。

  1. この画面で詳細の設定をしていきます。

①Add alert settings

  • Environment
    環境です。pro環境やdev環境など環境が分かれている場合、どの環境で起きたエラーなら通知するかという事を設定出来ます。
  • Team
    自分が属しているチームです。
  • Alert name
    このアラートの名前です。他の人が見ても分かる名前にしましょう。

②Set conditions

  • WHEN an event is captured by Sentry and {all or any} of the following happens
    どういう時に通知が送られるかの設定が出来ます。
    • A new issue is created
      エラーが発生した時。
    • The issue changes state from resolved to unresolved
      解決済みエラーが未解決になった時。
    • The issue changes state from ignored to unresolved
      エラーが未読から未解決になった時。
    • The issue is seen more than{100}times in {one minute}
      エラーが{1分}で{100}回以上発生した時。
    • The issue is seen by more than{100}users in{one minute}
      エラーが{1分}で{100}人以上のユーザーに見られた時
      の設定が出来ます。
  • IF {all or any} of these filters match
    これらのフィルターの{すべてまたはいずれか}が一致する場合
    • The issue is{older}than{10}{minute(s)}
      {10}{分}より{前}の時
    • The issue has happened at least{10}times
      エラーが少なくとも{10}回発生しているとき
    • The issue is assigned to{No One}
      エラーが{NoOne}に割り当てられたとき
    • The event is from the latest release
      エラーが最新リリースからのもののとき
    • The event's{message}value{equals}{value}
      エラーの{メッセージ}値{等しい} {値}の時。
      ここで、いろんな設定が出来ます。
      エラーメッセージだけでなく、エラーを出したuser_idが・・・とかも設定出来ます。
    • The event's tags match{key}{equals}{value}
      エラーのタグが{key} {equals} {value}と一致した時
    • The event's level is{equal to}{fatal}
      エラーレベルがfatalの時。
      ここでログレベルを設定出来ます。
      ※ここでのログレベル設定は、Slackなどへ通知するかしないかの設定であり、Sentry自体に送るかどうかの設定ではありません。
      Sentryに送るかどうかの設定はコード上で設定する必要があります。
  • THEN perform these actions
    どこに送るかなどの設定。どのアクションを実行するか
    - Send a notification to{Team}ST{#sample-team}
    {Team} ST {#sample-team}に通知を送信します
    • Send a notification to the{Select...}Slack workspace to
      {i.e #critical}and show tags{i.e environment,user,my_tag}in notification
      ここでSlackのどのチャンネルに送るかなど、設定出来ます。
      ※先にSentryとSlackのワークスペースを設定しておかないと、このタブは出てこなくて、Slackの設定は出来ないので注意!

③Set action interval

  • Action Interval
    何分置きに通知を送るか

というように①②③の設定が必要です。
ここでは以下のように設定してみます。


設定が終わりましたら、右下のSave Ruleボタンを押して設定完了です。
これで通知されます。

前回設定したGoのアプリで

go run main.go

をすると、Slackにこの通知が出て来ました。

お疲れ様でした。

参考

https://docs.sentry.io/product/integrations/slack/

Discussion