Official Sentry SDK for Node-Core

[!CAUTION]
This package is in alpha state and may be subject to breaking changes.
Unlike the @sentry/node
SDK, this SDK comes with no OpenTelemetry auto-instrumentation out of the box. It requires the following OpenTelemetry dependencies and supports both v1 and v2 of OpenTelemetry:
@opentelemetry/api
@opentelemetry/context-async-hooks
@opentelemetry/core
@opentelemetry/instrumentation
@opentelemetry/resources
@opentelemetry/sdk-trace-base
@opentelemetry/semantic-conventions
.
Installation
npm install @sentry/node-core @sentry/opentelemetry @opentelemetry/api @opentelemetry/core @opentelemetry/context-async-hooks @opentelemetry/instrumentation @opentelemetry/resources @opentelemetry/sdk-trace-base @opentelemetry/semantic-conventions
yarn add @sentry/node-core @sentry/opentelemetry @opentelemetry/api @opentelemetry/core @opentelemetry/context-async-hooks @opentelemetry/instrumentation @opentelemetry/resources @opentelemetry/sdk-trace-base @opentelemetry/semantic-conventions
Usage
Sentry should be initialized as early in your app as possible. It is essential that you call Sentry.init
before you
require any other modules in your application, otherwise any auto-instrumentation will not work.
You also have to set up OpenTelemetry, if you prefer not to, consider using the @sentry/node
SDK instead.
Without setting up OpenTelemetry, you only get basic error tracking out of the box without proper scope isolation.
You need to create a file named instrument.js
that imports and initializes Sentry:
const { trace, propagation, context } = require('@opentelemetry/api');
const { NodeTracerProvider } = require('@opentelemetry/sdk-trace-node');
const Sentry = require('@sentry/node-core');
const { SentrySpanProcessor, SentryPropagator, SentrySampler } = require('@sentry/opentelemetry');
import { context, propagation, trace } from '@opentelemetry/api';
import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node';
import * as Sentry from '@sentry/node-core';
import { SentrySpanProcessor, SentryPropagator, SentrySampler } from '@sentry/opentelemetry';
const sentryClient = Sentry.init({
dsn: '__DSN__',
});
if (sentryClient) {
const provider = new NodeTracerProvider({
sampler: new SentrySampler(sentryClient),
spanProcessors: [
new SentrySpanProcessor(),
],
});
trace.setGlobalTracerProvider(provider);
propagation.setGlobalPropagator(new SentryPropagator());
context.setGlobalContextManager(new Sentry.SentryContextManager());
}
Sentry.setupOpenTelemetryLogger();
Sentry.validateOpenTelemetrySetup();
You need to require or import the instrument.js
file before importing any other modules in your application. This is
necessary to ensure that Sentry can automatically instrument all modules in your application:
import './instrument';
import http from 'http';
ESM Support
When running your application in ESM mode, you should use the Node.js
--import
command line option to ensure that Sentry is loaded before
the application code is evaluated.
Adjust the Node.js call for your application to use the --import
parameter and point it at instrument.js
, which
contains your Sentry.init
() code:
node --import ./instrument.mjs app.mjs
If it is not possible for you to pass the --import
flag to the Node.js binary, you can alternatively use the
NODE_OPTIONS
environment variable as follows:
NODE_OPTIONS="--import ./instrument.mjs" npm run start
Links
9.37.0
Important Changes
-
feat(nuxt): Parametrize SSR routes (#16843)
When requesting dynamic or catch-all routes in Nuxt, those will now be shown as parameterized routes in Sentry.
For example, /users/123
will be shown as /users/:userId()
in Sentry. This will make it easier to identify patterns and make grouping easier.
Other Changes
- feat(astro): Deprecate passing runtime config to astro integration (#16839)
- feat(browser): Add
beforeStartNavigationSpan
lifecycle hook (#16863)
- feat(browser): Detect redirects when emitting navigation spans (#16324)
- feat(cloudflare): Add option to opt out of capturing errors in
wrapRequestHandler
(#16852)
- feat(feedback): Return the eventId into the onSubmitSuccess callback (#16835)
- feat(vercel-edge): Do not vendor in all OpenTelemetry dependencies (#16841)
- fix(browser): Ensure standalone CLS and LCP spans have traceId of pageload span (#16864)
- fix(nextjs): Use value injection loader on
instrumentation-client.ts|js
(#16855)
- fix(sveltekit): Avoid capturing
redirect()
calls as errors in Cloudflare (#16853)
- docs(nextjs): Update
deleteSourcemapsAfterUpload
jsdoc default value (#16867)
Work in this release was contributed by @zachkirsch. Thank you for your contribution!