sentry-architecture-variants
jeremylongshore/claude-code-plugins-plus-skills
Padrões de arquitetura do Sentry para diferentes tipos de aplicativos. Use-os ao configurar o Sentry para arquiteturas monolíticas, de microsserviços, sem servidor ou híbridas.Acionar com frases como “configuração do Sentry para monólitos”, “microsserviços do Sentry”, “Sentry sem servidor” e “padrão de arquitetura do Sentry”.
...Expandir tudoSobre sentry-architecture-variants
A skill “sentry-architecture-variants ” foi projetada para otimizar a instalação e a configuração do Sentry em diversas arquiteturas de aplicativos. Ela simplifica o processo de implementação do Sentry em diferentes tipos de sistemas, incluindo arquiteturas monolíticas, de microsserviços, sem servidor e híbridas. Essa skill automatiza a instalação de recursos essenciais, como estrutura de projeto, rastreamento, isolamento de locatários e controles de acesso da equipe, garantindo que a configuração do Sentry esteja alinhada às necessidades específicas da arquitetura. Ao automatizar essas tarefas, a skill reduz o esforço manual necessário e acelera a implantação do Sentry em ambientes complexos.
Os principais recursos dessa skill incluem a criação de configurações adequadas do Sentry, adaptadas para cada arquitetura, incluindo a configuração de rastreamento distribuído para microsserviços, aplicativos sem servidor e sistemas híbridos. A skill também oferece suporte à integração do monitoramento de funções de borda, à propagação do contexto de rastreamento da fila de mensagens e aos controles de acesso baseados em equipes. Ela garante que a estrutura do projeto corresponda à topologia da aplicação e permite o gerenciamento fácil do acesso e do rastreamento entre diferentes componentes. Essa abordagem abrangente garante que o Sentry seja configurado para monitorar e gerenciar relatórios de erros e o monitoramento de desempenho de maneira eficaz.
A habilidade “sentry-architecture-variants ” é ideal para equipes responsáveis pela configuração e manutenção do Sentry em aplicativos que utilizam diversas arquiteturas. É útil para profissionais de DevOps, administradores de sistemas e engenheiros que trabalham com aplicativos monolíticos, microsserviços ou sistemas híbridos baseados em nuvem. Essa habilidade ajuda a otimizar a configuração do Sentry e garante que as ferramentas de monitoramento estejam corretamente configuradas para atender às necessidades específicas de cada tipo de aplicativo, desde configurações centralizadas até sistemas distribuídos complexos com múltiplos serviços e locatários.
Perguntas frequentes
Como aciono essa habilidade?
Você pode acionar essa habilidade usando frases como “sentry monolith setup”, “sentry microservices”, “sentry serverless” ou “sentry architecture pattern”.
Essa habilidade é compatível com todos os tipos de aplicativos?
Sim, esta habilidade foi projetada para funcionar com arquiteturas monolíticas, de microsserviços, sem servidor e híbridas.
Quais são os pré-requisitos para usar essa habilidade?
Antes de usar essa habilidade, certifique-se de que a arquitetura da sua aplicação esteja documentada, que você tenha um inventário de serviços, que a responsabilidade da equipe esteja definida e que o modelo de implantação seja compreendido.
Essa habilidade oferece suporte a aplicativos multilocatários?
Sim, a habilidade inclui a capacidade de adicionar tags de isolamento de locatário para aplicativos multilocatários.
Quais ferramentas são necessárias para usar essa habilidade?
Esta habilidade requer as ferramentas: Read, Write, Edit e Grep.
Sentry Architecture Variants
Overview
Choose the right Sentry SDK, project layout, and tracing strategy for eachapplication architecture. Every pattern below uses Sentry SDK v8 APIs —@sentry/node, @sentry/browser, @sentry/react, @sentry/react-native,@sentry/aws-serverless, and @sentry/google-cloud-serverless. The goal isone coherent trace from the user's device through every backend hop, regardlessof how many runtimes or deployment targets sit in between.
Deep-dive references for each pattern:Monolith |Microservices |Serverless |Event-driven |Frontend SPA |Mobile |Hybrid |Errors
Prerequisites
- Node.js 18+ (or target platform runtime)
- Sentry organization with at least one project created at sentry.io
SENTRY_DSNavailable as an environment variable (one per Sentry project)- Application architecture documented — service inventory, deployment targets, team ownership mapped
- For distributed tracing: all inter-service transports identified (HTTP, gRPC, Kafka, SQS)
Instructions
Step 1 — Identify Your Architecture and Select SDK Packages
Map every runtime in your system to the correct Sentry SDK package and project layout.
| Architecture | SDK Package | Sentry Projects | Key Integration |
|---|---|---|---|
| Monolith | @sentry/node | 1 project, env tags | Module tags + ownership rules |
| Microservices | @sentry/node (per service) | 1 project per service | Distributed tracing via headers |
| Serverless (Lambda) | @sentry/aws-serverless | 1 per function group | Sentry.wrapHandler() + auto-flush |
| Serverless (GCP) | @sentry/google-cloud-serverless | 1 per function group | Sentry.wrapCloudEventFunction() |
| Event-driven (Kafka/SQS) | @sentry/node | 1 per consumer group | continueTrace() from message headers |
| Frontend SPA | @sentry/browser or @sentry/react | 1 frontend project | browserTracingIntegration() |
| Mobile (React Native) | @sentry/react-native | 1 mobile project | Native crash reporting + JS errors |
| Hybrid | Mix of above | 1 per deployment target | Cross-platform trace correlation |
Install the SDK for your architecture:
# Monolith / Microservices / Event-drivennpm install @sentry/node @sentry/profiling-node# Serverless — AWS Lambdanpm install @sentry/aws-serverless# Serverless — Google Cloud Functionsnpm install @sentry/google-cloud-serverless# Frontend SPA (React)npm install @sentry/react# Mobile — React Nativenpx @sentry/wizard@latest -i reactNative
Step 2 — Initialize Sentry for Each Architecture Pattern
Monolith — Single Project, Module Tags
One DSN, one project. Separate concerns with module tags and team ownership rules.
// instrument.mjs — load via: node --import ./instrument.mjs app.jsimport * as Sentry from '@sentry/node';Sentry.init({ dsn: process.env.SENTRY_DSN, environment: process.env.NODE_ENV, release: process.env.APP_VERSION, tracesSampleRate: 0.1, initialScope: { tags: { app: 'monolith' } },});// Tag errors by module so each team sees only their issuesfunction captureModuleError(module: string, error: Error) { Sentry.withScope((scope) => { scope.setTag('module', module); scope.setTag('team', getTeamForModule(module)); Sentry.captureException(error); });}// Module-based breadcrumbs for traceabilitySentry.addBreadcrumb({ category: 'auth', message: 'Login attempt', level: 'info' });captureModuleError('auth', new Error('Token expired'));// Dashboard ownership: tags.module:auth → #platform-team
Microservices — Project-per-Service, Distributed Tracing
Each service gets its own Sentry project. A shared config package keeps init consistent.
// packages/sentry-config/index.ts — shared across all servicesimport * as Sentry from '@sentry/node';export function initServiceSentry(serviceName: string) { Sentry.init({ dsn: process.env.SENTRY_DSN, environment: process.env.NODE_ENV, release: `${serviceName}@${process.env.APP_VERSION}`, serverName: serviceName, tracesSampleRate: 0.1, sendDefaultPii: false, initialScope: { tags: { service: serviceName, cluster: process.env.K8S_CLUSTER || 'default', namespace: process.env.K8S_NAMESPACE || 'default', }, }, });}// Usage: initServiceSentry('api-gateway');
HTTP tracing works automatically — SDK v8 propagates sentry-trace and baggage headers on all outbound HTTP requests. For service mesh (Istio/Linkerd), headers pass through transparently. For non-HTTP transports (gRPC, message queues), see event-driven pattern below and microservices deep-dive.
Serverless — Lambda and Cloud Functions
Serverless SDKs wrap your handler to auto-capture errors and flush events before the runtime freezes.
// AWS Lambda — handler.tsimport * as Sentry from '@sentry/aws-serverless';Sentry.init({ dsn: process.env.SENTRY_DSN, environment: process.env.STAGE, tracesSampleRate: 0.1,});export const handler = Sentry.wrapHandler(async (event, context) => { Sentry.setTag('function', context.functionName); Sentry.setTag('region', process.env.AWS_REGION); // Track cold starts const isColdStart = !global.__sentryWarm; global.__sentryWarm = true; Sentry.setTag('cold_start', String(isColdStart)); const result = await processRequest(event); return { statusCode: 200, body: JSON.stringify(result) };});// wrapHandler auto-calls flush() — do NOT call it yourself (double-flush causes timeout)
// Google Cloud Functions — index.tsimport * as Sentry from '@sentry/google-cloud-serverless';Sentry.init({ dsn: process.env.SENTRY_DSN, tracesSampleRate: 0.1 });export const httpHandler = Sentry.wrapHttpFunction(async (req, res) => { res.json(await processRequest(req.body));});export const eventHandler = Sentry.wrapCloudEventFunction(async (event) => { await processEvent(event.data);});
Event-Driven — Kafka, SQS, and Message Queues
Propagate trace context through message headers so consumer spans connect to producer traces.
import * as Sentry from '@sentry/node';// Producer: embed trace context in message headersasync function publishToKafka(topic: string, payload: object) { const activeSpan = Sentry.getActiveSpan(); const headers: Record<string, string> = {}; if (activeSpan) { headers['sentry-trace'] = Sentry.spanToTraceHeader(activeSpan); headers['baggage'] = Sentry.spanToBaggageHeader(activeSpan) || ''; } await Sentry.startSpan( { name: `kafka.produce.${topic}`, op: 'queue.publish' }, () => kafka.send({ topic, messages: [{ value: JSON.stringify(payload), headers }] }) );}// Consumer: continue the producer's traceasync function consumeFromKafka(message: KafkaMessage) { const headers = message.headers || {}; Sentry.continueTrace( { sentryTrace: headers['sentry-trace']?.toString(), // Buffer → string baggage: headers['baggage']?.toString(), }, () => { Sentry.startSpan( { name: `kafka.consume.${message.topic}`, op: 'queue.process' }, async (span) => { try { await processMessage(message); span.setStatus({ code: 1 }); } catch (error) { span.setStatus({ code: 2, message: 'consumer_error' }); Sentry.captureException(error); throw error; } } ); } );}
For SQS consumers on Lambda, see event-driven deep-dive.
Frontend SPA — Browser and React
import * as Sentry from '@sentry/react';Sentry.init({ dsn: process.env.REACT_APP_SENTRY_DSN, release: process.env.REACT_APP_VERSION, tracesSampleRate: 0.1, replaysOnErrorSampleRate: 1.0, integrations: [ Sentry.browserTracingIntegration(), Sentry.replayIntegration({ maskAllText: true, blockAllMedia: true }), ], // Must match your API domain or frontend-to-backend traces break tracePropagationTargets: ['localhost', /^https:\/\/api\.yourapp\.com/],});
Route-based transactions, error boundaries, and session replay configuration: see frontend SPA deep-dive.
Mobile — React Native
import * as Sentry from '@sentry/react-native';Sentry.init({ dsn: process.env.SENTRY_DSN, tracesSampleRate: 0.2, integrations: [ Sentry.reactNativeTracingIntegration({ routingInstrumentation: Sentry.reactNavigationIntegration(), }), ], tracePropagationTargets: [/^https:\/\/api\.yourapp\.com/], enableNativeCrashHandling: true, attachScreenshot: true, attachViewHierarchy: true,});export default Sentry.wrap(App);// Upload source maps + dSYMs in CI — see mobile deep-dive
Full navigation instrumentation and CI upload commands: see mobile deep-dive.
Step 3 — Wire Up Hybrid and Cross-Platform Tracing
For systems that span multiple architectures, connect traces end-to-end. The trace flow for a typical hybrid system:
@sentry/reactcreates a transaction on user click- Browser SDK adds
sentry-trace+baggageheaders tofetch() - API gateway (
@sentry/node) auto-continues the trace - API gateway calls payment-service — headers propagate via HTTP
- payment-service publishes to Kafka — headers injected manually (see event-driven pattern)
- Worker (
@sentry/node) continues trace from Kafka headers
Result: single trace ID visible across all services in Sentry Trace View. Backend-to-frontend correlation requires tracePropagationTargets in the browser SDK matching your API domains. Without this, the browser SDK will not attach trace headers and traces break at the browser-to-server boundary. See hybrid deep-dive.
Architecture decision matrix:
| Architecture | Projects | Tracing Strategy | SDK Flush | Key Gotcha |
|---|---|---|---|---|
| Monolith | 1 | Single-service spans | Automatic | Module tag cardinality — keep under 50 |
| Microservices | 1 per service | Distributed via HTTP headers | Automatic | Missing baggage breaks sampling |
| Serverless | 1 per function group | Per-invocation, auto-flush | wrapHandler() | Double-flush causes timeout |
| Event-driven | 1 per consumer group | continueTrace() from headers | Manual periodic | DLQ needs separate error capture |
| Frontend SPA | 1 | browserTracingIntegration() | Automatic (beacon) | tracePropagationTargets required |
| Mobile | 1 | reactNativeTracingIntegration() | Automatic | Source maps + dSYMs required |
| Hybrid | Mix of above | End-to-end header propagation | Per-component | One missing link breaks whole trace |
Output
After applying the appropriate pattern, you will have:
- Architecture-specific
Sentry.init()configuration with correct SDK package - Distributed tracing connected across all services (HTTP, gRPC, and message queues)
- Serverless handlers wrapped with automatic error capture and event flushing
- Event-driven consumers that continue producer traces via message headers
- Frontend SPA with route-based transactions, session replay, and backend trace correlation
- Mobile app with native crash reporting, screenshot capture, and navigation tracing
- Hybrid systems with end-to-end trace visibility from browser/mobile through every backend hop
Error Handling
| Error | Cause | Solution |
|---|---|---|
| Distributed traces broken | Missing header propagation | Verify sentry-trace AND baggage headers in every inter-service call |
| Lambda events lost after timeout | Calling flush() inside wrapHandler | Remove manual flush() — wrapHandler auto-flushes |
| Kafka consumer traces disconnected | Headers not serialized as strings | Call .toString() on Kafka message headers before continueTrace() |
| SPA traces stop at API boundary | tracePropagationTargets missing | Add API domain regex to browser SDK init |
| React Native traces unreadable | Missing source maps / dSYMs | Run sentry-cli sourcemaps upload and sentry-cli upload-dif in CI |
| Multi-tenant data leakage | setTag() at global scope | Use withScope() per request — global tags persist across requests |
| Worker events silently dropped | No periodic flush | Add setInterval(() => Sentry.flush(2000), 30_000) |
| High cardinality alert | Dynamic values in span names | Use parameterized names: kafka.consume.orders not kafka.consume.order-12345 |
See also: Full error reference
Examples
Example 1 — Monolith with 5 teams:Request: "Set up Sentry for a monolith with auth, billing, inventory, shipping, and analytics modules."Result: Single Sentry project with module and team tags. Each team filters issues via tags.module:billing. Ownership rules route alerts to the correct Slack channel.
Example 2 — Microservices with Kafka:Request: "Configure Sentry for 12 microservices communicating via REST and Kafka."Result: 12 Sentry projects with shared initServiceSentry(). HTTP traces auto-propagate. Kafka producers inject sentry-trace/baggage into headers. Consumers call continueTrace(). Trace view: api-gateway -> order-service -> [kafka] -> fulfillment-worker.
Example 3 — Serverless API on Lambda:Request: "Add Sentry to 8 AWS Lambda functions behind API Gateway."Result: One Sentry project. Each handler wrapped with Sentry.wrapHandler(). Cold starts tagged. No manual flush() calls.
Example 4 — React SPA + Node API:Request: "Full-stack Sentry for a React frontend calling a Node.js Express API."Result: Two projects (frontend + backend). React uses @sentry/react with browserTracingIntegration() and replayIntegration(). tracePropagationTargets connects frontend to backend traces.
See also: Full examples
Resources
- Node.js SDK Guide
- AWS Lambda Guide
- Google Cloud Functions Guide
- React SDK Guide
- React Native SDK Guide
- Distributed Tracing
- Session Replay
- Performance Monitoring
Next Steps
- Run the
sentry-performance-tuningskill to optimizetracesSampleRateandtracesSamplerfor production traffic volumes - Use
sentry-cost-tuningto set rate limits and event budgets per project - Configure
sentry-deploy-integrationto tie releases to deploys for regression detection - Set up
sentry-multi-env-setupto manage DSN routing across staging/production - Apply
sentry-reliability-patternsfor retry logic and circuit breakers around Sentry calls
Instalar sentry-architecture-variants
Baixe e extraia os arquivos de habilidades para o diretório .claude/skills/.
Baixar ZIPClone o repositório e copie os arquivos da habilidade para o seu projeto.
git clone https://github.com/jeremylongshore/claude-code-plugins-plus-skills/blob/main/plugins/saas-packs/sentry-pack/skills/sentry-architecture-variants/SKILL.md # Copy SKILL.md to your .claude/skills/ directory
Copiar





Lar
