选项
首页首页 Skill 云基础设施 sentry-architecture-variants

适用于不同应用类型的 Sentry 架构模式。在为单体应用、微服务、无服务器或混合架构配置 Sentry 时可参考这些模式。可通过“sentry 单体应用配置”、“sentry 微服务”、“sentry 无服务器”和“sentry 架构模式”等短语触发。

...展开全部
50
更新时间 2026-06-29

关于sentry-architecture-variants

“sentry-architecture-variants ”技能旨在简化在各种应用程序架构中对 Sentry 的部署和配置。它简化了在不同类型系统(包括单体架构、微服务架构、无服务器架构和混合架构)中实施 Sentry 的流程。 该技能可自动完成项目结构、追踪、租户隔离和团队访问控制等关键功能的设置,确保 Sentry 配置符合特定架构的需求。通过自动化这些任务,该技能减少了所需的人工操作,并加速了 Sentry 在复杂环境中的部署。

该技能的主要功能包括为每种架构创建量身定制的 Sentry 配置,其中包括为微服务、无服务器应用程序和混合系统设置分布式追踪。 该技能还支持边缘函数监控、消息队列追踪上下文传播以及基于团队的访问控制的集成。它确保项目结构与应用程序拓扑相匹配,并便于跨不同组件管理访问和追踪。这种全面的方法确保 Sentry 配置能够有效监控和管理错误报告及性能监控。

“sentry-architecture-variants ”技能非常适合负责在采用各种架构的应用程序中部署和维护 Sentry 的团队。 该技能对从事单体应用、微服务或混合云系统开发的 DevOps 人员、系统管理员和工程师均十分有用。它有助于简化 Sentry 的部署流程,并确保监控工具配置正确,以满足各类应用的独特需求——从集中式配置到包含多个服务和租户的复杂分布式系统。

常见问题

如何触发此技能?

您可以使用“sentry monolith setup”、“sentry microservices”、“sentry serverless”或“sentry architecture pattern”等短语来触发此技能。

该技能是否兼容所有应用程序类型?

是的,该技能专为单体架构、微服务、无服务器及混合架构设计。

使用此技能有哪些先决条件?

在使用此技能之前,请确保您的应用程序架构已记录在案,拥有服务清单,团队职责已明确,并且清楚了解部署模型。

该技能是否支持多租户应用程序?

是的,该技能支持为多租户应用程序添加租户隔离标签。

使用此技能需要哪些工具?

此技能需要以下工具:Read、Write、Edit 和 Grep。

在 GitHub 上查看

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_DSN available 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.

ArchitectureSDK PackageSentry ProjectsKey Integration
Monolith@sentry/node1 project, env tagsModule tags + ownership rules
Microservices@sentry/node (per service)1 project per serviceDistributed tracing via headers
Serverless (Lambda)@sentry/aws-serverless1 per function groupSentry.wrapHandler() + auto-flush
Serverless (GCP)@sentry/google-cloud-serverless1 per function groupSentry.wrapCloudEventFunction()
Event-driven (Kafka/SQS)@sentry/node1 per consumer groupcontinueTrace() from message headers
Frontend SPA@sentry/browser or @sentry/react1 frontend projectbrowserTracingIntegration()
Mobile (React Native)@sentry/react-native1 mobile projectNative crash reporting + JS errors
HybridMix of above1 per deployment targetCross-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:

  1. @sentry/react creates a transaction on user click
  2. Browser SDK adds sentry-trace + baggage headers to fetch()
  3. API gateway (@sentry/node) auto-continues the trace
  4. API gateway calls payment-service — headers propagate via HTTP
  5. payment-service publishes to Kafka — headers injected manually (see event-driven pattern)
  6. 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:

ArchitectureProjectsTracing StrategySDK FlushKey Gotcha
Monolith1Single-service spansAutomaticModule tag cardinality — keep under 50
Microservices1 per serviceDistributed via HTTP headersAutomaticMissing baggage breaks sampling
Serverless1 per function groupPer-invocation, auto-flushwrapHandler()Double-flush causes timeout
Event-driven1 per consumer groupcontinueTrace() from headersManual periodicDLQ needs separate error capture
Frontend SPA1browserTracingIntegration()Automatic (beacon)tracePropagationTargets required
Mobile1reactNativeTracingIntegration()AutomaticSource maps + dSYMs required
HybridMix of aboveEnd-to-end header propagationPer-componentOne 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

ErrorCauseSolution
Distributed traces brokenMissing header propagationVerify sentry-trace AND baggage headers in every inter-service call
Lambda events lost after timeoutCalling flush() inside wrapHandlerRemove manual flush()wrapHandler auto-flushes
Kafka consumer traces disconnectedHeaders not serialized as stringsCall .toString() on Kafka message headers before continueTrace()
SPA traces stop at API boundarytracePropagationTargets missingAdd API domain regex to browser SDK init
React Native traces unreadableMissing source maps / dSYMsRun sentry-cli sourcemaps upload and sentry-cli upload-dif in CI
Multi-tenant data leakagesetTag() at global scopeUse withScope() per request — global tags persist across requests
Worker events silently droppedNo periodic flushAdd setInterval(() => Sentry.flush(2000), 30_000)
High cardinality alertDynamic values in span namesUse 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-tuning skill to optimize tracesSampleRate and tracesSampler for production traffic volumes
  • Use sentry-cost-tuning to set rate limits and event budgets per project
  • Configure sentry-deploy-integration to tie releases to deploys for regression detection
  • Set up sentry-multi-env-setup to manage DSN routing across staging/production
  • Apply sentry-reliability-patterns for retry logic and circuit breakers around Sentry calls

所有文件

1 个文件

安装 sentry-architecture-variants

下载技能文件并将其解压到 .claude/skills/ 目录中。

下载ZIP

克隆仓库并复制技能文件到您的项目中。

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

复制 复制
快速设置: 将技能文件夹复制到 .claude/skills/ 目录下,Claude 会自动检测并使用该技能

相关技能

Cloudflare Manager
更新时间 2026-06-29
pinecone
更新时间 2026-06-29
azure-setup-guide
更新时间 2026-06-29
cloud
更新时间 2026-06-29
OR