Go
GoのコードでSentryにメッセージを送信するやり方
普通のGoのコード
GoでSentryにエラーを送信する場合、 https://github.com/getsentry/sentry-go を使う。
以前はraven-goという名前だったので、古いページではこちらで記載されているかも。
Webフレームワーク等を使わないプレーンなGoのコードの場合、 github.com/getsentry/sentry-go
をimportして呼び出せばよい
Go | Sentry Documentation
Scope, Hub
Scopes and Hubs for Go | Sentry Documentation
イベントがキャプチャされてSentryに送信されるとき、SDKで現在のスコープ内でイベントデータに追加情報を付与する
init()
が呼ばれるとhubが作成されて、その上に空のscopeとクライアントが作成される。
scope は、Sentryにイベント送信時に context
と breadcrumbs
といった情報を追加して送信する。
親scopeから継承したデータを送信する。
Stacktraceを表示したい
[Go]Sentryに対応したcustom errorの作り方
httpサーバーにSentryを組み込む
net/http | Sentry Documentation
Echo | Sentry Documentation
Gin | Sentry Documentation
各フレームワーク用にライブラリが用意されている。
middlewareに設定することで、handlerでpanic発生時にイベントを送信できる。
net/http
の例
middlewareで sentry.GetHubFromContext(r.Context())
を呼ぶことで、リクエストスコープでhubの設定をして他のリクエストと混ざらないようになっている。
sentryhttp.New
の中では次のような処理をしている
- http.RequestのContextからhubを取得
- scopeにhttp.RequestをSetRequest
- handlerでpanicが発生したときにrecoverする
Repanic: true
なら再度panicを発生させる
停止時の処理
Shutdown and Draining for Echo | Sentry Documentation
サーバー停止時に sentry.Flush
を呼んで、送信途中のイベントがあったら送信されるようにする。
0.15.0
で入った変更でデフォルトではheaderが送信されないようになった。
https://github.com/getsentry/sentry-go/pull/485
Hostのみが送信される。
sentry.Init
時に SendDefaultPII: true
をつけることで、headerも送信されるようになる。
if err := sentry.Init(sentry.ClientOptions{
Dsn: conf.Sentry.Dsn,
SendDefaultPII: true,
}); err != nil {
log.Fatalf("Sentry initialization failed: %v\n", err)
}
0.16.0
で、プライベートな情報以外のヘッダーは送信されるよう修正した(変更者:私)