O que sentry-go-sdk faz?
Configuração completa do SDK do Sentry para Go. Use quando for solicitado a "adicionar Sentry ao Go", "instalar sentry-go", "configurar Sentry em Go" ou para configurar monitoramento de erros, rastreamento, logging, métricas ou crons para aplicações Go. Suporta net/http, Gin, Echo, Fiber, FastHTTP, Iris, Negroni e gRPC.
Instalação
Execute o comando abaixo para adicionar o pacote sentry-go ao seu projeto:
go get github.com/getsentry/sentry-go
Configuração Básica
Inicialize o Sentry no início da sua aplicação, idealmente no main.go:
package main
import (
"log"
"github.com/getsentry/sentry-go"
)
func main() {
err := sentry.Init(sentry.ClientOptions{
Dsn: "https://[email protected]/0",
// Defina a taxa de amostragem de tracing (recomendado: entre 0.1 e 1.0)
TracesSampleRate: 1.0,
})
if err != nil {
log.Fatalf("sentry.Init: %s", err)
}
// Garanta que os eventos sejam enviados antes de encerrar
defer sentry.Flush(2 * time.Second)
// ... resto da aplicação ...
}
Uso com Frameworks Web
net/http
package main
import (
"fmt"
"net/http"
"github.com/getsentry/sentry-go"
sentryhttp "github.com/getsentry/sentry-go/http"
)
func main() {
sentry.Init(sentry.ClientOptions{
Dsn: "https://[email protected]/0",
})
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// Exemplo de um erro intencional
panic("algo deu errado!")
})
http.Handle("/", sentryhttp.New(sentryhttp.Options{}).Handle(handler))
http.ListenAndServe(":8080", nil)
}
Gin
package main
import (
"github.com/getsentry/sentry-go"
sentrygin "github.com/getsentry/sentry-go/gin"
"github.com/gin-gonic/gin"
)
func main() {
sentry.Init(sentry.ClientOptions{
Dsn: "https://[email protected]/0",
})
r := gin.Default()
r.Use(sentrygin.New(sentrygin.Options{}))
r.GET("/", func(c *gin.Context) {
c.String(200, "Olá, Sentry!")
})
r.Run(":8080")
}
Echo
package main
import (
"github.com/getsentry/sentry-go"
sentryecho "github.com/getsentry/sentry-go/echo"
"github.com/labstack/echo/v4"
)
func main() {
sentry.Init(sentry.ClientOptions{
Dsn: "https://[email protected]/0",
})
e := echo.New()
e.Use(sentryecho.New(sentryecho.Options{}))
e.GET("/", func(c echo.Context) error {
return c.String(200, "Olá, Sentry!")
})
e.Start(":8080")
}
Fiber
package main
import (
"github.com/getsentry/sentry-go"
sentryfiber "github.com/getsentry/sentry-go/fiber"
"github.com/gofiber/fiber/v2"
)
func main() {
sentry.Init(sentry.ClientOptions{
Dsn: "https://[email protected]/0",
})
app := fiber.New()
app.Use(sentryfiber.New(sentryfiber.Options{}))
app.Get("/", func(c *fiber.Ctx) error {
return c.SendString("Olá, Sentry!")
})
app.Listen(":8080")
}
FastHTTP
package main
import (
"github.com/getsentry/sentry-go"
sentryfasthttp "github.com/getsentry/sentry-go/fasthttp"
"github.com/valyala/fasthttp"
)
func main() {
sentry.Init(sentry.ClientOptions{
Dsn: "https://[email protected]/0",
})
handler := func(ctx *fasthttp.RequestCtx) {
panic("algo deu errado!")
}
fasthttp.ListenAndServe(":8080", sentryfasthttp.New(sentryfasthttp.Options{}).Handler(handler))
}
Iris
package main
import (
"github.com/getsentry/sentry-go"
sentryiris "github.com/getsentry/sentry-go/iris"
"github.com/kataras/iris/v12"
)
func main() {
sentry.Init(sentry.ClientOptions{
Dsn: "https://[email protected]/0",
})
app := iris.New()
app.Use(sentryiris.New(sentryiris.Options{}))
app.Get("/", func(ctx iris.Context) {
ctx.WriteString("Olá, Sentry!")
})
app.Listen(":8080")
}
Negroni
package main
import (
"github.com/getsentry/sentry-go"
sentrynegroni "github.com/getsentry/sentry-go/negroni"
"github.com/urfave/negroni"
"net/http"
)
func main() {
sentry.Init(sentry.ClientOptions{
Dsn: "https://[email protected]/0",
})
n := negroni.Classic()
n.Use(sentrynegroni.New(sentrynegroni.Options{}))
n.UseHandler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
panic("algo deu errado!")
}))
n.Run(":8080")
}
gRPC
package main
import (
"github.com/getsentry/sentry-go"
sentrygrpc "github.com/getsentry/sentry-go/grpc"
"google.golang.org/grpc"
"net"
)
func main() {
sentry.Init(sentry.ClientOptions{
Dsn: "https://[email protected]/0",
})
lis, _ := net.Listen("tcp", ":50051")
s := grpc.NewServer(
grpc.UnaryInterceptor(sentrygrpc.UnaryServerInterceptor()),
grpc.StreamInterceptor(sentrygrpc.StreamServerInterceptor()),
)
// Registre seus serviços aqui...
s.Serve(lis)
}
Configuração Adicional
Variáveis de Ambiente
Defina a DSN do Sentry via variável de ambiente SENTRY_DSN para evitar valores hardcoded:
sentry.Init(sentry.ClientOptions{
Dsn: os.Getenv("SENTRY_DSN"),
})
Tracing (Rastreamento Distribuído)
Para habilitar o tracing, defina TracesSampleRate entre 0.0 e 1.0:
sentry.Init(sentry.ClientOptions{
TracesSampleRate: 0.2, // 20% das requisições serão rastreadas
})
Envio Manual de Erros
sentry.CaptureException(err)