用途
sentry-go-sdk 是一个面向 Go 项目的 Sentry SDK 配置技能,采用先扫描、再推荐、后引导的流程,帮助开发者完成 Sentry 的完整接入。它适用于被要求“为 Go 项目添加 Sentry”“安装 sentry-go”“在 Go 中配置 Sentry”,或需要在 Go 应用中配置错误监控、链路追踪、日志、指标、定时任务监控的场景。也被触发于用户提到 sentry-go、github.com/getsentry/sentry-go,或希望监控 panic、HTTP 处理器、定时任务时。
资料注明:文中的 SDK 版本与 API 反映撰写时的 Sentry 文档(sentry-go v0.43.0),实施前应始终对照 docs.sentry.io/platforms/go/ 核对。
主要能力
技能按阶段推进:
阶段一:检测。 通过命令检查项目现状,包括:go.mod 中是否已存在 Sentry 依赖;Web 框架(gin-gonic/gin、labstack/echo、gofiber/fiber、valyala/fasthttp、kataras/iris、urfave/negroni);日志库(sirupsen/logrus、go.uber.org/zap、rs/zerolog、log/slog);定时任务模式(robfig/cron、go-co-op/gocron、jasonlvhit/gocron);是否使用 OpenTelemetry;以及是否存在配套前端目录(frontend/、web/、client/、ui/)。若已存在 sentry-go,则直接进入功能配置阶段。
阶段二:推荐。 基于检测结果给出明确建议,而非开放式提问。核心覆盖包括:错误监控(始终推荐,捕获 panic 与未处理错误);链路追踪(检测到 HTTP 处理器、gRPC 或数据库调用时);日志(检测到 logrus、zap、zerolog 或 slog 时)。可选增强包括:指标(业务 KPI / SLO 的自定义计数器与仪表);Crons(检测定时任务的静默失败)。性能剖析(Profiling)已在 sentry-go v0.31.0 中移除,不应推荐。推荐逻辑表中:错误监控为不可协商的基线;追踪在检测到 net/http、gin、echo、fiber 或 gRPC 导入时推荐;日志在检测到对应日志库时推荐;指标在需要业务事件、SLO 跟踪或计数器时推荐;Crons 在检测到调度器/cron 模式时推荐。
阶段三:引导。
安装命令包括核心 SDK 与按需子包:
go get github.com/getsentry/sentry-go
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
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
go get github.com/getsentry/sentry-go/otel # OpenTelemetry 桥接(仅在已使用 OTel 时)
初始化示例建议置于 main() 最前,配置包含 DSN、Environment、Release(通过 -ldflags 构建时注入)、SendDefaultPII、AttachStacktrace、EnableTracing、TracesSampleRate(示例为 1.0,高流量生产环境建议降至 0.1–0.2)、EnableLogs,并在末尾 defer sentry.Flush(2 * time.Second)。
框架中间件在 sentry.Init 之后注册,资料以表格给出各框架的导入路径、中间件调用、Repanic 与 WaitForDelivery 取值。其中 Fiber 与 FastHTTP 基于 valyala/fasthttp,无内置恢复机制,应使用 Repanic: false、WaitForDelivery: true。
Hub 上下文获取方式按框架区分:net/http 与 Negroni 使用 sentry.GetHubFromContext(r.Context());Gin 使用 sentrygin.GetHubFromContext(c);Echo 使用 sentryecho.GetHubFromContext(c);Fiber 使用 sentryfiber.GetHubFromContext(c)。
对每个已同意的功能,逐一加载对应参考文件(error-monitoring.md、tracing.md、profiling.md、logging.md、metrics.md、crons.md),按步骤执行并验证后再进入下一项。
配置参考。 ClientOptions 关键字段包括:Dsn(为空则 SDK 禁用)、Environment、Release、SendDefaultPII(是否包含 IP 与请求头)、AttachStacktrace(CaptureMessage 是否附带堆栈)、SampleRate(错误事件采样率,0.0 视为 1.0)、EnableTracing、TracesSampleRate、TracesSampler(自定义逐事务采样,覆盖采样率)、EnableLogs、MaxBreadcrumbs(默认 100)、MaxErrorDepth(默认 100)、Debug、BeforeSend、BeforeSendTransaction、IgnoreErrors、IgnoreTransactions。环境变量包括 SENTRY_DSN、SENTRY_RELEASE、SENTRY_ENVIRONMENT、HTTP_PROXY / HTTPS_PROXY。ClientOptions 中设置的选项会覆盖环境变量。
验证。 可通过 sentry.CaptureMessage("Sentry Go SDK test") 或在恢复中间件就位时触发 panic 来验证事件是否送达。若未出现:设置 Debug: true 打印 SDK 内部信息、确认 DSN 正确且项目存在、确保调用了 sentry.Flush(2 * time.Second)(事件默认异步)。
阶段四:交叉链接。 完成 Go 配置后,检查是否存在未接入 Sentry 的配套前端目录(含 React/Svelte/Vue/Next 等),并按前端类型建议对应技能:React / Next.js 建议 sentry-react-sdk;Svelte / SvelteKit 建议 sentry-svelte-sdk;Vue 使用 @sentry/vue(见 docs.sentry.io/platforms/javascript/guides/vue/);其他 JS/TS 建议 sentry-react-sdk。
故障排查。 覆盖事件未出现、sentry.Init 返回错误(DSN 格式形如 https://<key>@o<org>.ingest.sentry.io/<project>)、panic 未被捕获(需先注册中间件)、defer sentry.Flush 未执行(os.Exit() 会跳过 defer,需在 os.Exit() 前显式调用)、缺少堆栈、goroutine 事件缺少上下文(生成前克隆 hub)、事务过多(降低采样率或用 TracesSampler 丢弃健康检查/指标端点)、Fiber/FastHTTP 未恢复、SampleRate 0.0 发送所有事件(0.0 视为 1.0,若要全部丢弃应改设 Dsn: "")等情况。
使用方式
该技能以向导形式运行,先对项目做检测,再提出具体接入建议,然后逐步引导安装与配置,并针对每个功能加载对应参考文件。开发者需配合执行检测命令、安装命令,并按框架注册中间件与完成初始化。
适用场景
适用于新接入 Sentry 的 Go 项目、需要为 Go 应用补充错误监控/追踪/日志/指标/Crons 的项目,以及在已有 Sentry 依赖基础上扩展功能的项目。检测到配套前端时,还可用于推动前端侧 Sentry 接入。
限制
性能剖析(Profiling)已在 sentry-go v0.31.0 中移除,不应推荐,相关替代方案见 references/profiling.md(资料未展开具体内容)。SDK 版本与 API 以 sentry-go v0.43.0 为参考,实施前需对照官方文档。文中未提供除已列项之外的功能、收费、平台或效果说明;具体参考文件内容本节暂未提供。