mcpField
S
sentry-go-sdk

sentry-go-sdk

github.com/getsentry开发2722.2k 次安装今天更新
代码仓库

关于 sentry-go-sdk

sentry-go-sdk 是一项扫描 Go 项目并指导配置 Sentry 错误监控及相关可观测功能的技能。它根据检测到的框架选择软件包和中间件,包括 HTTP 与 gRPC 集成。

主要功能

  1. 01检测 Go 依赖与框架
  2. 02按框架匹配中间件软件包
  3. 03指导错误监控与追踪
  4. 04涵盖日志、指标与定时任务
  5. 05说明设置验证与故障排查

适用场景

  1. 01为 Go Web 服务添加 Sentry
  2. 02捕获 HTTP 处理程序中的 panic
  3. 03为 gRPC 服务端或客户端添加监控
  4. 04监控 Go 定时任务

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/getsentry/sentry-for-ai --skill sentry-go-sdk

安装后在 Claude Code 中输入/sentry-go-sdk确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
crons.md
error-monitoring.md
logging.md
metrics.md
profiling.md
tracing.md

详细介绍

所有技能 > SDK 配置 > Go SDK

Sentry Go SDK

一个注重实践的向导,可扫描你的 Go 项目并引导你完成完整的 Sentry 配置。

在以下情况下调用此技能

  • 用户要求在 Go 应用中“添加 Sentry”或“配置 Sentry”
  • 用户希望在 Go 中进行错误监控、追踪、日志记录、指标监控或 Crons
  • 用户提到 sentry-go、github.com/getsentry/sentry-go 或 Go Sentry SDK
  • 用户希望监控 Go 中的 panic、HTTP 处理程序或计划任务

注意: 以下 SDK 版本和 API 以撰写本文时的 Sentry 文档为准(sentry-go v0.43.0+)。 从 v0.33.0+ 开始,SDK 要求使用 Go 1.25 或更高版本(支持最新的两个 Go 主版本)。 实施前,请务必参阅 docs.sentry.io/platforms/go/ 进行核实。


第 1 阶段:检测

在提出任何建议前,运行以下命令了解项目:

# 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 gRPC
grep "google.golang.org/grpc" 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

需要注意的事项:

  • sentry-go 是否已在 go.mod 中?如果是,跳到第 2 阶段(配置功能)。
  • 项目使用了哪个框架?(这决定了要安装哪个子包和中间件。)
  • 使用了哪个日志库?(用于启用自动日志捕获。)
  • 是否存在 cron/调度器模式?(这会触发 Crons 建议。)
  • 是否有配套的前端目录?(这会触发第 4 阶段的交叉链接。)

第 2 阶段:提出建议

根据你发现的情况,给出具体建议。不要提出开放式问题,而要先给出方案:

推荐(核心覆盖):

  • ✅ 错误监控 — 始终启用;捕获 panic 和未处理的错误
  • ✅ 追踪 — 检测到 HTTP 处理程序、gRPC 或数据库调用时启用
  • ✅ 日志记录 — 检测到 logrus、zap、zerolog 或 slog 时启用

可选(增强可观测性):

  • ⚡ 指标监控 — 用于业务 KPI/SLO 的自定义计数器和仪表
  • ⚡ Crons — 检测计划任务中的静默故障
  • ⚠️ 性能分析 — 已在 sentry-go v0.31.0 中移除;请参阅 references/profiling.md 了解替代方案

建议逻辑:

功能建议条件
错误监控始终 — 不可妥协的基础功能
追踪检测到 net/http、gin、echo、fiber、gRPC 或数据库调用
日志记录检测到 logrus、zap、zerolog 或 log/slog 导入
指标监控需要业务事件、SLO 跟踪或计数器
Crons检测到 robfig/cron、gocron 或计划任务模式
性能分析⚠️ 已在 v0.31.0 中移除 — 不要推荐;请参阅 references/profiling.md

提出建议:“我建议配置错误监控 + 追踪[+ 适用时添加日志记录]。要我也添加指标监控或 Crons 吗?”


第 3 阶段:引导配置

安装
# 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

# gRPC interceptors (only if google.golang.org/grpc is detected):
go get github.com/getsentry/sentry-go/grpc

# OpenTelemetry bridge (only if OTel is already in use):
go get github.com/getsentry/sentry-go/otel
快速开始 — 推荐初始化方式

在 main() 中、任何其他代码之前添加。此配置启用了最多的功能,并采用合理的默认值:

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)

在构建时注入 Release(推荐):

var release string // set by -ldflags

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

调用 sentry.Init 后,为你的框架注册 Sentry 中间件:

框架导入路径中间件调用RepanicWaitForDelivery
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

注意: Fiber 和 FastHTTP 基于 valyala/fasthttp 构建,后者没有内置恢复机制。对于这两种框架,请使用 Repanic: false, WaitForDelivery: true。

在处理程序中访问 Hub:

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

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

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

// Fiber:
hub := sentryfiber.GetHubFromContext(c)
gRPC 集成

对于 gRPC 服务端和客户端,请改用 sentrygrpc 拦截器:

import sentrygrpc "github.com/getsentry/sentry-go/grpc"

