sentry-setup-tracing

📁 getsentry/sentry-agent-skills 📅 Jan 20, 2026
104
总安装量
104
周安装量
#2222
全站排名
安装命令
npx skills add https://github.com/getsentry/sentry-agent-skills --skill sentry-setup-tracing

Agent 安装分布

claude-code 87
opencode 78
codex 74
github-copilot 61
cursor 61

Skill 文档

Setup Sentry Tracing

Configure Sentry’s performance monitoring to track transactions and spans.

Invoke This Skill When

  • User asks to “enable tracing” or “add performance monitoring”
  • User wants to track API response times, page loads, or latency
  • User asks about tracesSampleRate or custom spans

Quick Reference

Platform Enable Custom Span
JS/Browser tracesSampleRate + browserTracingIntegration() Sentry.startSpan()
Next.js tracesSampleRate (auto-integrated) Sentry.startSpan()
Node.js tracesSampleRate Sentry.startSpan()
Python traces_sample_rate @sentry_sdk.trace or start_span()
Ruby traces_sample_rate start_span()

JavaScript Setup

Enable tracing

Sentry.init({
  dsn: "YOUR_DSN",
  tracesSampleRate: 1.0,  // 1.0 = 100%, lower for production
  integrations: [Sentry.browserTracingIntegration()],  // Browser/React only
  tracePropagationTargets: ["localhost", /^https:\/\/api\./],
});

Custom spans

// Async operation
const result = await Sentry.startSpan(
  { name: "fetch-user", op: "http.client" },
  async () => {
    return await fetch("/api/user").then(r => r.json());
  }
);

// Nested spans
await Sentry.startSpan({ name: "checkout", op: "transaction" }, async () => {
  await Sentry.startSpan({ name: "validate", op: "validation" }, validateCart);
  await Sentry.startSpan({ name: "payment", op: "payment" }, processPayment);
});

Dynamic sampling

tracesSampler: ({ name, parentSampled }) => {
  if (name.includes("healthcheck")) return 0;
  if (name.includes("checkout")) return 1.0;
  if (parentSampled !== undefined) return parentSampled;
  return 0.1;
},

Python Setup

Enable tracing

sentry_sdk.init(
    dsn="YOUR_DSN",
    traces_sample_rate=1.0,
)

Custom spans

# Decorator
@sentry_sdk.trace
def expensive_function():
    return do_work()

# Context manager
with sentry_sdk.start_span(name="process-order", op="task") as span:
    span.set_data("order.id", order_id)
    process(order_id)

Dynamic sampling

def traces_sampler(ctx):
    name = ctx.get("transaction_context", {}).get("name", "")
    if "healthcheck" in name: return 0
    if "checkout" in name: return 1.0
    return 0.1

sentry_sdk.init(dsn="YOUR_DSN", traces_sampler=traces_sampler)

Ruby Setup

Sentry.init do |config|
  config.dsn = "YOUR_DSN"
  config.traces_sample_rate = 1.0
end

Common Operation Types

op Value Use Case
http.client Outgoing HTTP
http.server Incoming HTTP
db / db.query Database
cache Cache operations
task Background jobs
function Function calls

Sampling Recommendations

Traffic Rate
Development 1.0
Low (<1K req/min) 0.5 - 1.0
Medium (1K-10K) 0.1 - 0.5
High (>10K) 0.01 - 0.1

Distributed Tracing

Configure tracePropagationTargets to send trace headers to your APIs:

tracePropagationTargets: ["localhost", "https://api.yourapp.com"],

For Next.js 14+ App Router, add to root layout:

export async function generateMetadata() {
  return { other: { ...Sentry.getTraceData() } };
}

Troubleshooting

Issue Solution
Transactions not appearing Check tracesSampleRate > 0, verify DSN
Browser traces missing Add browserTracingIntegration()
Distributed traces disconnected Check tracePropagationTargets, CORS headers
Too many transactions Lower sample rate, use tracesSampler to filter