Agent Skills by ALSEL
Anthropic ClaudeLLM・AI開発⭐ リポ 0品質スコア 50/100

sentry-nestjs-sdk

NestJS向けのSentry SDKを完全にセットアップします。「NestJSにSentryを追加したい」「@sentry/nestjsをインストールしたい」といった要望や、エラー監視・トレーシング・プロファイリング・ロギング・メトリクス・cronジョブ・AI監視の設定が必要な場合に使用します。Express・FastifyアダプターのほかGraphQL・マイクロサービス・WebSocket・バックグラウンドジョブにも対応しています。

description の原文を見る

Full Sentry SDK setup for NestJS. Use when asked to "add Sentry to NestJS", "install @sentry/nestjs", "setup Sentry in NestJS", or configure error monitoring, tracing, profiling, logging, metrics, crons, or AI monitoring for NestJS applications. Supports Express and Fastify adapters, GraphQL, microservices, WebSockets, and background jobs.

SKILL.md 本文

すべてのスキル > SDK セットアップ > NestJS SDK

Sentry NestJS SDK

NestJSプロジェクトをスキャンして、完全なSentryセットアップをガイドする意見主張型ウィザード。

このスキルを呼び出すタイミング

  • ユーザーがNestJSアプリで「Sentryを追加する」または「Sentryをセットアップする」と尋ねた場合
  • ユーザーがNestJSでエラー監視、トレーシング、プロファイリング、ロギング、メトリクス、またはcronsを希望している場合
  • ユーザーが @sentry/nestjs またはSentry + NestJSに言及した場合
  • ユーザーがNestJSコントローラー、サービス、ガード、マイクロサービス、またはバックグラウンドジョブを監視したい場合

注: 以下のSDKバージョンとAPIは @sentry/nestjs 10.x(NestJS 8–11サポート)を反映しています。 実装前に必ず docs.sentry.io/platforms/node/guides/nestjs/ で確認してください。


フェーズ 1: 検出

推奨を行う前にプロジェクトを理解するために、以下のコマンドを実行します:

# NestJSプロジェクトの確認
grep -E '"@nestjs/core"' package.json 2>/dev/null

# NestJSバージョン確認
node -e "console.log(require('./node_modules/@nestjs/core/package.json').version)" 2>/dev/null

# 既存のSentry確認
grep -i sentry package.json 2>/dev/null
ls src/instrument.ts 2>/dev/null
grep -r "Sentry.init\|@sentry" src/main.ts src/instrument.ts 2>/dev/null

# 既存のSentry DIラッパー確認(NestJSエンタープライズで一般的)
grep -rE "SENTRY.*TOKEN|SentryProxy|SentryService" src/ libs/ 2>/dev/null

# 設定クラスベースの初期化確認(vs env変数ベース)
grep -rE "class SentryConfig|SentryConfig" src/ libs/ 2>/dev/null

# 共有モジュールで SentryModule.forRoot() が既に登録されているかを確認
grep -rE "SentryModule\.forRoot|SentryProxyModule" src/ libs/ 2>/dev/null

# HTTPアダプター検出(デフォルトはExpress)
grep -E "FastifyAdapter|@nestjs/platform-fastify" package.json src/main.ts 2>/dev/null

# GraphQL検出
grep -E '"@nestjs/graphql"|"apollo-server"' package.json 2>/dev/null

# マイクロサービス検出
grep '"@nestjs/microservices"' package.json 2>/dev/null

# WebSocket検出
grep -E '"@nestjs/websockets"|"socket.io"' package.json 2>/dev/null

# タスクキュー/スケジュール済みジョブ検出
grep -E '"@nestjs/bull"|"@nestjs/bullmq"|"@nestjs/schedule"|"bullmq"|"bull"' package.json 2>/dev/null

# データベース検出
grep -E '"@prisma/client"|"typeorm"|"mongoose"|"pg"|"mysql2"' package.json 2>/dev/null

# AIライブラリ検出
grep -E '"openai"|"@anthropic-ai"|"langchain"|"@langchain"|"@google/generative-ai"|"ai"' package.json 2>/dev/null

# コンパニオンフロントエンド確認
ls -d ../frontend ../web ../client ../ui 2>/dev/null

