@danieljvdm/dev-kit 1.0.2 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -6
- package/package.json +1 -1
- package/skill-sources.jsonc +2 -33
- package/skill-sources.lock.json +15 -117
- package/skills/animate/LICENSE +21 -0
- package/skills/animate/NOTICE +10 -0
- package/skills/animate/SKILL.md +34 -0
- package/skills/animate/references/gestures.md +27 -0
- package/skills/animate/references/glossary.md +136 -0
- package/skills/animate/references/implementation.md +22 -0
- package/skills/animate/references/opportunities.md +18 -0
- package/skills/animate/references/principles.md +48 -0
- package/skills/animate/references/review.md +19 -0
- package/skills/cloudflare-workers/LICENSE +202 -0
- package/skills/cloudflare-workers/NOTICE +9 -0
- package/skills/cloudflare-workers/SKILL.md +26 -0
- package/skills/cloudflare-workers/references/durable-objects.md +68 -0
- package/skills/cloudflare-workers/references/sandbox.md +48 -0
- package/skills/cloudflare-workers/references/workers.md +63 -0
- package/skills/cloudflare-workers/references/wrangler.md +56 -0
- package/skills/design-ui/LICENSE +21 -0
- package/skills/design-ui/NOTICE +8 -0
- package/skills/design-ui/SKILL.md +29 -0
- package/skills/design-ui/references/appearance.md +22 -0
- package/skills/design-ui/references/components.md +33 -0
- package/skills/design-ui/references/exploration.md +50 -0
- package/skills/design-ui/references/libraries.md +39 -0
- package/skills/design-ui/references/themes.md +23 -0
- package/skills/dev-kit/SKILL.md +19 -38
- package/skills/dev-kit/references/cloudflare-worker-api.md +1 -1
- package/skills/dev-kit/references/skills.md +2 -2
- package/skills/effect-development/SKILL.md +27 -0
- package/skills/effect-development/agents/openai.yaml +4 -0
- package/skills/effect-development/references/api/index.md +32 -0
- package/skills/effect-development/references/api/schema-codecs.md +15 -0
- package/skills/{build-effect-apis/references → effect-development/references/api}/verification.md +10 -5
- package/skills/{effect-architecture-audit/SKILL.md → effect-development/references/architecture/index.md} +1 -6
- package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-client.md +8 -6
- package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-testing.md +7 -2
- package/skills/effect-development/references/atom/index.md +40 -0
- package/skills/{build-effect-clis/references → effect-development/references/cli}/entrypoints-and-testing.md +6 -2
- package/skills/effect-development/references/cli/index.md +39 -0
- package/skills/effect-development/references/setup.md +15 -0
- package/skills/open-pull-request/SKILL.md +10 -70
- package/skills/open-pull-request/references/evidence.md +22 -0
- package/skills/open-pull-request/references/explanation.md +21 -0
- package/skills/open-pull-request/references/publication.md +21 -0
- package/skills/sentry/LICENSE +202 -0
- package/skills/sentry/LICENSE-UPSTREAM +21 -0
- package/skills/sentry/NOTICE +14 -0
- package/skills/sentry/SKILL.md +33 -0
- package/skills/sentry/references/alert-payloads.md +105 -0
- package/skills/sentry/references/alerts.md +17 -0
- package/skills/sentry/references/artifacts.md +25 -0
- package/skills/sentry/references/auth-token.md +65 -0
- package/skills/sentry/references/concepts/ai-monitoring.md +131 -0
- package/skills/sentry/references/concepts/choosing-a-signal.md +78 -0
- package/skills/sentry/references/concepts/crons.md +50 -0
- package/skills/sentry/references/concepts/data-scrubbing.md +43 -0
- package/skills/sentry/references/concepts/errors.md +40 -0
- package/skills/sentry/references/concepts/logging.md +85 -0
- package/skills/sentry/references/concepts/metrics.md +49 -0
- package/skills/sentry/references/concepts/monitors.md +78 -0
- package/skills/sentry/references/concepts/profiling.md +38 -0
- package/skills/sentry/references/concepts/reduce-volume.md +49 -0
- package/skills/sentry/references/concepts/releases.md +43 -0
- package/skills/sentry/references/concepts/session-replay.md +35 -0
- package/skills/sentry/references/concepts/tracing.md +54 -0
- package/skills/sentry/references/concepts/user-feedback.md +36 -0
- package/skills/sentry/references/debug-artifacts/android.md +68 -0
- package/skills/sentry/references/debug-artifacts/apple.md +96 -0
- package/skills/sentry/references/debug-artifacts/dotnet.md +70 -0
- package/skills/sentry/references/debug-artifacts/flutter.md +65 -0
- package/skills/sentry/references/debug-artifacts/index.md +75 -0
- package/skills/sentry/references/debug-artifacts/javascript.md +94 -0
- package/skills/sentry/references/debug-artifacts/matching.md +73 -0
- package/skills/sentry/references/debug-artifacts/react-native.md +75 -0
- package/skills/sentry/references/first-error-setup.md +25 -0
- package/skills/sentry/references/instrumentation.md +30 -0
- package/skills/sentry/references/issues.md +32 -0
- package/skills/sentry/references/new-project.md +17 -0
- package/skills/sentry/references/otel-exporter.md +30 -0
- package/skills/sentry/references/release-workflow.md +31 -0
- package/skills/sentry/references/releases/ci-pipeline.md +214 -0
- package/skills/sentry/references/releases/index.md +93 -0
- package/skills/sentry/references/releases/suspect-commits.md +155 -0
- package/skills/sentry/references/releases/tagging.md +131 -0
- package/skills/sentry/references/releases/troubleshooting.md +67 -0
- package/skills/sentry/references/sdks/android/crons.md +305 -0
- package/skills/sentry/references/sdks/android/error-monitoring.md +800 -0
- package/skills/sentry/references/sdks/android/index.md +748 -0
- package/skills/sentry/references/sdks/android/integrations.md +48 -0
- package/skills/sentry/references/sdks/android/logging.md +374 -0
- package/skills/sentry/references/sdks/android/metrics.md +288 -0
- package/skills/sentry/references/sdks/android/profiling.md +397 -0
- package/skills/sentry/references/sdks/android/session-replay.md +406 -0
- package/skills/sentry/references/sdks/android/tracing.md +861 -0
- package/skills/sentry/references/sdks/browser/error-monitoring.md +861 -0
- package/skills/sentry/references/sdks/browser/index.md +714 -0
- package/skills/sentry/references/sdks/browser/logging.md +315 -0
- package/skills/sentry/references/sdks/browser/profiling.md +236 -0
- package/skills/sentry/references/sdks/browser/session-replay.md +586 -0
- package/skills/sentry/references/sdks/browser/tracing.md +561 -0
- package/skills/sentry/references/sdks/browser/user-feedback.md +354 -0
- package/skills/sentry/references/sdks/cloudflare/ai-monitoring.md +661 -0
- package/skills/sentry/references/sdks/cloudflare/crons.md +231 -0
- package/skills/sentry/references/sdks/cloudflare/durable-objects.md +381 -0
- package/skills/sentry/references/sdks/cloudflare/error-monitoring.md +329 -0
- package/skills/sentry/references/sdks/cloudflare/index.md +698 -0
- package/skills/sentry/references/sdks/cloudflare/logging.md +169 -0
- package/skills/sentry/references/sdks/cloudflare/nodejs-compat.md +134 -0
- package/skills/sentry/references/sdks/cloudflare/tracing.md +475 -0
- package/skills/sentry/references/sdks/cocoa/error-monitoring.md +394 -0
- package/skills/sentry/references/sdks/cocoa/index.md +497 -0
- package/skills/sentry/references/sdks/cocoa/logging.md +209 -0
- package/skills/sentry/references/sdks/cocoa/metrics.md +136 -0
- package/skills/sentry/references/sdks/cocoa/profiling.md +223 -0
- package/skills/sentry/references/sdks/cocoa/session-replay.md +257 -0
- package/skills/sentry/references/sdks/cocoa/tracing.md +524 -0
- package/skills/sentry/references/sdks/cocoa/user-feedback.md +310 -0
- package/skills/sentry/references/sdks/dotnet/crons.md +465 -0
- package/skills/sentry/references/sdks/dotnet/error-monitoring.md +1100 -0
- package/skills/sentry/references/sdks/dotnet/index.md +614 -0
- package/skills/sentry/references/sdks/dotnet/logging.md +556 -0
- package/skills/sentry/references/sdks/dotnet/metrics.md +229 -0
- package/skills/sentry/references/sdks/dotnet/profiling.md +296 -0
- package/skills/sentry/references/sdks/dotnet/tracing.md +897 -0
- package/skills/sentry/references/sdks/elixir/crons.md +371 -0
- package/skills/sentry/references/sdks/elixir/error-monitoring.md +335 -0
- package/skills/sentry/references/sdks/elixir/index.md +383 -0
- package/skills/sentry/references/sdks/elixir/logging.md +239 -0
- package/skills/sentry/references/sdks/elixir/tracing.md +233 -0
- package/skills/sentry/references/sdks/flutter/ecosystem-integrations.md +70 -0
- package/skills/sentry/references/sdks/flutter/error-monitoring.md +312 -0
- package/skills/sentry/references/sdks/flutter/index.md +728 -0
- package/skills/sentry/references/sdks/flutter/logging.md +387 -0
- package/skills/sentry/references/sdks/flutter/metrics.md +310 -0
- package/skills/sentry/references/sdks/flutter/profiling.md +214 -0
- package/skills/sentry/references/sdks/flutter/session-replay.md +308 -0
- package/skills/sentry/references/sdks/flutter/tracing.md +502 -0
- package/skills/sentry/references/sdks/go/crons.md +270 -0
- package/skills/sentry/references/sdks/go/error-monitoring.md +361 -0
- package/skills/sentry/references/sdks/go/index.md +324 -0
- package/skills/sentry/references/sdks/go/logging.md +354 -0
- package/skills/sentry/references/sdks/go/metrics.md +273 -0
- package/skills/sentry/references/sdks/go/profiling.md +46 -0
- package/skills/sentry/references/sdks/go/tracing.md +366 -0
- package/skills/sentry/references/sdks/index.md +41 -0
- package/skills/sentry/references/sdks/nestjs/ai-monitoring.md +410 -0
- package/skills/sentry/references/sdks/nestjs/crons.md +268 -0
- package/skills/sentry/references/sdks/nestjs/error-monitoring.md +729 -0
- package/skills/sentry/references/sdks/nestjs/index.md +699 -0
- package/skills/sentry/references/sdks/nestjs/logging.md +174 -0
- package/skills/sentry/references/sdks/nestjs/metrics.md +243 -0
- package/skills/sentry/references/sdks/nestjs/profiling.md +127 -0
- package/skills/sentry/references/sdks/nestjs/tracing.md +762 -0
- package/skills/sentry/references/sdks/nextjs/ai-monitoring.md +494 -0
- package/skills/sentry/references/sdks/nextjs/crons.md +383 -0
- package/skills/sentry/references/sdks/nextjs/error-monitoring.md +974 -0
- package/skills/sentry/references/sdks/nextjs/index.md +491 -0
- package/skills/sentry/references/sdks/nextjs/logging.md +381 -0
- package/skills/sentry/references/sdks/nextjs/metrics.md +411 -0
- package/skills/sentry/references/sdks/nextjs/profiling.md +403 -0
- package/skills/sentry/references/sdks/nextjs/session-replay.md +462 -0
- package/skills/sentry/references/sdks/nextjs/tracing.md +628 -0
- package/skills/sentry/references/sdks/node/ai-monitoring.md +303 -0
- package/skills/sentry/references/sdks/node/crons.md +432 -0
- package/skills/sentry/references/sdks/node/error-monitoring.md +1125 -0
- package/skills/sentry/references/sdks/node/index.md +942 -0
- package/skills/sentry/references/sdks/node/logging.md +380 -0
- package/skills/sentry/references/sdks/node/metrics.md +278 -0
- package/skills/sentry/references/sdks/node/profiling.md +373 -0
- package/skills/sentry/references/sdks/node/tracing.md +878 -0
- package/skills/sentry/references/sdks/php/ai-monitoring.md +310 -0
- package/skills/sentry/references/sdks/php/crons.md +265 -0
- package/skills/sentry/references/sdks/php/error-monitoring.md +626 -0
- package/skills/sentry/references/sdks/php/index.md +362 -0
- package/skills/sentry/references/sdks/php/laravel.md +542 -0
- package/skills/sentry/references/sdks/php/logging.md +242 -0
- package/skills/sentry/references/sdks/php/metrics.md +193 -0
- package/skills/sentry/references/sdks/php/profiling.md +115 -0
- package/skills/sentry/references/sdks/php/symfony.md +552 -0
- package/skills/sentry/references/sdks/php/tracing.md +516 -0
- package/skills/sentry/references/sdks/python/ai-monitoring.md +351 -0
- package/skills/sentry/references/sdks/python/crons.md +218 -0
- package/skills/sentry/references/sdks/python/error-monitoring.md +292 -0
- package/skills/sentry/references/sdks/python/index.md +361 -0
- package/skills/sentry/references/sdks/python/logging.md +234 -0
- package/skills/sentry/references/sdks/python/metrics.md +154 -0
- package/skills/sentry/references/sdks/python/profiling.md +120 -0
- package/skills/sentry/references/sdks/python/tracing.md +364 -0
- package/skills/sentry/references/sdks/react/error-monitoring.md +1607 -0
- package/skills/sentry/references/sdks/react/index.md +492 -0
- package/skills/sentry/references/sdks/react/logging.md +364 -0
- package/skills/sentry/references/sdks/react/profiling.md +322 -0
- package/skills/sentry/references/sdks/react/react-features.md +1272 -0
- package/skills/sentry/references/sdks/react/session-replay.md +1193 -0
- package/skills/sentry/references/sdks/react/tracing.md +1415 -0
- package/skills/sentry/references/sdks/react-native/error-monitoring.md +1481 -0
- package/skills/sentry/references/sdks/react-native/expo-config-plugin.md +45 -0
- package/skills/sentry/references/sdks/react-native/index.md +1030 -0
- package/skills/sentry/references/sdks/react-native/logging.md +444 -0
- package/skills/sentry/references/sdks/react-native/profiling.md +386 -0
- package/skills/sentry/references/sdks/react-native/session-replay.md +704 -0
- package/skills/sentry/references/sdks/react-native/tracing.md +1086 -0
- package/skills/sentry/references/sdks/react-native/user-feedback.md +815 -0
- package/skills/sentry/references/sdks/react-router-framework/error-monitoring.md +127 -0
- package/skills/sentry/references/sdks/react-router-framework/index.md +411 -0
- package/skills/sentry/references/sdks/react-router-framework/logging.md +66 -0
- package/skills/sentry/references/sdks/react-router-framework/profiling.md +57 -0
- package/skills/sentry/references/sdks/react-router-framework/react-router-framework-features.md +110 -0
- package/skills/sentry/references/sdks/react-router-framework/session-replay.md +67 -0
- package/skills/sentry/references/sdks/react-router-framework/tracing.md +96 -0
- package/skills/sentry/references/sdks/react-router-framework/user-feedback.md +71 -0
- package/skills/sentry/references/sdks/ruby/crons.md +184 -0
- package/skills/sentry/references/sdks/ruby/error-monitoring.md +248 -0
- package/skills/sentry/references/sdks/ruby/index.md +297 -0
- package/skills/sentry/references/sdks/ruby/logging.md +168 -0
- package/skills/sentry/references/sdks/ruby/metrics.md +196 -0
- package/skills/sentry/references/sdks/ruby/migration.md +321 -0
- package/skills/sentry/references/sdks/ruby/profiling.md +107 -0
- package/skills/sentry/references/sdks/ruby/tracing.md +388 -0
- package/skills/sentry/references/sdks/svelte/error-monitoring.md +456 -0
- package/skills/sentry/references/sdks/svelte/index.md +467 -0
- package/skills/sentry/references/sdks/svelte/logging.md +344 -0
- package/skills/sentry/references/sdks/svelte/session-replay.md +369 -0
- package/skills/sentry/references/sdks/svelte/tracing.md +406 -0
- package/skills/sentry/references/sdks/tanstack-start/error-monitoring.md +149 -0
- package/skills/sentry/references/sdks/tanstack-start/index.md +381 -0
- package/skills/sentry/references/sdks/tanstack-start/logging.md +74 -0
- package/skills/sentry/references/sdks/tanstack-start/session-replay.md +76 -0
- package/skills/sentry/references/sdks/tanstack-start/tanstackstart-features.md +128 -0
- package/skills/sentry/references/sdks/tanstack-start/tracing.md +123 -0
- package/skills/sentry/references/sdks/tanstack-start/user-feedback.md +81 -0
- package/skills/sentry/references/search-query-language.md +226 -0
- package/skills/sentry/references/semantics/angular.md +7 -0
- package/skills/sentry/references/semantics/app.md +28 -0
- package/skills/sentry/references/semantics/art.md +17 -0
- package/skills/sentry/references/semantics/aws.md +43 -0
- package/skills/sentry/references/semantics/browser.md +34 -0
- package/skills/sentry/references/semantics/cache.md +12 -0
- package/skills/sentry/references/semantics/client.md +8 -0
- package/skills/sentry/references/semantics/cloud.md +12 -0
- package/skills/sentry/references/semantics/cloudflare.md +23 -0
- package/skills/sentry/references/semantics/code.md +11 -0
- package/skills/sentry/references/semantics/culture.md +11 -0
- package/skills/sentry/references/semantics/db.md +21 -0
- package/skills/sentry/references/semantics/device.md +43 -0
- package/skills/sentry/references/semantics/error.md +7 -0
- package/skills/sentry/references/semantics/event.md +8 -0
- package/skills/sentry/references/semantics/exception.md +10 -0
- package/skills/sentry/references/semantics/faas.md +19 -0
- package/skills/sentry/references/semantics/file.md +8 -0
- package/skills/sentry/references/semantics/flag.md +7 -0
- package/skills/sentry/references/semantics/gcp.md +16 -0
- package/skills/sentry/references/semantics/gen_ai.md +53 -0
- package/skills/sentry/references/semantics/general.md +11 -0
- package/skills/sentry/references/semantics/graphql.md +9 -0
- package/skills/sentry/references/semantics/grpc.md +19 -0
- package/skills/sentry/references/semantics/http.md +34 -0
- package/skills/sentry/references/semantics/index.md +63 -0
- package/skills/sentry/references/semantics/jsonrpc.md +8 -0
- package/skills/sentry/references/semantics/jvm.md +12 -0
- package/skills/sentry/references/semantics/koa.md +7 -0
- package/skills/sentry/references/semantics/logger.md +7 -0
- package/skills/sentry/references/semantics/mcp.md +37 -0
- package/skills/sentry/references/semantics/mdc.md +7 -0
- package/skills/sentry/references/semantics/messaging.md +23 -0
- package/skills/sentry/references/semantics/middleware.md +7 -0
- package/skills/sentry/references/semantics/navigation.md +9 -0
- package/skills/sentry/references/semantics/nel.md +11 -0
- package/skills/sentry/references/semantics/network.md +17 -0
- package/skills/sentry/references/semantics/os.md +15 -0
- package/skills/sentry/references/semantics/otel.md +10 -0
- package/skills/sentry/references/semantics/params.md +7 -0
- package/skills/sentry/references/semantics/process.md +14 -0
- package/skills/sentry/references/semantics/react.md +7 -0
- package/skills/sentry/references/semantics/remix.md +7 -0
- package/skills/sentry/references/semantics/resource.md +7 -0
- package/skills/sentry/references/semantics/rpc.md +10 -0
- package/skills/sentry/references/semantics/score.md +10 -0
- package/skills/sentry/references/semantics/sentry.md +69 -0
- package/skills/sentry/references/semantics/server.md +8 -0
- package/skills/sentry/references/semantics/service.md +8 -0
- package/skills/sentry/references/semantics/session.md +7 -0
- package/skills/sentry/references/semantics/state.md +7 -0
- package/skills/sentry/references/semantics/thread.md +8 -0
- package/skills/sentry/references/semantics/timber.md +7 -0
- package/skills/sentry/references/semantics/trpc.md +8 -0
- package/skills/sentry/references/semantics/ui.md +18 -0
- package/skills/sentry/references/semantics/url.md +15 -0
- package/skills/sentry/references/semantics/user.md +17 -0
- package/skills/sentry/references/semantics/user_agent.md +7 -0
- package/skills/sentry/references/semantics/vercel.md +42 -0
- package/skills/sentry/references/setup-verification.md +39 -0
- package/skills/sentry/references/snapshots/github-actions-fanout.md +206 -0
- package/skills/sentry/references/snapshots/github-actions-simple.md +102 -0
- package/skills/sentry/references/snapshots/github-actions-swift-snapshot-testing.md +118 -0
- package/skills/sentry/references/snapshots/index.md +19 -0
- package/skills/sentry/references/snapshots/snapshot-previews.md +100 -0
- package/skills/sentry/references/snapshots/snapshots.md +123 -0
- package/skills/sentry/references/snapshots/wizard-setup.md +134 -0
- package/skills/testing/LICENSE +21 -0
- package/skills/testing/NOTICE +7 -0
- package/skills/testing/SKILL.md +13 -19
- package/skills/testing/agents/openai.yaml +1 -2
- package/skills/testing/references/selection.md +23 -0
- package/skills/testing/references/tdd.md +19 -0
- package/skills/testing/references/test-design.md +17 -0
- package/src/catalog.ts +1 -7
- package/skills/build-effect-apis/SKILL.md +0 -81
- package/skills/build-effect-apis/agents/openai.yaml +0 -4
- package/skills/build-effect-clis/SKILL.md +0 -92
- package/skills/build-effect-clis/agents/openai.yaml +0 -4
- package/skills/effect-architecture-audit/agents/openai.yaml +0 -4
- package/skills/effect-atom-state/SKILL.md +0 -97
- package/skills/effect-atom-state/agents/openai.yaml +0 -4
- package/skills/effect-ts/SKILL.md +0 -35
- package/skills/effect-ts/agents/openai.yaml +0 -4
- /package/skills/{build-effect-apis/references → effect-development/references/api}/cloudflare-workers.md +0 -0
- /package/skills/{build-effect-apis/references → effect-development/references/api}/runtime-assembly.md +0 -0
- /package/skills/{build-effect-apis/references → effect-development/references/api}/server-and-middleware.md +0 -0
- /package/skills/{build-effect-apis/references → effect-development/references/api}/shared-contracts.md +0 -0
- /package/skills/{effect-architecture-audit/references → effect-development/references/architecture}/service-and-boundary-audit.md +0 -0
- /package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-lifecycle.md +0 -0
- /package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-workflows.md +0 -0
- /package/skills/{effect-atom-state/references → effect-development/references/atom}/tanstack-start.md +0 -0
- /package/skills/{build-effect-clis/references → effect-development/references/cli}/command-design.md +0 -0
- /package/skills/{build-effect-clis/references → effect-development/references/cli}/processes-and-platform.md +0 -0
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
# Logging — Sentry Node.js SDK
|
|
2
|
+
|
|
3
|
+
> Minimum SDK: `@sentry/node` ≥9.41.0 (stable GA)\
|
|
4
|
+
> First experimental: ≥9.10.0 (via `_experiments.enableLogs`)\
|
|
5
|
+
> Console multi-arg parsing: ≥10.13.0\
|
|
6
|
+
> Consola reporter: ≥10.12.0\
|
|
7
|
+
> Scope attributes on logs: ≥10.32.0\
|
|
8
|
+
> Status: ✅ **Generally Available**
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Overview
|
|
13
|
+
|
|
14
|
+
Sentry Logs are high-cardinality structured log entries that link directly to traces and
|
|
15
|
+
errors. They let you answer _why_ something broke, not just _what_ broke.
|
|
16
|
+
|
|
17
|
+
Key characteristics:
|
|
18
|
+
|
|
19
|
+
- Sent as structured data — each attribute is individually searchable in Sentry UI
|
|
20
|
+
- Automatically linked to the active trace (if tracing is enabled)
|
|
21
|
+
- Buffered and batched (max 100 per buffer) — no per-log network overhead
|
|
22
|
+
- NOT a replacement for a logging library; designed to complement one
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Initialization
|
|
27
|
+
|
|
28
|
+
`enableLogs: true` is **required**. Logging is disabled by default.
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
import * as Sentry from "@sentry/node";
|
|
32
|
+
|
|
33
|
+
Sentry.init({
|
|
34
|
+
dsn: process.env.SENTRY_DSN,
|
|
35
|
+
enableLogs: true, // REQUIRED — default: false
|
|
36
|
+
|
|
37
|
+
beforeSendLog: (log) => {
|
|
38
|
+
// optional filter/transform
|
|
39
|
+
if (log.level === "debug") return null; // null = drop this log
|
|
40
|
+
return log;
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Logger API
|
|
48
|
+
|
|
49
|
+
All six methods live at `Sentry.logger.*`:
|
|
50
|
+
|
|
51
|
+
```typescript
|
|
52
|
+
Sentry.logger.trace(message, attributes?, options?)
|
|
53
|
+
Sentry.logger.debug(message, attributes?, options?)
|
|
54
|
+
Sentry.logger.info(message, attributes?, options?)
|
|
55
|
+
Sentry.logger.warn(message, attributes?, options?)
|
|
56
|
+
Sentry.logger.error(message, attributes?, options?)
|
|
57
|
+
Sentry.logger.fatal(message, attributes?, options?)
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
| Method | Severity # | When to Use |
|
|
61
|
+
| ------- | ---------- | --------------------------------------- |
|
|
62
|
+
| `trace` | 1 | Fine-grained debugging, hot paths |
|
|
63
|
+
| `debug` | 5 | Development diagnostics, variable dumps |
|
|
64
|
+
| `info` | 9 | Normal operations, milestones, events |
|
|
65
|
+
| `warn` | 13 | Potential issues, degraded state |
|
|
66
|
+
| `error` | 17 | Failures that need attention |
|
|
67
|
+
| `fatal` | 21 | Critical failures, service down |
|
|
68
|
+
|
|
69
|
+
**Full TypeScript signature** (same shape for all six methods):
|
|
70
|
+
|
|
71
|
+
```typescript
|
|
72
|
+
function info(
|
|
73
|
+
message: ParameterizedString, // string or fmt`` tagged template
|
|
74
|
+
attributes?: Record<string, unknown>, // string | number | boolean values
|
|
75
|
+
options?: { scope?: Scope }, // optional scope override
|
|
76
|
+
): void;
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## Basic Usage
|
|
82
|
+
|
|
83
|
+
```typescript
|
|
84
|
+
Sentry.logger.trace("Entering function", { fn: "processOrder" });
|
|
85
|
+
Sentry.logger.debug("Cache lookup", { key: "user:123", hit: false });
|
|
86
|
+
Sentry.logger.info("Order created", { orderId: "order_456", total: 99.99 });
|
|
87
|
+
Sentry.logger.warn("Rate limit approaching", { current: 95, max: 100 });
|
|
88
|
+
Sentry.logger.error("Payment failed", { reason: "card_declined", userId: 42 });
|
|
89
|
+
Sentry.logger.fatal("Database unavailable", { host: "primary-db", port: 5432 });
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## Parameterized Messages — `Sentry.logger.fmt`
|
|
95
|
+
|
|
96
|
+
Use the `fmt` tagged template literal to create parameterized messages.
|
|
97
|
+
Interpolated values are extracted as **individually searchable attributes** in Sentry.
|
|
98
|
+
|
|
99
|
+
```typescript
|
|
100
|
+
const userId = "user_123";
|
|
101
|
+
const productName = "Widget Pro";
|
|
102
|
+
|
|
103
|
+
Sentry.logger.info(Sentry.logger.fmt`User ${userId} purchased ${productName}`);
|
|
104
|
+
|
|
105
|
+
// Stored in Sentry as:
|
|
106
|
+
// sentry.message.template → "User '%s' purchased '%s'"
|
|
107
|
+
// sentry.message.parameter.0 → "user_123"
|
|
108
|
+
// sentry.message.parameter.1 → "Widget Pro"
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
You can combine `fmt` with additional attributes:
|
|
112
|
+
|
|
113
|
+
```typescript
|
|
114
|
+
Sentry.logger.info(Sentry.logger.fmt`Order ${orderId} placed by ${userId}`, {
|
|
115
|
+
total: 149.99,
|
|
116
|
+
itemCount: 3,
|
|
117
|
+
region: "us-west-2",
|
|
118
|
+
});
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
`fmt` is an alias for `Sentry.parameterize()` internally.
|
|
122
|
+
The returned string carries hidden `__sentry_template_string__` and
|
|
123
|
+
`__sentry_template_values__` properties used by the SDK for serialization.
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Structured Attributes
|
|
128
|
+
|
|
129
|
+
The second argument is a plain object.
|
|
130
|
+
Values must be `string`, `number`, or `boolean`.
|
|
131
|
+
|
|
132
|
+
```typescript
|
|
133
|
+
Sentry.logger.info("API request completed", {
|
|
134
|
+
userId: user.id,
|
|
135
|
+
userTier: user.plan, // "free" | "pro" | "enterprise"
|
|
136
|
+
endpoint: "/api/orders",
|
|
137
|
+
method: "POST",
|
|
138
|
+
statusCode: 200,
|
|
139
|
+
durationMs: 234,
|
|
140
|
+
orderValue: 149.99,
|
|
141
|
+
isBeta: true,
|
|
142
|
+
retryCount: 0,
|
|
143
|
+
});
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Attributes become filterable columns in the Sentry Logs view.
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## Scope-Based Attributes (SDK ≥10.32.0)
|
|
151
|
+
|
|
152
|
+
Set attributes on a scope once and they are automatically attached to every log emitted
|
|
153
|
+
within that scope.
|
|
154
|
+
|
|
155
|
+
```typescript
|
|
156
|
+
// Global scope — applies to all logs for the app's lifetime
|
|
157
|
+
Sentry.getGlobalScope().setAttributes({
|
|
158
|
+
service: "checkout-service",
|
|
159
|
+
version: "2.1.0",
|
|
160
|
+
region: "us-west-2",
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
// Isolation scope — unique per HTTP request (auto-created by HTTP integrations)
|
|
164
|
+
Sentry.getIsolationScope().setAttributes({
|
|
165
|
+
org_id: user.orgId,
|
|
166
|
+
user_tier: user.tier,
|
|
167
|
+
request_id: req.id,
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
// Current scope — single operation block
|
|
171
|
+
Sentry.withScope((scope) => {
|
|
172
|
+
scope.setAttribute("operation", "payment-processing");
|
|
173
|
+
scope.setAttribute("payment_method", "stripe");
|
|
174
|
+
|
|
175
|
+
Sentry.logger.info("Processing payment", { amount: 99.99 });
|
|
176
|
+
// → includes all scope attributes + the explicit { amount }
|
|
177
|
+
});
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## Auto-Attached Attributes
|
|
183
|
+
|
|
184
|
+
The SDK automatically attaches these to every log:
|
|
185
|
+
|
|
186
|
+
| Attribute Key | Value |
|
|
187
|
+
| ---------------------------- | ----------------------------------------- |
|
|
188
|
+
| `sentry.environment` | `environment` from `Sentry.init()` |
|
|
189
|
+
| `sentry.release` | `release` from `Sentry.init()` |
|
|
190
|
+
| `sentry.sdk.name` | e.g., `"sentry.javascript.node"` |
|
|
191
|
+
| `sentry.sdk.version` | e.g., `"10.42.0"` |
|
|
192
|
+
| `server.address` | Server hostname / `server_name` |
|
|
193
|
+
| `user.id` | Current scope user ID (if set) |
|
|
194
|
+
| `user.name` | Current scope username (if set) |
|
|
195
|
+
| `user.email` | Current scope user email (if set) |
|
|
196
|
+
| `sentry.message.template` | Parameterized template (when using `fmt`) |
|
|
197
|
+
| `sentry.message.parameter.N` | Positional interpolated values |
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## Console Integration
|
|
202
|
+
|
|
203
|
+
Capture `console.*` calls as Sentry logs using the built-in integration (SDK ≥9.41.0):
|
|
204
|
+
|
|
205
|
+
```typescript
|
|
206
|
+
Sentry.init({
|
|
207
|
+
dsn: process.env.SENTRY_DSN,
|
|
208
|
+
enableLogs: true,
|
|
209
|
+
integrations: [
|
|
210
|
+
Sentry.consoleLoggingIntegration({
|
|
211
|
+
levels: ["log", "warn", "error"],
|
|
212
|
+
// Default levels: ['debug','info','warn','error','log','trace','assert']
|
|
213
|
+
}),
|
|
214
|
+
],
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
// These now send to Sentry Logs automatically:
|
|
218
|
+
console.log("User action:", "checkout"); // → severity: info
|
|
219
|
+
console.warn("Memory pressure"); // → severity: warn
|
|
220
|
+
console.error("Unhandled rejection"); // → severity: error
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
Multi-argument parsing (args become `message.parameter.N` attributes) requires SDK
|
|
224
|
+
≥10.13.0.
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## Consola Integration (SDK ≥10.12.0)
|
|
229
|
+
|
|
230
|
+
```typescript
|
|
231
|
+
import { createConsola } from "consola";
|
|
232
|
+
import * as Sentry from "@sentry/node";
|
|
233
|
+
|
|
234
|
+
const logger = createConsola();
|
|
235
|
+
logger.addReporter(Sentry.createConsolaReporter());
|
|
236
|
+
|
|
237
|
+
logger.info("This goes to Sentry Logs");
|
|
238
|
+
logger.error("This too");
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
---
|
|
242
|
+
|
|
243
|
+
## `beforeSendLog` Hook
|
|
244
|
+
|
|
245
|
+
Filter or transform logs before they are sent.
|
|
246
|
+
Return `null` to drop:
|
|
247
|
+
|
|
248
|
+
```typescript
|
|
249
|
+
Sentry.init({
|
|
250
|
+
dsn: process.env.SENTRY_DSN,
|
|
251
|
+
enableLogs: true,
|
|
252
|
+
beforeSendLog: (log) => {
|
|
253
|
+
// Drop debug logs in production
|
|
254
|
+
if (process.env.NODE_ENV === "production" && log.level === "debug") {
|
|
255
|
+
return null;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
// Scrub sensitive fields
|
|
259
|
+
if (log.attributes?.credit_card) {
|
|
260
|
+
log.attributes.credit_card = "[REDACTED]";
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
// Add computed attributes
|
|
264
|
+
log.attributes = {
|
|
265
|
+
...log.attributes,
|
|
266
|
+
processed_at: Date.now(),
|
|
267
|
+
};
|
|
268
|
+
|
|
269
|
+
return log;
|
|
270
|
+
},
|
|
271
|
+
});
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
The `log` object shape: `{ level, message, attributes, severityNumber }`.
|
|
275
|
+
|
|
276
|
+
---
|
|
277
|
+
|
|
278
|
+
## Third-Party Logger Bridges
|
|
279
|
+
|
|
280
|
+
Sentry does **not** provide official first-party transports for Winston, Pino, Bunyan,
|
|
281
|
+
or Morgan. Use the patterns below to forward logs to `Sentry.logger.*`.
|
|
282
|
+
|
|
283
|
+
**Winston:**
|
|
284
|
+
|
|
285
|
+
```typescript
|
|
286
|
+
import winston from "winston";
|
|
287
|
+
import * as Sentry from "@sentry/node";
|
|
288
|
+
|
|
289
|
+
const levelMap: Record<string, keyof typeof Sentry.logger> = {
|
|
290
|
+
silly: "trace",
|
|
291
|
+
verbose: "debug",
|
|
292
|
+
debug: "debug",
|
|
293
|
+
http: "info",
|
|
294
|
+
info: "info",
|
|
295
|
+
warn: "warn",
|
|
296
|
+
error: "error",
|
|
297
|
+
};
|
|
298
|
+
|
|
299
|
+
const sentryTransport = new winston.transports.Stream({
|
|
300
|
+
stream: {
|
|
301
|
+
write: (message: string) => {
|
|
302
|
+
const parsed = JSON.parse(message);
|
|
303
|
+
const fn = levelMap[parsed.level] ?? "info";
|
|
304
|
+
(Sentry.logger[fn] as Function)(parsed.message, parsed.meta ?? {});
|
|
305
|
+
},
|
|
306
|
+
},
|
|
307
|
+
});
|
|
308
|
+
|
|
309
|
+
const logger = winston.createLogger({
|
|
310
|
+
format: winston.format.json(),
|
|
311
|
+
transports: [new winston.transports.Console(), sentryTransport],
|
|
312
|
+
});
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
**Pino:**
|
|
316
|
+
|
|
317
|
+
```typescript
|
|
318
|
+
import pino from "pino";
|
|
319
|
+
import * as Sentry from "@sentry/node";
|
|
320
|
+
|
|
321
|
+
const PINO_TO_SENTRY: Record<number, keyof typeof Sentry.logger> = {
|
|
322
|
+
10: "trace",
|
|
323
|
+
20: "debug",
|
|
324
|
+
30: "info",
|
|
325
|
+
40: "warn",
|
|
326
|
+
50: "error",
|
|
327
|
+
60: "fatal",
|
|
328
|
+
};
|
|
329
|
+
|
|
330
|
+
const dest = pino.destination({
|
|
331
|
+
write(chunk: string) {
|
|
332
|
+
const log = JSON.parse(chunk);
|
|
333
|
+
const fn = PINO_TO_SENTRY[log.level] ?? "info";
|
|
334
|
+
const { msg, level, time, pid, hostname, ...attrs } = log;
|
|
335
|
+
(Sentry.logger[fn] as Function)(msg, attrs);
|
|
336
|
+
},
|
|
337
|
+
});
|
|
338
|
+
|
|
339
|
+
const logger = pino({ level: "trace" }, dest);
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
---
|
|
343
|
+
|
|
344
|
+
## Trace Linking
|
|
345
|
+
|
|
346
|
+
Logs emitted during an active span automatically include `sentry.trace.parent_span_id`,
|
|
347
|
+
linking them to the active trace.
|
|
348
|
+
From a log in Sentry you can navigate to its parent trace; from a trace you can see all
|
|
349
|
+
logs emitted during that request.
|
|
350
|
+
|
|
351
|
+
---
|
|
352
|
+
|
|
353
|
+
## Log Buffering and Flushing
|
|
354
|
+
|
|
355
|
+
Logs are buffered in memory (max 100 per buffer: `MAX_LOG_BUFFER_SIZE = 100`). The
|
|
356
|
+
buffer flushes automatically when full or on `client.close()`.
|
|
357
|
+
|
|
358
|
+
For **serverless or short-lived processes**, flush explicitly before exit:
|
|
359
|
+
|
|
360
|
+
```typescript
|
|
361
|
+
await Sentry.flush(2000); // flush with 2s timeout
|
|
362
|
+
await Sentry.close(2000); // flush + close all transports
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
---
|
|
366
|
+
|
|
367
|
+
## Troubleshooting
|
|
368
|
+
|
|
369
|
+
| Problem | Likely Cause | Fix |
|
|
370
|
+
| ---------------------------------- | -------------------------- | ---------------------------------------------------------- |
|
|
371
|
+
| Logs not appearing in Sentry | `enableLogs` not set | Add `enableLogs: true` to `Sentry.init()` |
|
|
372
|
+
| `Sentry.logger` is undefined | SDK < 9.41.0 | Upgrade to ≥9.41.0 |
|
|
373
|
+
| Attributes not searchable | Using complex objects | Use only `string`, `number`, `boolean` values |
|
|
374
|
+
| Console logs not captured | Missing integration | Add `consoleLoggingIntegration()` to `integrations` |
|
|
375
|
+
| Logs cut off in serverless | Buffer not flushed | Call `await Sentry.flush(2000)` before function returns |
|
|
376
|
+
| `fmt` values not parameterized | Using string interpolation | Use `fmt` as a tagged template literal, not `"msg " + val` |
|
|
377
|
+
| Logs missing trace link | No active span | Enable tracing with `tracesSampleRate` |
|
|
378
|
+
| `beforeSendLog` not firing | `enableLogs: false` | Logs are dropped before the hook if logging is disabled |
|
|
379
|
+
| Scope attributes missing from logs | SDK < 10.32.0 | Upgrade to ≥10.32.0 for scope attribute inheritance |
|
|
380
|
+
| Consola reporter not working | SDK < 10.12.0 | Upgrade to ≥10.12.0 |
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
# Metrics — Sentry Node.js SDK
|
|
2
|
+
|
|
3
|
+
> Minimum SDK: `@sentry/node` ≥10.25.0 (stable `Sentry.metrics.*` API)\
|
|
4
|
+
> `enableMetrics` top-level option: ≥10.24.0 (default: `true`)\
|
|
5
|
+
> `beforeSendMetric` hook: ≥10.24.0\
|
|
6
|
+
> Scope attributes on metrics: ≥10.33.0
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Overview
|
|
11
|
+
|
|
12
|
+
Sentry Metrics let you track counters, current values, and value distributions.
|
|
13
|
+
They appear in Sentry alongside related errors and can be correlated with traces.
|
|
14
|
+
|
|
15
|
+
Key characteristics:
|
|
16
|
+
|
|
17
|
+
- Metrics are **enabled by default** — no configuration required for basic use
|
|
18
|
+
- Buffered in memory (max 1000 entries) and sent periodically
|
|
19
|
+
- High-cardinality attributes **degrade backend performance** — keep attribute
|
|
20
|
+
cardinality low
|
|
21
|
+
- Use `Sentry.logger.*` (not metrics) when you need per-user or per-request detail
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Initialization
|
|
26
|
+
|
|
27
|
+
Metrics are on by default.
|
|
28
|
+
Opt out if needed:
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
import * as Sentry from "@sentry/node";
|
|
32
|
+
|
|
33
|
+
Sentry.init({
|
|
34
|
+
dsn: process.env.SENTRY_DSN,
|
|
35
|
+
// Metrics are enabled by default — no config needed
|
|
36
|
+
|
|
37
|
+
// To disable entirely:
|
|
38
|
+
// enableMetrics: false,
|
|
39
|
+
|
|
40
|
+
beforeSendMetric: (metric) => {
|
|
41
|
+
// optional filter/transform
|
|
42
|
+
if (metric.name === "debug_metric") return null;
|
|
43
|
+
return metric;
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Metrics API
|
|
51
|
+
|
|
52
|
+
Three methods. No `increment()` or `set()` — those do not exist in v10:
|
|
53
|
+
|
|
54
|
+
```typescript
|
|
55
|
+
Sentry.metrics.count(name, value?, options?)
|
|
56
|
+
Sentry.metrics.gauge(name, value, options?)
|
|
57
|
+
Sentry.metrics.distribution(name, value, options?)
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**Full TypeScript signatures:**
|
|
61
|
+
|
|
62
|
+
```typescript
|
|
63
|
+
interface MetricOptions {
|
|
64
|
+
unit?: string; // see unit table below
|
|
65
|
+
attributes?: Record<string, unknown>; // filterable dimensions
|
|
66
|
+
scope?: Scope; // optional scope override
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function count(name: string, value?: number, options?: MetricOptions): void;
|
|
70
|
+
// value defaults to 1
|
|
71
|
+
|
|
72
|
+
function gauge(name: string, value: number, options?: MetricOptions): void;
|
|
73
|
+
|
|
74
|
+
function distribution(name: string, value: number, options?: MetricOptions): void;
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## Metric Types
|
|
80
|
+
|
|
81
|
+
| Method | Underlying Type | Use For |
|
|
82
|
+
| -------------- | --------------- | ----------------------------------------------- |
|
|
83
|
+
| `count` | counter | Event frequency — requests, errors, signups |
|
|
84
|
+
| `gauge` | gauge | Current snapshot value — queue depth, CPU % |
|
|
85
|
+
| `distribution` | distribution | Value histograms/ranges — latencies, file sizes |
|
|
86
|
+
|
|
87
|
+
```typescript
|
|
88
|
+
// count — how many times something happened
|
|
89
|
+
Sentry.metrics.count("user.signups", 1);
|
|
90
|
+
Sentry.metrics.count("api.errors", 1, { attributes: { endpoint: "/checkout" } });
|
|
91
|
+
|
|
92
|
+
// gauge — what the current state is
|
|
93
|
+
Sentry.metrics.gauge("queue.depth", 42);
|
|
94
|
+
Sentry.metrics.gauge("memory.usage", 512, { unit: "megabyte" });
|
|
95
|
+
|
|
96
|
+
// distribution — spread of a measured value
|
|
97
|
+
Sentry.metrics.distribution("api.latency", 187.5, { unit: "millisecond" });
|
|
98
|
+
Sentry.metrics.distribution("payload.size", 1024, { unit: "byte" });
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Units
|
|
104
|
+
|
|
105
|
+
Pass a `unit` string in `MetricOptions`. Used for display formatting in Sentry.
|
|
106
|
+
|
|
107
|
+
| Category | Unit Values |
|
|
108
|
+
| --------- | ------------------------------------------------------------------------- |
|
|
109
|
+
| Time | `millisecond`, `second`, `minute`, `hour`, `day`, `week` |
|
|
110
|
+
| Storage | `bit`, `byte`, `kilobyte`, `megabyte`, `gigabyte`, `terabyte`, `petabyte` |
|
|
111
|
+
| Fractions | `ratio`, `percent` |
|
|
112
|
+
| None | `none` (or omit `unit`) |
|
|
113
|
+
|
|
114
|
+
```typescript
|
|
115
|
+
Sentry.metrics.distribution("api.latency", 187.5, { unit: "millisecond" });
|
|
116
|
+
Sentry.metrics.distribution("job.duration", 3.2, { unit: "second" });
|
|
117
|
+
Sentry.metrics.gauge("memory.usage", 512, { unit: "megabyte" });
|
|
118
|
+
Sentry.metrics.gauge("cache.hit_rate", 0.87, { unit: "ratio" });
|
|
119
|
+
Sentry.metrics.gauge("disk.usage_pct", 72.4, { unit: "percent" });
|
|
120
|
+
Sentry.metrics.count("user.logins"); // omit unit for plain counts
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Attributes (Tags)
|
|
126
|
+
|
|
127
|
+
Use `attributes` in `MetricOptions` to add filterable/groupable dimensions.
|
|
128
|
+
|
|
129
|
+
**Size limit:** 2 KB per metric envelope.
|
|
130
|
+
Metrics exceeding this are **dropped**.
|
|
131
|
+
|
|
132
|
+
```typescript
|
|
133
|
+
Sentry.metrics.count("api.requests", 1, {
|
|
134
|
+
attributes: {
|
|
135
|
+
endpoint: "/api/orders",
|
|
136
|
+
method: "POST",
|
|
137
|
+
status_code: 200,
|
|
138
|
+
user_tier: "pro",
|
|
139
|
+
region: "us-west-2",
|
|
140
|
+
version: "v2",
|
|
141
|
+
},
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
Sentry.metrics.distribution("db.query_time", 45.3, {
|
|
145
|
+
unit: "millisecond",
|
|
146
|
+
attributes: {
|
|
147
|
+
table: "orders",
|
|
148
|
+
operation: "SELECT",
|
|
149
|
+
index_used: true,
|
|
150
|
+
rows_scanned: 1240,
|
|
151
|
+
},
|
|
152
|
+
});
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## Cardinality
|
|
158
|
+
|
|
159
|
+
Keep attribute values bounded.
|
|
160
|
+
High-cardinality attributes (per-user IDs, request UUIDs) cause performance issues in
|
|
161
|
+
Sentry’s metrics backend.
|
|
162
|
+
|
|
163
|
+
```typescript
|
|
164
|
+
// ❌ HIGH CARDINALITY — avoid as metric attributes
|
|
165
|
+
Sentry.metrics.count("page.view", 1, {
|
|
166
|
+
attributes: { user_id: "uuid-abc-123" }, // millions of unique values
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
// ✅ LOW CARDINALITY — bounded enums and sets
|
|
170
|
+
Sentry.metrics.count("page.view", 1, {
|
|
171
|
+
attributes: {
|
|
172
|
+
page: "/dashboard",
|
|
173
|
+
user_tier: "pro", // bounded enum
|
|
174
|
+
ab_variant: "control", // bounded enum
|
|
175
|
+
region: "us-east-1", // bounded set
|
|
176
|
+
},
|
|
177
|
+
});
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
Use `Sentry.logger.*` for per-user or per-request data — logs handle high cardinality
|
|
181
|
+
gracefully.
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## Scope-Based Attributes (SDK ≥10.33.0)
|
|
186
|
+
|
|
187
|
+
Set attributes on a scope and they auto-attach to all metrics emitted within it:
|
|
188
|
+
|
|
189
|
+
```typescript
|
|
190
|
+
// Global scope — applies to all metrics app-wide
|
|
191
|
+
Sentry.getGlobalScope().setAttributes({
|
|
192
|
+
service: "payments",
|
|
193
|
+
deploy_env: "production",
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
// Per-request scope
|
|
197
|
+
Sentry.withScope((scope) => {
|
|
198
|
+
scope.setAttribute("step", "checkout");
|
|
199
|
+
scope.setAttribute("user_tier", "enterprise");
|
|
200
|
+
|
|
201
|
+
// Both metrics inherit the scope attributes above
|
|
202
|
+
Sentry.metrics.count("checkout.attempts", 1);
|
|
203
|
+
Sentry.metrics.gauge("cart.value", 249.99);
|
|
204
|
+
});
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## Auto-Attached Default Attributes
|
|
210
|
+
|
|
211
|
+
| Attribute | Value | Context |
|
|
212
|
+
| ------------------------------------ | ----------------------------------- | ----------- |
|
|
213
|
+
| `sentry.environment` | From `Sentry.init({ environment })` | Always |
|
|
214
|
+
| `sentry.release` | From `Sentry.init({ release })` | Always |
|
|
215
|
+
| `sentry.sdk.name` | SDK identifier | Always |
|
|
216
|
+
| `sentry.sdk.version` | e.g., `"10.42.0"` | Always |
|
|
217
|
+
| `user.id`, `user.name`, `user.email` | If user is set in scope | When set |
|
|
218
|
+
| `server.address` | Server hostname | Server-side |
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## `beforeSendMetric` Hook
|
|
223
|
+
|
|
224
|
+
Filter or modify metrics before transmission.
|
|
225
|
+
Return `null` to drop:
|
|
226
|
+
|
|
227
|
+
```typescript
|
|
228
|
+
Sentry.init({
|
|
229
|
+
dsn: process.env.SENTRY_DSN,
|
|
230
|
+
beforeSendMetric: (metric) => {
|
|
231
|
+
// metric: { name, value, type, unit?, attributes? }
|
|
232
|
+
|
|
233
|
+
// Drop internal debug metrics
|
|
234
|
+
if (metric.name.startsWith("_internal.")) {
|
|
235
|
+
return null;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// Normalize metric names
|
|
239
|
+
metric.name = metric.name.toLowerCase().replace(/[^a-z0-9_.]/g, "_");
|
|
240
|
+
|
|
241
|
+
// Add global context
|
|
242
|
+
metric.attributes = {
|
|
243
|
+
...metric.attributes,
|
|
244
|
+
host: process.env.HOSTNAME,
|
|
245
|
+
deploy_id: process.env.DEPLOY_ID,
|
|
246
|
+
};
|
|
247
|
+
|
|
248
|
+
return metric;
|
|
249
|
+
},
|
|
250
|
+
});
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
## Flushing
|
|
256
|
+
|
|
257
|
+
Metrics are buffered (max `MAX_METRIC_BUFFER_SIZE = 1000`) and flushed periodically.
|
|
258
|
+
For serverless or short-lived scripts, flush explicitly:
|
|
259
|
+
|
|
260
|
+
```typescript
|
|
261
|
+
await Sentry.flush(2000); // flush + 2s timeout
|
|
262
|
+
await Sentry.close(2000); // flush + close all transports
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
## Troubleshooting
|
|
268
|
+
|
|
269
|
+
| Problem | Likely Cause | Fix |
|
|
270
|
+
| ----------------------------- | -------------------------- | ------------------------------------------------------- |
|
|
271
|
+
| Metrics not appearing | SDK < 10.24.0 | Upgrade to ≥10.24.0 |
|
|
272
|
+
| `Sentry.metrics` is undefined | SDK < 10.25.0 | Upgrade to ≥10.25.0 |
|
|
273
|
+
| Metrics silently dropped | Attribute envelope > 2 KB | Reduce number or size of `attributes` |
|
|
274
|
+
| `increment()` not found | Renamed in v10 | Use `count()` instead |
|
|
275
|
+
| `set()` not found | Removed in v10 | No equivalent; use `count()` with bounded attributes |
|
|
276
|
+
| Scope attributes missing | SDK < 10.33.0 | Upgrade to ≥10.33.0 |
|
|
277
|
+
| Metrics lost in serverless | Buffer not flushed | Call `await Sentry.flush(2000)` before function returns |
|
|
278
|
+
| High-cardinality issues | Unbounded attribute values | Keep attributes to bounded enums/sets |
|