mcpField
S
sentry-ruby-sdk

sentry-ruby-sdk

github.com/getsentry开发25303 次安装35 周前更新
代码仓库

关于 sentry-ruby-sdk

用于在 Ruby 项目中配置 Sentry 的引导式技能,先检查框架、依赖和现有监控方案,再指导集成与验证。支持 Rails、Rack、Sinatra 及后台任务场景。

主要功能

  1. 01扫描项目并识别框架与依赖
  2. 02根据检测结果推荐监控功能
  3. 03指导 Sentry 安装和初始化
  4. 04提供迁移及功能参考流程
  5. 05本地与 DSN 方式验证事件

适用场景

  1. 01为 Rails 或 Sinatra 应用添加 Sentry
  2. 02将现有错误监控迁移到 Sentry
  3. 03为后台任务配置错误与性能监控

安装

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

$npx skills add https://github.com/getsentry/sentry-agent-skills --skill sentry-ruby-sdk

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

包含的文件

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

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

详细介绍

Sentry Ruby SDK

一款立场鲜明的向导,可扫描项目并引导完成 Sentry 的完整设置。

在以下情况下调用此技能

  • 用户要求“向 Ruby 添加 Sentry”或“在 Ruby 应用中设置 Sentry”
  • 用户希望在 Ruby 中进行错误监控、追踪、日志记录、指标监控、性能分析或定时任务监控
  • 用户提到 sentry-ruby、sentry-rails 或 Ruby Sentry SDK
  • 用户正从 AppSignal、Honeybadger、Bugsnag、Rollbar 或 Airbrake 迁移到 Sentry
  • 用户希望在 Rails/Sinatra 中监控异常、HTTP 请求或后台任务

**注意:**以下 SDK API 反映的是 sentry-ruby v6.4.0。 实施前请务必对照 docs.sentry.io/platforms/ruby/ 进行核实。


阶段 1:检测

# Existing Sentry gems
grep -i sentry Gemfile 2>/dev/null

# Framework
grep -iE '\brails\b|\bsinatra\b' Gemfile 2>/dev/null

# Web server — Puma triggers queue time guidance
grep -iE '\bpuma\b' Gemfile 2>/dev/null

# Background jobs
grep -iE '\bsidekiq\b|\bresque\b|\bdelayed_job\b' Gemfile 2>/dev/null

# Competitor monitoring tools — triggers migration path if found
grep -iE '\bappsignal\b|\bhoneybadger\b|\bbugsnag\b|\brollbar\b|\bairbrake\b' Gemfile 2>/dev/null

# Scheduled jobs — triggers Crons recommendation
grep -iE '\bsidekiq-cron\b|\bclockwork\b|\bwhenever\b|\brufus-scheduler\b' Gemfile 2>/dev/null
grep -rn "Sidekiq::Cron\|Clockwork\|every.*do" config/ lib/ --include="*.rb" 2>/dev/null | head -10

# OpenTelemetry tracing — check for SDK + instrumentations
grep -iE '\bopentelemetry-sdk\b|\bopentelemetry-instrumentation\b' Gemfile 2>/dev/null
grep -rn "OpenTelemetry::SDK\.configure\|\.use_all\|\.in_span" config/ lib/ app/ --include="*.rb" 2>/dev/null | head -5

# OpenTelemetry logging — check for logs SDK (much less common in Ruby)
grep -iE '\bopentelemetry-logs-sdk\b|\bopentelemetry-logs-api\b' Gemfile 2>/dev/null
grep -rn "OpenTelemetry::Logs" config/ lib/ app/ --include="*.rb" 2>/dev/null | head -5

# Existing metric patterns (StatsD, Datadog, Prometheus)
grep -rE "(statsd|dogstatsd|prometheus|\.gauge|\.histogram|\.increment|\.timing)" \
  app/ lib/ --include="*.rb" 2>/dev/null | grep -v "_spec\|_test" | head -20

# Companion frontend
cat package.json frontend/package.json web/package.json 2>/dev/null | grep -E '"@sentry|"sentry-'

根据检测结果选择方案:

  • 检测到竞品(appsignal、honeybadger、bugsnag、rollbar、airbrake)→ 首先加载 ${SKILL_ROOT}/references/migration.md;迁移时删除竞品的初始化文件
  • 已存在 Sentry → 跳到阶段 2 配置功能
  • Rails → 使用 sentry-rails + config/initializers/sentry.rb
  • Rack/Sinatra → 使用 sentry-ruby + Sentry::Rack::CaptureExceptions 中间件
  • Sidekiq → 添加 sentry-sidekiq;如果发现现有指标模式,建议使用 Metrics
  • 检测到 Puma → 队列时间捕获会自动启用(v6.4.0+),但反向代理必须设置 X-Request-Start 标头;参见 ${SKILL_ROOT}/references/tracing.md →“Request Queue Time”
  • 检测到 OTel 追踪(Gemfile 中有 opentelemetry-sdk + instrumentations,或源码中有 OpenTelemetry::SDK.configure)→ 使用 OTLP 路径:config.otlp.enabled = true;不要设置 traces_sample_rate;Sentry 会自动将错误关联到 OTel 追踪
  • 检测到 OTel 日志记录(Gemfile 中有 opentelemetry-logs-sdk,或源码中有 OpenTelemetry::Logs)→ 跳过 enable_logs;由 OTel 负责日志导出
  • 存在 OTel 追踪但没有 OTel 日志记录(常见情况)→ 追踪使用 OTLP,日志记录使用 Sentry 原生的 enable_logs: true

