2023-09-04
概要
- fiber でウェブアプリケーションを作っている
- Sentry に無料枠があるのを知り、試してみたかったので、fiber アプリに仕込んでみた
パッケージ
sentry-go を用います。Sentry の公式SDKです
go get github.com/getsentry/sentry-go
インポートします。
package main import ( "github.com/getsentry/sentry-go" sentryhttp "github.com/getsentry/sentry-go/http" )
sentry-go には、トレーサーを仕込むとき便利なハンドラーが用意されてます
- sentryhttp ... net/http 用のハンドラー(http.Handler)
- sentryfasthttp ... fasthttp 用のハンドラー(fasthttp.RequestHandler)
今回は sentryhttp を用いました。
fiber は fasthttp ベースなので出来れば sentryfasthttp を用いた方が良いのですが、 実装がやや複雑になりそうで今回は見送りました。
セットアップ
sentry.Init をします。
Sentry の DSN(Data Source Name) を環境変数 SENTRY_DSN に入れます。
package main import ( "fmt" "os" "github.com/getsentry/sentry-go" ) func main() { err := sentry.Init(sentry.ClientOptions{ Dsn: os.Getenv("SENTRY_DSN"), // like `https://xx.sentry.io/xxx` EnableTracing: true, TracesSampleRate: 1.0, ProfilesSampleRate: 1.0, }) if err != nil { fmt.Println(err) } }
fiber に仕込む
fiber の middleware として仕込みます。
自前で実装しても良いのですが、ここでは adapter を用いました。 net/http のミドルウェアを fiber のミドルウェアに変換してくれるものです。(参考)
package main import ( "net/http" "os" "github.com/getsentry/sentry-go" sentryhttp "github.com/getsentry/sentry-go/http" "github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2/middleware/adaptor" ) func main() { app := fiber.New() // Sentry のトレーサーを仕込む app.Use(adaptor.HTTPMiddleware(sentryTracer)) app.Get("/api/contents", listContentsHandler) app.Listen(":3000") } func sentryTracer(next http.Handler) http.Handler { // sentry init err := sentry.Init(sentry.ClientOptions{ Dsn: os.Getenv("SENTRY_DSN"), EnableTracing: true, TracesSampleRate: 1.0, ProfilesSampleRate: 1.0, }) if err != nil { return next } // net/http の handler sentryHandler := sentryhttp.New(sentryhttp.Options{}) return sentryHandler.Handle(next) }
以上で Sentry にデータが送信されるようになりました。
なお Sentry に入門したてなので設定項目を深く見れてません。
データは送れましたがHTTPステータス情報が欠落してます。設定不足です。。
おわりに
プロファイリングを楽しみにしてたんですが、Go 言語はまだ alpha版 らしいです。
作成日
2023-09-04
更新日
2023-09-04