Skill

sentry-go-sdk

Install
1
Install the plugin
$
npx claudepluginhub getsentry/sentry-for-ai --plugin sentry

Want just this skill?

Add to a custom plugin, then install with one command.

Description

Full Sentry SDK setup for Go. Use when asked to "add Sentry to Go", "install sentry-go", "setup Sentry in Go", or configure error monitoring, tracing, logging, metrics, or crons for Go applications. Supports net/http, Gin, Echo, Fiber, FastHTTP, Iris, and Negroni.

Tool Access

This skill uses the workspace's default tool permissions.

Supporting Assets
View in Repository
references/crons.md
references/error-monitoring.md
references/logging.md
references/metrics.md
references/profiling.md
references/tracing.md
Skill Content

All Skills > SDK Setup > Go SDK

Sentry Go SDK

Opinionated wizard that scans your Go project and guides you through complete Sentry setup.

Invoke This Skill When

  • User asks to "add Sentry to Go" or "setup Sentry" in a Go app
  • User wants error monitoring, tracing, logging, metrics, or crons in Go
  • User mentions sentry-go, github.com/getsentry/sentry-go, or Go Sentry SDK
  • User wants to monitor panics, HTTP handlers, or scheduled jobs in Go

Note: SDK versions and APIs below reflect Sentry docs at time of writing (sentry-go v0.43.0). Always verify against docs.sentry.io/platforms/go/ before implementing.


Phase 1: Detect

Run these commands to understand the project before making any recommendations:

# Check existing Sentry dependency
grep -i sentry go.mod 2>/dev/null

# Detect web framework
grep -E "gin-gonic/gin|labstack/echo|gofiber/fiber|valyala/fasthttp|kataras/iris|urfave/negroni" go.mod 2>/dev/null

# Detect logging libraries
grep -E "sirupsen/logrus|go.uber.org/zap|rs/zerolog|log/slog" go.mod go.sum 2>/dev/null

# Detect cron / scheduler patterns
grep -E "robfig/cron|go-co-op/gocron|jasonlvhit/gocron" go.mod 2>/dev/null

# Detect OpenTelemetry usage
grep "go.opentelemetry.io" go.mod 2>/dev/null

# Check for companion frontend
ls frontend/ web/ client/ ui/ 2>/dev/null

What to note:

  • Is sentry-go already in go.mod? If yes, skip to Phase 2 (configure features).
  • Which framework is used? (Determines which sub-package and middleware to install.)
  • Which logging library? (Enables automatic log capture.)
  • Are cron/scheduler patterns present? (Triggers Crons recommendation.)
  • Is there a companion frontend directory? (Triggers Phase 4 cross-link.)

Phase 2: Recommend

Based on what you found, present a concrete recommendation. Don't ask open-ended questions — lead with a proposal:

Recommended (core coverage):

  • Error Monitoring — always; captures panics and unhandled errors
  • Tracing — if HTTP handlers, gRPC, or DB calls are detected
  • Logging — if logrus, zap, zerolog, or slog is detected

Optional (enhanced observability):

  • Metrics — custom counters and gauges for business KPIs / SLOs
  • Crons — detect silent failures in scheduled jobs
  • ⚠️ Profiling — removed in sentry-go v0.31.0; see references/profiling.md for alternatives

Recommendation logic:

FeatureRecommend when...
Error MonitoringAlways — non-negotiable baseline
Tracingnet/http, gin, echo, fiber, or gRPC imports detected
Logginglogrus, zap, zerolog, or log/slog imports detected
MetricsBusiness events, SLO tracking, or counters needed
Cronsrobfig/cron, gocron, or scheduled job patterns detected
Profiling⚠️ Removed in v0.31.0 — do not recommend; see references/profiling.md

Propose: "I recommend setting up Error Monitoring + Tracing [+ Logging if applicable]. Want me to also add Metrics or Crons?"


Phase 3: Guide

Install

# Core SDK (always required)
go get github.com/getsentry/sentry-go

# Framework sub-package — install only what matches detected framework:
go get github.com/getsentry/sentry-go/http      # net/http
go get github.com/getsentry/sentry-go/gin       # Gin
go get github.com/getsentry/sentry-go/echo      # Echo
go get github.com/getsentry/sentry-go/fiber     # Fiber
go get github.com/getsentry/sentry-go/fasthttp  # FastHTTP