阶段 2:推荐

先给出具体方案,不要提出开放式问题:

功能推荐条件
错误监控始终推荐
OTLP 集成检测到 OTel 追踪时——替代原生追踪
追踪Rails / Sinatra / Rack / 任何 HTTP 框架;检测到 OTel 追踪时跳过
日志记录始终推荐——enable_logs: true 不会产生任何成本;仅在检测到 OTel 日志记录时跳过
指标监控存在 Sidekiq;检测到现有指标库(StatsD、Prometheus)
性能分析⚠️ Beta——用户要求进行性能分析时;需要 stackprof 或 vernier gem
定时任务检测到计划任务(ActiveJob、Sidekiq-Cron、Clockwork、Whenever)

有 OTel 追踪,没有 OTel 日志记录(常见情况):“我看到项目中使用了 OpenTelemetry 追踪。我建议使用 Sentry 的 OTLP 集成进行追踪(通过你现有的 OTel 设置)+ 错误监控 + Sentry 日志记录 [+ 适用时添加指标监控/定时任务]。我现在继续吗?”

有 OTel 追踪 + OTel 日志记录: “我看到 OpenTelemetry 同时负责追踪和日志记录。我建议使用 Sentry 的 OTLP 集成 + 错误监控 [+ 适用时添加指标监控/定时任务]。我现在继续吗?”

没有 OTel: “我建议使用错误监控 + 追踪 + 日志记录 [+ 适用时添加指标监控]。我现在继续吗?”


阶段 3:引导

安装

Rails:

# Gemfile
gem "sentry-ruby"
gem "sentry-rails"
gem "sentry-sidekiq"      # if using Sidekiq
gem "sentry-resque"       # if using Resque
gem "sentry-delayed_job"  # if using DelayedJob

Rack / Sinatra / 纯 Ruby:

gem "sentry-ruby"

运行 bundle install。

框架集成
框架 / 运行时Gem初始化位置自动插桩
Railssentry-railsconfig/initializers/sentry.rb控制器、ActiveRecord、ActiveJob、ActionMailer
Rack / Sinatrasentry-rubyconfig.ru 顶部请求(通过 Sentry::Rack::CaptureExceptions 中间件)
Sidekiqsentry-sidekiqSentry 初始化程序或 Sidekiq 配置Worker 执行 → 事务
Resquesentry-resqueSentry 初始化程序Worker 执行 → 事务
DelayedJobsentry-delayed_jobSentry 初始化程序Job 执行 → 事务
初始化 — Rails(config/initializers/sentry.rb)
Sentry.init do |config|
  config.dsn = ENV["SENTRY_DSN"]
  config.spotlight = Rails.env.development?  # local Spotlight UI; no DSN needed in dev
  config.breadcrumbs_logger = [:active_support_logger, :http_logger]
  config.send_default_pii = true
  config.traces_sample_rate = 1.0  # lower to 0.05–0.2 in production
  config.enable_logs = true
  # Metrics on by default; disable with: config.enable_metrics = false
end

sentry-rails 会自动对 ActionController、ActiveRecord、ActiveJob、ActionMailer 进行插桩。

初始化 — Rack / Sinatra
require "sentry-ruby"

Sentry.init do |config|
  config.dsn = ENV["SENTRY_DSN"]
  config.spotlight = ENV["RACK_ENV"] == "development"
  config.breadcrumbs_logger = [:sentry_logger, :http_logger]
  config.send_default_pii = true
  config.traces_sample_rate = 1.0
  config.enable_logs = true
end

use Sentry::Rack::CaptureExceptions  # in config.ru, before app middleware
初始化 — 独立运行的 Sidekiq
require "sentry-ruby"
require "sentry-sidekiq"

Sentry.init do |config|
  config.dsn = ENV["SENTRY_DSN"]
  config.spotlight = ENV.fetch("RAILS_ENV", "development") == "development"
  config.breadcrumbs_logger = [:sentry_logger]
  config.traces_sample_rate = 1.0
  config.enable_logs = true
end
环境变量
SENTRY_DSN=https://[email protected]/ZZZ
SENTRY_ENVIRONMENT=production   # overrides RAILS_ENV / RACK_ENV
[email protected]
功能参考文件

逐项配置功能。每次加载相应的参考文件,按步骤操作,并在继续下一项之前进行验证:

