mcpField
S
sentry-ruby-sdk

sentry-ruby-sdk

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

关于 sentry-ruby-sdk

用于在 Ruby 项目中配置 Sentry 的技能,涵盖 Rails、Rack 和 Sinatra。它会检查项目并引导设置错误监控、跟踪、日志、指标、性能分析和定时任务,也提供从其他监控工具迁移的指导。

主要功能

  1. 01检测 Ruby 框架和已有监控 Gem
  2. 02引导选择并初始化 Sentry Gem
  3. 03配置错误、跟踪和结构化日志
  4. 04涵盖指标、性能分析和定时任务
  5. 05提供迁移与验证指导

适用场景

  1. 01为 Rails 或 Sinatra 服务添加 Sentry
  2. 02为 Sidekiq 后台任务添加监控
  3. 03从其他 Ruby 监控工具迁移
  4. 04使用现有 OpenTelemetry 配置跟踪

安装

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

$npx skills add https://github.com/getsentry/sentry-for-ai --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

详细介绍

所有技能 > SDK 设置 > Ruby SDK

Sentry Ruby SDK

一个有主见的向导,会扫描项目并指导你完成 Sentry 设置。

在以下情况调用此技能

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

注意: 以下 SDK API 适用于 sentry-ruby v6.6.2。 实施前请务必对照 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

# Yabeda metrics framework
grep -iE '\byabeda\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

# 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
  • 检测到 Yabeda → 添加 sentry-yabeda;将 Yabeda 指标路由到 Sentry 指标
  • 检测到 Puma → 队列时间采集是自动的(v6.4.0+),但反向代理必须设置 X-Request-Start 标头;参阅 ${SKILL_ROOT}/references/tracing.md → “请求队列时间”
  • 检测到 OTel 追踪(Gemfile 中有 opentelemetry-sdk + 检测项,或源代码中有 OpenTelemetry::SDK.configure)→ 使用 OTLP 路径:config.otlp.enabled = true;不要设置 traces_sample_rate;Sentry 会自动将错误关联到 OTel 追踪

阶段 2:推荐

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

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

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

未检测到 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
gem "sentry-yabeda"       # if using Yabeda metrics framework

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 配置工作进程执行 → 事务
Resquesentry-resqueSentry 初始化文件工作进程执行 → 事务
DelayedJobsentry-delayed_jobSentry 初始化文件任务执行 → 事务
Yabeda 指标sentry-yabedaSentry 初始化文件Yabeda 指标事件 → Sentry 指标
初始化 — 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.md使用 HTTP 处理程序 / 分布式链路追踪时
日志记录${SKILL_ROOT}/references/logging.md捕获结构化日志时
指标${SKILL_ROOT}/references/metrics.md存在 Sidekiq;已有指标模式时
性能分析${SKILL_ROOT}/references/profiling.md用户请求性能分析时(测试版)
定时任务${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 输出写入 stdout
capture_queue_timeBooleantrue根据 X-Request-Start 标头记录请求排队时间(v6.4.0+,Rails 于 v6.4.1 修复)
otlp.enabledBooleanfalse通过 OTLP 将 OTel spans 路由到 Sentry;不要与 traces_sample_rate 同时使用
otlp.collector_urlStringnilOTel Collector 的 OTLP HTTP 端点(例如,http://localhost:4318/v1/traces);设置后,spans 会发送到 Collector,而不是直接发送到 Sentry
org_idStringnil显式指定组织 ID;覆盖从 DSN 提取的值;适用于可自托管 / Relay 配置(v6.5.0+)
strict_trace_continuationBooleanfalse仅当传入 trace 的 sentry-org_id baggage 与 SDK 的组织 ID 相符时才继续;防止与第三方服务拼接 trace(v6.5.0+)
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