# Logging sub-packages — install only what matches detected logging lib:
go get github.com/getsentry/sentry-go/logrus    # Logrus
go get github.com/getsentry/sentry-go/slog      # slog (stdlib, Go 1.21+)
go get github.com/getsentry/sentry-go/zap       # Zap
go get github.com/getsentry/sentry-go/zerolog   # Zerolog

# OpenTelemetry bridge (only if OTel is already in use):
go get github.com/getsentry/sentry-go/otel

Quick Start — Recommended Init

Add to main() before any other code. This config enables the most features with sensible defaults:

import (
    "log"
    "os"
    "time"
    "github.com/getsentry/sentry-go"
)

err := sentry.Init(sentry.ClientOptions{
    Dsn:              os.Getenv("SENTRY_DSN"),
    Environment:      os.Getenv("SENTRY_ENVIRONMENT"), // "production", "staging", etc.
    Release:          release,                          // inject via -ldflags at build time
    SendDefaultPII:   true,
    AttachStacktrace: true,

    // Tracing (adjust sample rate for production)
    EnableTracing:    true,
    TracesSampleRate: 1.0, // lower to 0.1–0.2 in high-traffic production

    // Logs
    EnableLogs: true,
})
if err != nil {
    log.Fatalf("sentry.Init: %s", err)
}
defer sentry.Flush(2 * time.Second)

Injecting Release at build time (recommended):

var release string // set by -ldflags

// go build -ldflags="-X main.release=my-app@$(git describe --tags)"

Framework Middleware

After sentry.Init, register the Sentry middleware for your framework:

FrameworkImport pathMiddleware callRepanicWaitForDelivery
net/http.../sentry-go/httpsentryhttp.New(opts).Handle(h)truefalse
Gin.../sentry-go/ginrouter.Use(sentrygin.New(opts))truefalse
Echo.../sentry-go/echoe.Use(sentryecho.New(opts))truefalse
Fiber.../sentry-go/fiberapp.Use(sentryfiber.New(opts))falsetrue
FastHTTP.../sentry-go/fasthttpsentryfasthttp.New(opts).Handle(h)falsetrue
Iris.../sentry-go/irisapp.Use(sentryiris.New(opts))truefalse
Negroni.../sentry-go/negronin.Use(sentrynegroni.New(opts))truefalse

Note: Fiber and FastHTTP are built on valyala/fasthttp which has no built-in recovery. Use Repanic: false, WaitForDelivery: true for those.

Hub access in handlers:

// net/http, Negroni:
hub := sentry.GetHubFromContext(r.Context())

// Gin:
hub := sentrygin.GetHubFromContext(c)

// Echo:
hub := sentryecho.GetHubFromContext(c)

// Fiber:
hub := sentryfiber.GetHubFromContext(c)

For Each Agreed Feature

Walk through features one at a time. Load the reference file for each, follow its steps, and verify before moving to the next:

FeatureReference fileLoad when...
Error Monitoring${SKILL_ROOT}/references/error-monitoring.mdAlways (baseline)
Tracing${SKILL_ROOT}/references/tracing.mdHTTP handlers / distributed tracing
Profiling${SKILL_ROOT}/references/profiling.mdPerformance-sensitive production apps
Logging${SKILL_ROOT}/references/logging.mdlogrus / zap / zerolog / slog detected
Metrics${SKILL_ROOT}/references/metrics.mdBusiness KPIs / SLO tracking
Crons${SKILL_ROOT}/references/crons.mdScheduler / cron job patterns detected

For each feature: Read ${SKILL_ROOT}/references/<feature>.md, follow steps exactly, verify it works.


Configuration Reference

Key ClientOptions Fields

