Agent Skills: Setup Sentry Tracing

Setup Sentry Tracing (Performance Monitoring) in any project. Use this when asked to add performance monitoring, enable tracing, track transactions/spans, or instrument application performance. Supports JavaScript, TypeScript, Python, Ruby, React, Next.js, and Node.js.

UncategorizedID: getsentry/sentry-agent-skills/sentry-setup-tracing

Skill Files

Browse the full folder contents for sentry-setup-tracing.

Download Skill

Loading file tree…

skills/sentry-setup-tracing/SKILL.md

Skill Metadata

Name
sentry-setup-tracing
Description
Setup Sentry Tracing (Performance Monitoring) in any project. Use when asked to enable tracing, track transactions/spans, measure latency, or add performance monitoring. Supports JavaScript, Python, and Ruby.

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 |