sentry-performance-monitoring
$
npx mdskill add TheBushidoCollective/han/sentry-performance-monitoringAutomate Sentry performance monitoring setup with transactions and tracing.
- Configures distributed tracing and profiling for application performance.
- Integrates with Sentry SDKs via TypeScript and Bash execution.
- Executes code snippets to initialize DSNs and define trace propagation.
- Generates runnable scripts for enabling automatic and manual transactions.
SKILL.md
.github/skills/sentry-performance-monitoringView on GitHub ↗
---
name: sentry-performance-monitoring
description: Use when setting up performance monitoring, distributed tracing, or profiling with Sentry. Covers transactions, spans, and performance insights.
allowed-tools:
- Read
- Write
- Edit
- Bash
- Grep
- Glob
---
# Sentry - Performance Monitoring
Track application performance with transactions, spans, and distributed tracing.
## Enable Performance Monitoring
```typescript
import * as Sentry from "@sentry/browser";
Sentry.init({
dsn: "...",
tracesSampleRate: 0.2, // 20% of transactions
integrations: [
Sentry.browserTracingIntegration(),
],
});
```
## Transactions
### Automatic Transactions
```typescript
// Browser: Page loads and navigations
Sentry.init({
integrations: [
Sentry.browserTracingIntegration({
tracePropagationTargets: ["localhost", /^https:\/\/api\.example\.com/],
}),
],
});
```
### Manual Transactions
```typescript
const transaction = Sentry.startTransaction({
op: "task",
name: "Process Order",
});
try {
// Your code here
processOrder(order);
transaction.setStatus("ok");
} catch (error) {
transaction.setStatus("internal_error");
throw error;
} finally {
transaction.finish();
}
```
## Spans
### Create Child Spans
```typescript
const transaction = Sentry.startTransaction({ name: "checkout" });
const validationSpan = transaction.startChild({
op: "validation",
description: "Validate cart items",
});
await validateCart(cart);
validationSpan.finish();
const paymentSpan = transaction.startChild({
op: "payment",
description: "Process payment",
});
await processPayment(payment);
paymentSpan.finish();
transaction.finish();
```
### Span Data
```typescript
const span = transaction.startChild({
op: "db.query",
description: "SELECT * FROM users WHERE id = ?",
data: {
"db.system": "postgresql",
"db.name": "production",
},
});
```
## Distributed Tracing
### Propagate Trace Context
```typescript
// Frontend
Sentry.init({
integrations: [
Sentry.browserTracingIntegration({
tracePropagationTargets: [
"localhost",
/^https:\/\/api\.yoursite\.com/,
],
}),
],
});
// This automatically adds sentry-trace and baggage headers
```
### Backend Continuation
```typescript
// Express.js
import * as Sentry from "@sentry/node";
app.use(Sentry.Handlers.requestHandler());
app.use(Sentry.Handlers.tracingHandler());
// The transaction is automatically continued from incoming headers
```
## Sampling
### Static Sampling
```typescript
Sentry.init({
tracesSampleRate: 0.1, // 10% of transactions
});
```
### Dynamic Sampling
```typescript
Sentry.init({
tracesSampler: (samplingContext) => {
// Always sample errors
if (samplingContext.parentSampled !== undefined) {
return samplingContext.parentSampled;
}
// High priority endpoints
if (samplingContext.name.includes("/checkout")) {
return 1.0;
}
// Don't sample health checks
if (samplingContext.name.includes("/health")) {
return 0;
}
// Default rate
return 0.1;
},
});
```
## Web Vitals
```typescript
// Automatically captured with browserTracingIntegration
// LCP, FID, CLS, FCP, TTFB
Sentry.init({
integrations: [
Sentry.browserTracingIntegration({
enableLongTask: true, // Track long tasks
}),
],
});
```
## Custom Metrics
```typescript
// Capture custom metrics
Sentry.metrics.increment("button_clicked", 1, {
tags: { button: "checkout" },
});
Sentry.metrics.distribution("cart_value", cart.total, {
unit: "dollar",
tags: { currency: "USD" },
});
Sentry.metrics.gauge("active_users", activeCount);
Sentry.metrics.set("unique_visitors", visitorId);
```
## Profiling
```typescript
// Node.js
import * as Sentry from "@sentry/node";
import { nodeProfilingIntegration } from "@sentry/profiling-node";
Sentry.init({
dsn: "...",
integrations: [nodeProfilingIntegration()],
tracesSampleRate: 1.0,
profilesSampleRate: 1.0,
});
```
## Best Practices
1. Start with low sample rates, increase as needed
2. Use dynamic sampling for important transactions
3. Propagate trace context to all services
4. Add meaningful span descriptions
5. Track business-critical user flows
6. Use custom metrics for business KPIs
7. Enable profiling for performance-critical code
More from TheBushidoCollective/han
- absinthe-resolversUse when implementing GraphQL resolvers with Absinthe. Covers resolver patterns, dataloader integration, batching, and error handling.
- absinthe-schemaUse when designing GraphQL schemas with Absinthe. Covers type definitions, interfaces, unions, enums, and schema organization patterns.
- absinthe-subscriptionsUse when implementing real-time GraphQL subscriptions with Absinthe. Covers Phoenix channels, PubSub, and subscription patterns.
- act-docker-setupUse when configuring Docker environments for act, selecting runner images, managing container resources, or troubleshooting Docker-related issues with local GitHub Actions testing.
- act-local-testingUse when testing GitHub Actions workflows locally with act. Covers act CLI usage, Docker configuration, debugging workflows, and troubleshooting common issues when running workflows on your local machine.
- act-workflow-syntaxUse when creating or modifying GitHub Actions workflow files. Provides guidance on workflow syntax, triggers, jobs, steps, and expressions for creating valid GitHub Actions workflows that can be tested locally with act.
- ameba-configurationUse when configuring Ameba rules and settings for Crystal projects including .ameba.yml setup, rule management, severity levels, and code quality enforcement.
- ameba-custom-rulesUse when creating custom Ameba rules for Crystal code analysis including rule development, AST traversal, issue reporting, and rule testing.
- ameba-integrationUse when integrating Ameba into development workflows including CI/CD pipelines, pre-commit hooks, GitHub Actions, and automated code review processes.
- analyze-performanceAnalyze performance metrics and identify slow transactions in Sentry