// Server: register interceptors when creating the gRPC server
server := grpc.NewServer(
    grpc.UnaryInterceptor(sentrygrpc.UnaryServerInterceptor()),
    grpc.StreamInterceptor(sentrygrpc.StreamServerInterceptor()),
)

// Client: register interceptors when dialing
conn, err := grpc.NewClient(
    address,
    grpc.WithUnaryInterceptor(sentrygrpc.UnaryClientInterceptor()),
    grpc.WithStreamInterceptor(sentrygrpc.StreamClientInterceptor()),
)

// Hub access inside a gRPC handler:
hub := sentry.GetHubFromContext(ctx)
对每项已达成共识的功能

逐项处理功能。为每项功能加载参考文件,按其中的步骤操作,并在继续下一项之前进行验证:

功能参考文件在以下情况下加载……
错误监控${SKILL_ROOT}/references/error-monitoring.md始终加载(基线)
追踪${SKILL_ROOT}/references/tracing.md涉及 HTTP 处理程序/分布式追踪时
性能分析${SKILL_ROOT}/references/profiling.md涉及对性能敏感的生产应用时
日志记录${SKILL_ROOT}/references/logging.md检测到 logrus / zap / zerolog / slog 时
指标${SKILL_ROOT}/references/metrics.md涉及业务 KPI/SLO 跟踪时
定时任务${SKILL_ROOT}/references/crons.md检测到调度器/cron 作业模式时

对于每项功能:Read ${SKILL_ROOT}/references/<feature>.md,严格按照步骤操作,并验证其是否正常运行。


配置参考

ClientOptions 的主要字段
选项类型默认值用途
Dsnstring""为空时禁用 SDK;环境变量:SENTRY_DSN
Environmentstring""例如 "production";环境变量:SENTRY_ENVIRONMENT
Releasestring""例如 "[email protected]";环境变量:SENTRY_RELEASE
SendDefaultPIIboolfalse包含 IP、请求标头
AttachStacktraceboolfalse在 CaptureMessage 调用中附加堆栈跟踪
SampleRatefloat641.0错误事件采样率(0.0 会按 1.0 处理)
EnableTracingboolfalse启用性能追踪
TracesSampleRatefloat640.0事务采样率
TracesSamplerTracesSamplernil自定义逐事务采样(优先于采样率)
EnableLogsboolfalse启用 Sentry Logs 功能
MaxBreadcrumbsint100每个事件的面包屑上限
MaxErrorDepthint100解包错误链的最大深度
Debugboolfalse输出详细的 SDK 调试信息
BeforeSendfuncnil用于修改/丢弃错误事件的钩子
BeforeSendTransactionfuncnil用于修改/丢弃事务事件的钩子
IgnoreErrors[]stringnil要丢弃的错误的正则表达式模式
IgnoreTransactions[]stringnil要丢弃的事务的正则表达式模式
环境变量
变量映射到用途
SENTRY_DSNDsn数据源名称
SENTRY_RELEASERelease应用版本(例如 [email protected])
SENTRY_ENVIRONMENTEnvironment部署环境
HTTP_PROXY / HTTPS_PROXYHTTPProxy / HTTPSProxy出站代理

在 ClientOptions 中设置的选项会覆盖环境变量。


验证

测试 Sentry 是否正在接收事件:

// 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")

几秒钟后检查 Sentry 控制面板。如果没有任何内容显示:

  1. 在 ClientOptions 中设置 Debug: true——SDK 内部信息会输出到标准输出
  2. 确认 DSN 正确,且项目存在
  3. 确保调用了 sentry.Flush(2 * time.Second)(默认情况下事件为异步发送)

阶段 4:交叉链接

完成 Go 设置后,检查是否存在尚未接入 Sentry 的配套前端:

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

如果存在尚未配置 Sentry 的前端目录,请推荐相应的技能:

检测到的前端推荐技能
React / Next.jssentry-react-sdk
Svelte / SvelteKitsentry-svelte-sdk
Vue使用 @sentry/vue——参阅 docs.sentry.io/platforms/javascript/guides/vue/
其他 JS/TSsentry-react-sdk(涵盖通用浏览器 JS 模式)

故障排除

问题解决方案
未显示事件设置 Debug: true,检查 DSN,确认已调用 sentry.Flush()
sentry.Init 返回错误DSN 格式错误 — 检查格式:https://<key>@o<org>.ingest.sentry.io/<project>
未捕获 Panic确保在处理程序之前注册框架中间件
defer sentry.Flush 未运行os.Exit() 会跳过 defer — 在调用 os.Exit() 之前显式调用 sentry.Flush()
缺少堆栈跟踪为 CaptureMessage 设置 AttachStacktrace: true;CaptureException 会自动启用
Goroutine 事件缺少上下文在启动 Goroutine 之前克隆 hub:hub := sentry.CurrentHub().Clone()
事务过多降低 TracesSampleRate,或使用 TracesSampler 丢弃健康检查/指标端点
Fiber/FastHTTP 未恢复对于基于 fasthttp 的框架,使用 Repanic: false, WaitForDelivery: true
SampleRate: 0.0 仍发送所有事件0.0 会被视为 1.0;要全部丢弃,请改为设置 Dsn: ""

评论

支持 Markdown