注意すべきこと:

  • @sentry/nestjs は既にインストール済みですか?はいの場合、instrument.ts が存在し Sentry.init() が呼び出されているか確認します。機能設定のみが必要な場合があります。
  • Sentry DIラッパーが検出された? → プロジェクトはテスト性のためにSentryをDIトークン(例:SENTRY_PROXY_TOKEN)の背後にラップしています。すべてのランタイムSentry呼び出し(startSpancaptureExceptionwithIsolationScope)には、コントローラー、サービス、プロセッサーで @sentry/nestjs を直接インポートする代わりに、注入されたプロキシを使用します。instrument.ts のみが @sentry/nestjs を直接インポートするべきです。
  • 設定クラスが検出された? → プロジェクトは Sentry.init() オプション用に型付き設定クラスを使用します(例:YAMLまたは @nestjs/config から読み込まれます)。新しいSDKオプション(例:sendDefaultPiiprofileSessionSampleRate)を追加する場合は、設定型に追加する必要があります。環境ごとに設定可能であるべき値をハードコードしないでください。
  • SentryModule.forRoot() は既に登録されていますか? → 共有モジュール(例:Sentryプロキシモジュール)にある場合は、AppModule に再度追加しないでください。これにより、インターセプターが重複して登録されます。
  • ExpressまたはFastifyアダプター?Expressは完全にサポートされています。Fastifyは機能しますが、既知のエッジケースがあります。
  • GraphQL検出されましたか?→ SentryGlobalFilter はネイティブに処理します。
  • マイクロサービス検出されましたか?→ RPC例外フィルターをお勧めします。
  • タスクキュー/@nestjs/schedule?→ cronをお勧めします。
  • AIライブラリ?→ 自動計測、ゼロ設定。
  • Prisma?→ 手動の prismaIntegration() が必要です。
  • コンパニオンフロントエンド?→ フェーズ4のクロスリンクをトリガーします。

フェーズ 2: 推奨

検出したものに基づいて、具体的な提案を提示します。オープンエンドな質問はしません。推奨で主導します:

常に推奨(コアカバレッジ):

  • エラー監視 — HTTP、GraphQL、RPC、およびWebSocketコンテキスト全体で未処理の例外をキャプチャします
  • トレーシング — ミドルウェア、ガード、パイプ、インターセプター、フィルター、およびルートハンドラーを自動計測します