功能参考文件加载时机……
迁移${SKILL_ROOT}/references/migration.md找到竞品 Gem 时——在安装 Sentry 之前加载
错误监控${SKILL_ROOT}/references/error-monitoring.md始终
追踪${SKILL_ROOT}/references/tracing.mdHTTP 处理程序 / 分布式追踪
日志记录${SKILL_ROOT}/references/logging.md结构化日志采集
指标${SKILL_ROOT}/references/metrics.md存在 Sidekiq;有现有指标模式
性能分析${SKILL_ROOT}/references/profiling.md用户请求性能分析时(Beta 版)
定时任务${SKILL_ROOT}/references/crons.md检测到或请求配置定时任务时

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


配置参考

Sentry.init 的关键选项
选项类型默认值用途
dsnStringnil为空时禁用 SDK;环境变量:SENTRY_DSN
environmentStringnil例如 "production";环境变量:SENTRY_ENVIRONMENT
releaseStringnil例如 "[email protected]";环境变量:SENTRY_RELEASE
spotlightBooleanfalse将事件发送到 Spotlight sidecar(本地开发,无需 DSN)
send_default_piiBooleanfalse包含 IP 地址和请求标头
sample_rateFloat1.0错误事件采样率(0.0–1.0)
traces_sample_rateFloatnil事务采样率;nil 会禁用追踪
profiles_sample_rateFloatnil相对于 traces_sample_rate 的性能分析采样率;需要 stackprof 或 vernier
enable_logsBooleanfalse启用 Sentry 结构化日志
enable_metricsBooleantrue启用自定义指标(默认开启)
breadcrumbs_loggerArray[]用于自动面包屑的日志记录器(参见日志参考)
max_breadcrumbsInteger100每个事件的面包屑上限
debugBooleanfalse将详细的 SDK 输出写入标准输出
capture_queue_timeBooleantrue从 X-Request-Start 标头记录请求排队时间(v6.4.0+)
otlp.enabledBooleanfalse通过 OTLP 将 OTel spans 路由到 Sentry;不要与 traces_sample_rate 一起使用
before_sendLambdanil发送前修改或丢弃错误事件
before_send_transactionLambdanil发送前修改或丢弃事务事件
before_send_logLambdanil发送前修改或丢弃日志事件
环境变量
变量对应选项用途
SENTRY_DSNdsn数据源名称
SENTRY_RELEASErelease应用版本(例如 [email protected])
SENTRY_ENVIRONMENTenvironment部署环境

在 Sentry.init 中设置的选项优先于环境变量。


验证

本地开发(无需 DSN)— Spotlight:

npx @spotlightjs/spotlight          # browser UI at http://localhost:8969
# or stream events to terminal:
npx @spotlightjs/spotlight tail traces --format json

config.spotlight = Rails.env.development?(已在上方的初始化代码块中设置)会自动将事件路由到本地 sidecar。

使用真实 DSN:

Sentry.capture_message("Sentry Ruby SDK test")

没有任何内容显示?设置 config.debug = true 并检查标准输出。验证 DSN 格式:https://<key>@o<org>.ingest.sentry.io/<project>。


第 4 阶段:交叉链接

cat package.json frontend/package.json web/package.json 2>/dev/null | grep -E '"@sentry|"sentry-'
检测到的前端建议
React / Next.jssentry-react-sdk
Svelte / SvelteKitsentry-svelte-sdk
Vue@sentry/vue — docs.sentry.io/platforms/javascript/guides/vue/

如需了解 Ruby 后端与 JS 前端之间的链路拼接,请参阅 references/tracing.md →“前端链路拼接”。


故障排除

问题解决方案
事件未显示设置 config.debug = true;验证 DSN;确保在首次请求前调用 Sentry.init
Rails 异常缺失必须使用 sentry-rails — 单独使用 sentry-ruby 不会挂接 Rails 错误处理程序
没有链路(原生)设置 traces_sample_rate > 0;确保使用 sentry-rails 或 Sentry::Rack::CaptureExceptions
没有链路(OTLP)验证已安装 opentelemetry-exporter-otlp gem;使用 otlp.enabled = true 时不要设置 traces_sample_rate
Sidekiq 作业未追踪添加 sentry-sidekiq gem
缺少请求上下文设置 config.send_default_pii = true
日志未显示设置 config.enable_logs = true;需要 sentry-ruby ≥ 5.27.0
指标未显示检查 enable_metrics 是否为 false;验证 DSN
关闭时事件丢失Process.exit! 会跳过 at_exit 钩子 — 强制退出前显式调用 Sentry.flush
分叉服务器丢失事件Puma/Unicorn 会分叉工作进程 — 在 on_worker_boot 或 after_fork 中重新初始化;否则,后台工作线程会在子进程中终止
DSN 被拒绝 / 事件未送达验证 DSN 格式:https://<key>@o<org>.ingest.sentry.io/<project>;设置 config.debug = true 以查看传输错误

评论

支持 Markdown