SentryでSlackにエラーを送るAlertの設定方法
はじめに
前回、
エラー監視ツール Sentryの導入方法(TeamPlan)
でSentryの導入方法を記事にしました。
今回はその続きで、エラーが起きた時に自動的にSlackに通知がいく方法を
書いていこうと思います。
Sentryは既に導入されている前提で話を進めます。
では、早速やっていきます。
現状
前回の記事でここまで設定出来たかと思います。
- projectの作成
- Goのコード作成
- Dsnの取得
- issuesの作成
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と統合する
- 左のタブの setting をタップし、次の画面で、 Integrations をタップする。
- Slackをクリックします。
※teamPlan以上が必要です。
developerPlanの場合、 Requires Team Plan or aboveと言われます。
↓developerPlanの場合、こんな画面になります。
- 「Add ワークスペース」ボタンを押します。
- Slackのワークスペースと接続する。
- 許可するを押すと、SentryとSlackのチャンネルが接続されます。
Slackがinstalledに変わっています。
アラートを作成する。
アラートというのは通知設定です。
Sentryの仕様として、一旦Sentryに全てのエラーが送られます。
そして、エラーが来た事をメールやSlackなどに通知する事が出来ます。
ここのアラートの設定で、
このエラーは通知する。しない。
この場所に送る。
何分置きに送る。
などの設定が出来ます。
では、設定していきます。
-
左側タブの Alerts をタップします。
-
右上の Create Alert Rule をタップします。
-
この画面に来ると思います。
いろんな種類のアラートを作成出来ますが、今回はオーソドックスなアラートを作成しようと思います。
右下の Set Conditions をタップします。
- この画面で詳細の設定をしていきます。
①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}人以上のユーザーに見られた時
の設定が出来ます。
- A new issue is created
- 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に送るかどうかの設定はコード上で設定する必要があります。
- The issue is{older}than{10}{minute(s)}
- 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の設定は出来ないので注意!
- Send a notification to the{Select...}Slack workspace to
③Set action interval
- Action Interval
何分置きに通知を送るか
というように①②③の設定が必要です。
ここでは以下のように設定してみます。
設定が終わりましたら、右下のSave Ruleボタンを押して設定完了です。
これで通知されます。
前回設定したGoのアプリで
go run main.go
をすると、Slackにこの通知が出て来ました。
お疲れ様でした。
参考
Discussion