検出時に推奨:

  • プロファイリング — CPU性能が重要な本番アプリ(@sentry/profiling-node
  • ロギング — 構造化Sentry Logs +オプションのコンソールキャプチャ
  • Crons@nestjs/schedule、Bull、またはBullMQ検出時
  • メトリクス — ビジネスKPIまたはSLOトラッキング
  • AI監視 — OpenAI/Anthropic/LangChain/等検出時(自動計測、ゼロ設定)

推奨マトリックス:

機能推奨するタイミング...リファレンス
エラー監視常に — 交渉の余地のない基本的な要件${SKILL_ROOT}/references/error-monitoring.md
トレーシング常に — NestJSライフサイクルは自動計測${SKILL_ROOT}/references/tracing.md
プロファイリング本番環境 + CPU集約的なワークロード${SKILL_ROOT}/references/profiling.md
ロギング常に;構造化ログ集約用に強化${SKILL_ROOT}/references/logging.md
メトリクスカスタムビジネスKPIまたはSLOトラッキング${SKILL_ROOT}/references/metrics.md
Crons@nestjs/schedule、Bull、またはBullMQ検出時${SKILL_ROOT}/references/crons.md
AI監視OpenAI/Anthropic/LangChain/等検出時${SKILL_ROOT}/references/ai-monitoring.md

提案:「エラー監視 + トレーシング + ロギングをお勧めします。プロファイリング、Crons、またはAI監視も追加しますか?」


フェーズ 3: ガイド

インストール

# コアSDK(常に必須 — @sentry/nodeを含む)
npm install @sentry/nestjs

# プロファイリングサポート付き(オプション)
npm install @sentry/nestjs @sentry/profiling-node

⚠️ @sentry/node@sentry/nestjs と共にインストールしないでください@sentry/nestjs@sentry/node からすべてを再エクスポートしています。両方をインストールするとダブル登録が発生します。

3ファイルセットアップ(必須)

NestJSはセットアップパターンを特定する必要があります。Sentry SDKはNode.jsモジュール(OpenTelemetry経由)パッチを当てる必要があり、NestJSがロードする前に行う必要があります。

**新しいファイルを作成する前に、**フェーズ1の結果を確認してください。

  • instrument.ts が既に存在する場合 → 新しいものを作成せず、それを変更してください。
  • 設定クラスが Sentry.init() を駆動する場合 → env変数をハードコードする代わりに設定から オプションを読み込みます。
  • Sentry DIラッパーが存在する場合 → サービス/コントローラーで @sentry/nestjs を直接インポートする代わりに、それを使用します。

ステップ 1: src/instrument.ts を作成

import * as Sentry from "@sentry/nestjs";
// オプション: プロファイリングを追加
// import { nodeProfilingIntegration } from "@sentry/profiling-node";

Sentry.init({
  dsn: process.env.SENTRY_DSN,
  environment: process.env.SENTRY_ENVIRONMENT ?? "production",
  release: process.env.SENTRY_RELEASE,
  sendDefaultPii: true,

  // トレーシング — 本番環境の高トラフィックでは 0.1–0.2 に下げます
  tracesSampleRate: 1.0,

  // プロファイリング(@sentry/profiling-nodeが必須)
  // integrations: [nodeProfilingIntegration()],
  // profileSessionSampleRate: 1.0,
  // profileLifecycle: "trace",

  // 構造化ログ(SDK ≥ 9.41.0)
  enableLogs: true,
});

設定駆動の Sentry.init() フェーズ1で型付き設定クラス(例:SentryConfig)が見つかった場合、生の process.env を使用する代わりに、それから オプションを読み込みます。これはNestJSアプリが @nestjs/config またはカスタム設定ローダーを使用する場合に一般的です:

import * as Sentry from "@sentry/nestjs";
import { loadConfiguration } from "./config";

const config = loadConfiguration();

Sentry.init({
  dsn: config.sentry.dsn,
  environment: config.sentry.environment ?? "production",
  release: config.sentry.release,
  sendDefaultPii: config.sentry.sendDefaultPii ?? true,
  tracesSampleRate: config.sentry.tracesSampleRate ?? 1.0,
  profileSessionSampleRate: config.sentry.profilesSampleRate ?? 1.0,
  profileLifecycle: "trace",
  enableLogs: true,
});

新しいSDKオプション(例:sendDefaultPiiprofileSessionSampleRate)を追加する場合は、設定型に追加して、環境ごとに設定できるようにします。

ステップ 2: src/main.tsinstrument.ts を最初にインポート

// instrument.ts は最初のインポート — NestJSまたはその他のモジュールの前
import "./instrument";

import { NestFactory } from "@nestjs/core";
import { AppModule } from "./app.module";

async function bootstrap() {
  const app = await NestFactory.create(AppModule);

  // グレースフルシャットダウンを有効にする — SIGTERM/SIGINTでSentryイベントをフラッシュします
  app.enableShutdownHooks();

  await app.listen(3000);
}
bootstrap();

なぜ最初? OpenTelemetryは httpexpress、データベースドライバー、およびその他のモジュールにモンキーパッチを当てる必要があります。instrument.ts の前にロードされるモジュールは自動計測されません。

ステップ 3: src/app.module.tsSentryModuleSentryGlobalFilter を登録

import { Module } from "@nestjs/common";
import { APP_FILTER } from "@nestjs/core";
import { SentryModule, SentryGlobalFilter } from "@sentry/nestjs/setup";
import { AppController } from "./app.controller";
import { AppService } from "./app.service";

@Module({
  imports: [
    SentryModule.forRoot(), // グローバルに SentryTracingInterceptor を登録
  ],
  controllers: [AppController],
  providers: [
    AppService,
    {
      provide: APP_FILTER,
      useClass: SentryGlobalFilter, // すべての未処理例外をキャプチャ
    },
  ],
})
export class AppModule {}

各ピースの機能:

  • SentryModule.forRoot() — グローバルな APP_INTERCEPTOR として SentryTracingInterceptor を登録し、HTTPトランザクション命名を有効にします
  • SentryGlobalFilterBaseExceptionFilter を拡張し、HTTP、GraphQL(HttpException を再スローしてレポートなし)、およびRPCコンテキスト全体で例外をキャプチャします

⚠️ SentryModule.forRoot() を2回登録しないでください。 フェーズ1で共有ライブラリモジュール(例:SentryProxyModule または AnalyticsModule)で既にインポートされていることが判明した場合は、AppModule に再度追加しないでください。重複登録により、すべてのスパンがインターセプターで2回処理され、トレースデータが膨れ上がります。

⚠️ 2つのエントリーポイント、異なるインポート:

  • @sentry/nestjs → SDK初期化、キャプチャAPI、デコレーター(SentryTracedSentryCronSentryExceptionCaptured
  • @sentry/nestjs/setup → NestJS DIコンストラクト(SentryModuleSentryGlobalFilter

@sentry/nestjs(メインエントリーポイント)から SentryModule をインポートしないでください。OpenTelemetryがパッチを当てる前に @nestjs/common をロードし、自動計測が破壊されます。

ESMセットアップ(Node ≥ 18.19.0)

ESMアプリケーションの場合、ファイルインポートの代わりに --import を使用します:

// instrument.mjs
import * as Sentry from "@sentry/nestjs";

Sentry.init({
  dsn: process.env.SENTRY_DSN,
  tracesSampleRate: 1.0,
});
// package.json
{
  "scripts": {
    "start": "node --import ./instrument.mjs -r ts-node/register src/main.ts"
  }
}

または環境経由:

NODE_OPTIONS="--import ./instrument.mjs" npm run start

例外フィルター オプション

既存のアーキテクチャに適したアプローチを選択します:

オプション A: 既存のグローバルフィルターなし — SentryGlobalFilter を使用(推奨)

上記のステップ3で既にカバーされています。これが最も簡単なオプションです。

オプション B: 既存のカスタムグローバルフィルター — @SentryExceptionCaptured() デコレーターを追加

import { Catch, ExceptionFilter, ArgumentsHost } from "@nestjs/common";
import { SentryExceptionCaptured } from "@sentry/nestjs";

@Catch()
export class YourExistingFilter implements ExceptionFilter {
  @SentryExceptionCaptured() // catch() をラップして自動的に例外をレポート
  catch(exception: unknown, host: ArgumentsHost): void {
    // 既存のエラーハンドリングは変わりません
  }
}

オプション C: 特定の例外タイプ — 手動キャプチャ

import { ArgumentsHost, Catch } from "@nestjs/common";
import { BaseExceptionFilter } from "@nestjs/core";
import * as Sentry from "@sentry/nestjs";

@Catch(ExampleException)
export class ExampleExceptionFilter extends BaseExceptionFilter {
  catch(exception: ExampleException, host: ArgumentsHost) {
    Sentry.captureException(exception);
    super.catch(exception, host);
  }
}

オプション D: マイクロサービスRPC例外

import { Catch, RpcExceptionFilter, ArgumentsHost } from "@nestjs/common";
import { Observable, throwError } from "rxjs";
import { RpcException } from "@nestjs/microservices";
import * as Sentry from "@sentry/nestjs";

@Catch(RpcException)
export class SentryRpcFilter implements RpcExceptionFilter<RpcException> {
  catch(exception: RpcException, host: ArgumentsHost): Observable<any> {
    Sentry.captureException(exception);
    return throwError(() => exception.getError());
  }
}

デコレーター

@SentryTraced(op?) — 任意のメソッドを計測

import { Injectable } from "@nestjs/common";
import { SentryTraced } from "@sentry/nestjs";

@Injectable()
export class OrderService {
  @SentryTraced("order.process")
  async processOrder(orderId: string): Promise<void> {
    // 自動的にSentryスパンでラップされます
  }

  @SentryTraced()  // デフォルトは op: "function"
  async fetchInventory() { ... }
}

@SentryCron(slug, config?) — スケジュール済みジョブを監視

import { Injectable } from "@nestjs/common";
import { Cron } from "@nestjs/schedule";
import { SentryCron } from "@sentry/nestjs";

@Injectable()
export class ReportService {
  @Cron("0 * * * *")
  @SentryCron("hourly-report", {
    // @SentryCron は @Cron の後に来る必要があります
    schedule: { type: "crontab", value: "0 * * * *" },
    checkinMargin: 2, // マークされるまでの分数
    maxRuntime: 10, // 最大実行時間(分)
    timezone: "UTC",
  })
  async generateReport() {
    // チェックイン自動送信(開始/成功/失敗時)
  }
}

バックグラウンドジョブ スコープ分離

バックグラウンドジョブはデフォルトの分離スコープを共有します。Sentry.withIsolationScope() でラップして、クロス汚染を防止します:

import * as Sentry from "@sentry/nestjs";
import { Injectable } from "@nestjs/common";
import { Cron, CronExpression } from "@nestjs/schedule";

@Injectable()
export class JobService {
  @Cron(CronExpression.EVERY_HOUR)
  handleCron() {
    Sentry.withIsolationScope(() => {
      Sentry.setTag("job", "hourly-sync");
      this.doWork();
    });
  }
}

withIsolationScope を適用:@Cron()@Interval()@OnEvent()@Processor()、およびリクエストライフサイクルの外側のコード。

Sentry DIラッパーの操作

一部のNestJSプロジェクトはテスト性とデカップリングのためにSentryを依存関係注入トークン(例:SENTRY_PROXY_TOKEN)の背後にラップします。フェーズ1がこのパターンを検出した場合、すべてのランタイムSentry呼び出しに注入されたサービスを使用します — コントローラー、サービス、またはプロセッサーで @sentry/nestjs を直接インポートしないでください。

import { Controller, Inject } from "@nestjs/common";
import { SENTRY_PROXY_TOKEN, type SentryProxyService } from "./sentry-proxy";

@Controller("orders")
export class OrderController {
  constructor(
    @Inject(SENTRY_PROXY_TOKEN) private readonly sentry: SentryProxyService,
    private readonly orderService: OrderService,
  ) {}

  @Post()
  async createOrder(@Body() dto: CreateOrderDto) {
    return this.sentry.startSpan(
      { name: "createOrder", op: "http" },
      async () => this.orderService.create(dto),
    );
  }
}

直接 @sentry/nestjs インポートが依然として正しい場所:

  • instrument.tsSentry.init() に常に import * as Sentry from "@sentry/nestjs" を使用します
  • DIコンテナの外で実行される スタンドアロンスクリプトと例外フィルター

検証

イベントがSentryに到達することを確認するテストエンドポイントを追加します:

import { Controller, Get } from "@nestjs/common";
import * as Sentry from "@sentry/nestjs";

@Controller()
export class DebugController {
  @Get("/debug-sentry")
  triggerError() {
    throw new Error("My first Sentry error from NestJS!");
  }

  @Get("/debug-sentry-span")
  triggerSpan() {
    return Sentry.startSpan({ op: "test", name: "NestJS Test Span" }, () => {
      return { status: "span created" };
    });
  }
}

GET /debug-sentry にヒットして、数秒以内にSentryイシューダッシュボードで確認します。

同意された機能ごと

機能を1つずつウォークスルーします。リファレンスをロード、手順に従い、先に進む前に検証します:

機能リファレンスファイルロード時期...
エラー監視${SKILL_ROOT}/references/error-monitoring.md常に(基本)
トレーシング${SKILL_ROOT}/references/tracing.md常に(NestJSルート自動追跡)
プロファイリング${SKILL_ROOT}/references/profiling.mdCPU集約的な本番アプリ
ロギング${SKILL_ROOT}/references/logging.md構造化ログ集約が必要
メトリクス${SKILL_ROOT}/references/metrics.mdカスタムKPI/SLOトラッキング
Crons${SKILL_ROOT}/references/crons.mdスケジュール済みジョブまたはタスクキュー
AI監視${SKILL_ROOT}/references/ai-monitoring.mdOpenAI/Anthropic/LangChain検出

各機能について:${SKILL_ROOT}/references/<feature>.md を読む、手順に正確に従う、それが機能することを検証します。


設定リファレンス

キー Sentry.init() オプション

オプションデフォルト目的
dsnstring空の場合はSDK無効;env: SENTRY_DSN
environmentstring"production"例:"staging";env: SENTRY_ENVIRONMENT
releasestring例:"myapp@1.0.0";env: SENTRY_RELEASE
sendDefaultPiibooleanfalseIPアドレスとリクエストヘッダーを含める
tracesSampleRatenumberトランザクションサンプルレート;undefined はトレーシングを無効化
tracesSamplerfunctionカスタムトランザクションごとのサンプリング(レートをオーバーライド)
tracePropagationTargetsArray<string|RegExp>sentry-trace/baggage ヘッダーを伝播するURL
profileSessionSampleRatenumber継続的プロファイリングセッションレート(SDK ≥ 10.27.0)
profileLifecycle"trace"|"manual""trace""trace" = スパンでプロファイラーを自動開始;"manual" = 呼び出し
enableLogsbooleanfalse構造化ログをSentryに送信(SDK ≥ 9.41.0)
ignoreErrorsArray<string|RegExp>[]抑制するエラーメッセージパターン
ignoreTransactionsArray<string|RegExp>[]抑制するトランザクション名パターン
beforeSendfunctionエラーイベントを変異またはドロップするフック
beforeSendTransactionfunctionトランザクションイベントを変異またはドロップするフック
beforeSendLogfunctionログイベントを変異またはドロップするフック
debugbooleanfalse詳細なSDKデバッグ出力
maxBreadcrumbsnumber100イベント当たりの最大パンくず数

環境変数

変数マップ先
SENTRY_DSNdsndsninit() に渡されない場合は使用
SENTRY_RELEASEreleasegit SHA、Heroku、CircleCI から自動検出
SENTRY_ENVIRONMENTenvironment"production" にフォールバック
SENTRY_AUTH_TOKENCLI/ソースマップnpx @sentry/wizard@latest -i sourcemaps
SENTRY_ORGCLI/ソースマップOrganization slug
SENTRY_PROJECTCLI/ソースマップProject slug

自動有効化される統合

これらの統合は、パッケージが検出されると自動的にアクティブになります。integrations: [...] は不要です:

自動有効化
httpIntegrationhttp/https/fetch 経由の発信HTTP呼び出し
expressIntegrationExpressアダプター(デフォルトNestJS)
nestIntegrationNestJSライフサイクル(ミドルウェア、ガード等)
onUncaughtExceptionIntegration未処理の例外
onUnhandledRejectionIntegration未処理のPromiseリジェクション
openAIIntegrationOpenAI SDK(インストール時)
anthropicAIIntegrationAnthropic SDK(インストール時)
langchainIntegrationLangChain(インストール時)
graphqlIntegrationGraphQL(graphql パッケージ存在時)
postgresIntegrationpg ドライバー
mysqlIntegrationmysql / mysql2
mongoIntegrationMongoDB / Mongoose
redisIntegrationioredis / redis

手動セットアップが必要な統合

統合追加するタイミングコード
nodeProfilingIntegrationプロファイリング望むimport { nodeProfilingIntegration } from "@sentry/profiling-node"
prismaIntegrationPrisma ORM使用integrations: [Sentry.prismaIntegration()]
consoleLoggingIntegrationコンソール出力キャプチャintegrations: [Sentry.consoleLoggingIntegration()]
localVariablesIntegrationエラーのローカル変数値キャプチャintegrations: [Sentry.localVariablesIntegration()]

検証

Sentryがイベントを受信していることをテストします:

// テストエンドポイントを追加(本番環境前に削除)
@Get("/debug-sentry")
getError() {
  throw new Error("My first Sentry error!");
}

またはクラッシュなしでテストメッセージを送信:

import * as Sentry from "@sentry/nestjs";
Sentry.captureMessage("NestJS Sentry SDK test");

何も表示されない場合:

  1. Sentry.init()debug: true を設定 — SDK内部をstdoutに出力
  2. SENTRY_DSN env変数が実行中のプロセスで設定されていることを確認
  3. import "./instrument"main.ts最初の行 であることを確認
  4. SentryModule.forRoot()AppModule でインポートされていることを確認
  5. DSN形式を確認:https://<key>@o<org>.ingest.sentry.io/<project>

フェーズ 4: クロスリンク

NestJSセットアップ完了後、Sentryが欠落しているコンパニオンフロントエンドを確認します:

ls -d ../frontend ../web ../client ../ui 2>/dev/null
cat ../frontend/package.json ../web/package.json 2>/dev/null \
  | grep -E '"react"|"svelte"|"vue"|"next"|"nuxt"'

フロントエンドが存在しSentry がない場合は、マッチングスキルを提案します:

フロントエンド検出スキル提案
Next.jssentry-nextjs-sdk
Reactsentry-react-sdk
Svelte / SvelteKitsentry-svelte-sdk
Vue / Nuxt@sentry/vue を使用 — docs.sentry.io/platforms/javascript/guides/vue/
React Native / Exposentry-react-native-sdk

トラブルシューティング

問題ソリューション
イベントが表示されないdebug: true を設定、SENTRY_DSN を検証、instrument.ts が最初にインポートされていることを確認
形式が不正なDSNエラー形式:https://<key>@o<org>.ingest.sentry.io/<project>
例外がキャプチャされていないSentryGlobalFilterAPP_FILTER 経由で AppModule で登録されていることを確認
自動計測が機能していないinstrument.tsmain.ts最初のインポートでなければなりません — すべてのNestJSインポートの前
プロファイリングが開始されていないtracesSampleRate > 0 + profileSessionSampleRate > 0 + @sentry/profiling-node インストール要
enableLogs が機能していないSDK ≥ 9.41.0 必須
トレースが表示されないtracesSampleRate が設定されていることを確認(undefined ではない)
トランザクションが多すぎるtracesSampleRate を下げるか、tracesSampler を使用してヘルスチェック ドロップ
Fastify + GraphQL問題既知のエッジケース — GitHub #13388;GraphQL用はExpress推奨
バックグラウンドジョブイベントが混合ジョブボディを Sentry.withIsolationScope(() => { ... }) でラップ
Prismaスパンが欠落integrations: [Sentry.prismaIntegration()]Sentry.init() に追加
ESM構文エラーregisterEsmLoaderHooks: false を設定(ESMフック無効化;ESMモジュール自動計測も無効化)
SentryModule が計測を破壊@sentry/nestjs/setup からインポート、@sentry/nestjs からは絶対にインポートしない
RPC例外がキャプチャされていない専用 SentryRpcExceptionFilter を追加(例外フィルターセクション オプションD参照)
WebSocket例外がキャプチャされていないゲートウェイ handleConnection/handleDisconnect@SentryExceptionCaptured() を使用
@SentryCron がトリガーされていないデコレーター順序が重要 — @SentryCron@Cron の後に来る必要があります
TypeScriptパスエイリアス問題tsconfig.json paths が設定されていることを確認し、main.ts ロケーションから instrument が解決できるようにします
import * as Sentry ESLintエラー多くのプロジェクトは名前空間インポートを禁止します。名前付きインポート(import { startSpan, captureException } from "@sentry/nestjs")を使用するか、プロジェクトのDIプロキシを使用
profilesSampleRate vs profileSessionSampleRateprofilesSampleRate はSDK 10.x で廃止予定。代わりに profileSessionSampleRate + profileLifecycle: "trace" を使用
すべてのリクエストで重複スパンSentryModule.forRoot() が複数のモジュールで登録されています。1回だけ呼び出されていることを確認 — 共有/ライブラリモジュールを確認
instrument.ts で設定プロパティが認識されない型付き設定クラスを使用する場合、新しいSDKオプションを設定型定義に追加し、プロジェクトを再構築してからTypeScriptが認識できます

バージョン要件

機能最小SDKバージョン
@sentry/nestjs パッケージ8.0.0
@SentryTraced デコレーター8.15.0
@SentryCron デコレーター8.16.0
イベントエミッター自動計測8.39.0
SentryGlobalFilter(統一)8.40.0
Sentry.logger API(enableLogs9.41.0
profileSessionSampleRate10.27.0
Node.js要件≥ 18
ESM --import 用Node.js≥ 18.19.0
NestJS互換性8.x – 11.x

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
getsentry
リポジトリ
getsentry/sentry-for-ai
ライセンス
MIT
最終更新
不明

Source: https://github.com/getsentry/sentry-for-ai / ライセンス: MIT

関連スキル

OpenAILLM・AI開発⭐ リポ 6,054

agent-browser

AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。

by JimmyLv
汎用LLM・AI開発⭐ リポ 1,982

anyskill

AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。

by LeoYeAI
汎用LLM・AI開発⭐ リポ 1,982

engram

AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。

by LeoYeAI
汎用LLM・AI開発⭐ リポ 21,584

skyvern

AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。

by Skyvern-AI
汎用LLM・AI開発⭐ リポ 1,149

pinchbench

PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。

by pinchbench
汎用LLM・AI開発⭐ リポ 4,693

openui

OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。

by thesysdev
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: getsentry · getsentry/sentry-for-ai · ライセンス: MIT