sentry-setup-tracing

Original🇺🇸 English
Not Translated

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.

1installs
Added on

NPX Install

npx skill4agent add jaffrepaul/agent-skills sentry-setup-tracing

SKILL.md Content

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
Important: The SDK versions, API names, and code samples below are examples. Always verify against docs.sentry.io before implementing, as APIs and minimum versions may have changed.

Quick Reference

PlatformMin SDKEnableCustom Span
JS/Browser9.0.0+
tracesSampleRate
+
browserTracingIntegration()
Sentry.startSpan()
Next.js9.0.0+
tracesSampleRate
in each runtime config file
Sentry.startSpan()
Node.js9.0.0+
tracesSampleRate
Sentry.startSpan()
Python0.11.2+
traces_sample_rate
@sentry_sdk.trace
or
start_span()
Ruby5.0.0+
traces_sample_rate
Sentry.with_child_span()

JavaScript Setup

Enable tracing

javascript
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

javascript
// 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

javascript
tracesSampler: ({ name, inheritOrSampleWith }) => {
  if (name.includes("healthcheck")) return 0;
  if (name.includes("checkout")) return 1.0;
  return inheritOrSampleWith(0.1);  // Respects parent sampling decision, falls back to 0.1
},

Python Setup

Enable tracing

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

Custom spans

python
# 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

python
from sentry_sdk.types import SamplingContext

def traces_sampler(sampling_context: SamplingContext) -> float:
    name = sampling_context.get("transaction_context", {}).get("name", "")
    parent_sampled = sampling_context.get("parent_sampled")
    if "healthcheck" in name: return 0
    if "checkout" in name: return 1.0
    if parent_sampled is not None: return float(parent_sampled)  # Respect parent decision
    return 0.1

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

Ruby Setup

ruby
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
queue.task
Background jobs
function
Function calls

Sampling Recommendations

TrafficRate
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:
javascript
tracePropagationTargets: ["localhost", "https://api.yourapp.com"],
For Next.js 14 App Router, add to root layout (not needed in Next.js 15+):
typescript
export function generateMetadata(): Metadata {
  return { other: { ...Sentry.getTraceData() } };
}

Verification

After enabling tracing, trigger a traced operation (e.g., an HTTP request) and check the Sentry Performance dashboard for transactions. Custom spans should appear nested under the parent transaction.

Troubleshooting

IssueSolution
Transactions not appearingCheck
tracesSampleRate > 0
, verify DSN
Browser traces missingAdd
browserTracingIntegration()
Distributed traces disconnectedCheck
tracePropagationTargets
, CORS headers
Too many transactionsLower sample rate, use
tracesSampler
to filter