OptionTypeDefaultPurpose
Dsnstring""SDK disabled if empty; env: SENTRY_DSN
Environmentstring""e.g., "production"; env: SENTRY_ENVIRONMENT
Releasestring""e.g., "my-app@1.0.0"; env: SENTRY_RELEASE
SendDefaultPIIboolfalseInclude IP, request headers
AttachStacktraceboolfalseStack traces on CaptureMessage calls
SampleRatefloat641.0Error event sample rate (0.0 treated as 1.0)
EnableTracingboolfalseEnable performance tracing
TracesSampleRatefloat640.0Transaction sample rate
TracesSamplerTracesSamplernilCustom per-transaction sampling (overrides rate)
EnableLogsboolfalseEnable Sentry Logs feature
MaxBreadcrumbsint100Max breadcrumbs per event
MaxErrorDepthint100Max depth for unwrapping error chains
DebugboolfalseVerbose SDK debug output
BeforeSendfuncnilHook to mutate/drop error events
BeforeSendTransactionfuncnilHook to mutate/drop transaction events
IgnoreErrors[]stringnilRegex patterns for errors to drop
IgnoreTransactions[]stringnilRegex patterns for transactions to drop

Environment Variables

VariableMaps toPurpose
SENTRY_DSNDsnData Source Name
SENTRY_RELEASEReleaseApp version (e.g., my-app@1.0.0)
SENTRY_ENVIRONMENTEnvironmentDeployment environment
HTTP_PROXY / HTTPS_PROXYHTTPProxy / HTTPSProxyOutbound proxy

Options set in ClientOptions override environment variables.


Verification

Test that Sentry is receiving events:

// In a handler or test — triggers a real error event:
sentry.CaptureMessage("Sentry Go SDK test")

// Or trigger a captured panic (with recovery middleware in place):
panic("sentry test panic")

Check the Sentry dashboard within a few seconds. If nothing appears:

  1. Set Debug: true in ClientOptions — prints SDK internals to stdout
  2. Verify the DSN is correct and the project exists
  3. Ensure sentry.Flush(2 * time.Second) is called (events are async by default)

Phase 4: Cross-Link

After completing Go setup, check for a companion frontend missing Sentry coverage:

ls frontend/ web/ client/ ui/ 2>/dev/null
cat frontend/package.json web/package.json 2>/dev/null | grep -E '"react"|"svelte"|"vue"|"next"'

If a frontend directory exists without Sentry configured, suggest the matching skill:

Frontend detectedSuggest skill
React / Next.jssentry-react-sdk
Svelte / SvelteKitsentry-svelte-sdk
VueUse @sentry/vue — see docs.sentry.io/platforms/javascript/guides/vue/
Other JS/TSsentry-react-sdk (covers generic browser JS patterns)

Troubleshooting

IssueSolution
Events not appearingSet Debug: true, check DSN, verify sentry.Flush() is called
sentry.Init returns errorMalformed DSN — check format: https://<key>@o<org>.ingest.sentry.io/<project>
Panics not capturedEnsure framework middleware is registered before handlers
defer sentry.Flush not runningos.Exit() skips defer — call sentry.Flush() explicitly before os.Exit()
Missing stack tracesSet AttachStacktrace: true for CaptureMessage; works automatically for CaptureException
Goroutine events missing contextClone hub before spawning goroutine: hub := sentry.CurrentHub().Clone()
Too many transactionsLower TracesSampleRate or use TracesSampler to drop health checks / metrics endpoints
Fiber/FastHTTP not recoveringUse Repanic: false, WaitForDelivery: true for fasthttp-based frameworks
SampleRate: 0.0 sending all events0.0 is treated as 1.0; to drop all, set Dsn: "" instead
Stats
Stars83
Forks10
Last CommitMar 2, 2026
Actions

Similar Skills

cache-components

Expert guidance for Next.js Cache Components and Partial Prerendering (PPR). **PROACTIVE ACTIVATION**: Use this skill automatically when working in Next.js projects that have `cacheComponents: true` in their next.config.ts/next.config.js. When this config is detected, proactively apply Cache Components patterns and best practices to all React Server Component implementations. **DETECTION**: At the start of a session in a Next.js project, check for `cacheComponents: true` in next.config. If enabled, this skill's patterns should guide all component authoring, data fetching, and caching decisions. **USE CASES**: Implementing 'use cache' directive, configuring cache lifetimes with cacheLife(), tagging cached data with cacheTag(), invalidating caches with updateTag()/revalidateTag(), optimizing static vs dynamic content boundaries, debugging cache issues, and reviewing Cache Component implementations.

138.4k