Official Sentry SDK for Astro

Links
SDK Status
This SDK is in Beta and not yet fully stable. If you have feedback or encounter any bugs, feel free to
open an issue.
General
This package is a wrapper around @sentry/node
for the server and @sentry/browser
for the client side.
Installation and Setup
Install the Sentry Astro SDK with the astro
CLI:
npx astro add @sentry/astro
Add your DSN and source maps upload configuration:
import { defineConfig } from 'astro/config';
import sentry from '@sentry/astro';
export default defineConfig({
integrations: [
sentry({
dsn: '__DSN__',
sourceMapsUploadOptions: {
project: 'your-sentry-project-slug',
authToken: process.env.SENTRY_AUTH_TOKEN,
},
}),
],
});
Follow this guide to create an auth
token and add it to your environment variables:
SENTRY_AUTH_TOKEN="your-token"
Server Instrumentation
For Astro apps configured for (hybrid) Server Side Rendering (SSR), the Sentry integration will automatically add
middleware to your server to instrument incoming requests if you're using Astro 3.5.2 or newer.
If you're using Astro <3.5.2, complete the setup by adding the Sentry middleware to your src/middleware.js
file:
import { sequence } from 'astro:middleware';
import * as Sentry from '@sentry/astro';
export const onRequest = sequence(
Sentry.handleRequest(),
);
The Sentry middleware enhances the data collected by Sentry on the server side by:
- Enabeling distributed tracing between client and server
- Collecting performance spans for incoming requests
- Enhancing captured errors with additional information
Disable Automatic Server Instrumentation
You can opt out of using the automatic sentry server instrumentation in your astro.config.mjs
file:
import { defineConfig } from 'astro/config';
import sentry from '@sentry/astro';
export default defineConfig({
integrations: [
sentry({
dsn: '__DSN__',
autoInstrumentation: {
requestHandler: false,
},
}),
],
});
Configuration
Check out our docs for configuring your SDK setup:
8.36.0
Important Changes
- feat(nextjs/vercel-edge/cloudflare): Switch to OTEL for performance monitoring (#13889)
With this release, the Sentry Next.js, and Cloudflare SDKs will now capture performance data based on OpenTelemetry.
Some exceptions apply in cases where Next.js captures inaccurate data itself.
NOTE: You may experience minor differences in transaction names in Sentry.
Most importantly transactions for serverside pages router invocations will now be named GET /[param]/my/route
instead of /[param]/my/route
.
This means that those transactions are now better aligned with the OpenTelemetry semantic conventions.
Other Changes
- deps: Bump bundler plugins and CLI to 2.22.6 and 2.37.0 respectively (#14050)
- feat(deps): bump @opentelemetry/instrumentation-aws-sdk from 0.44.0 to 0.45.0 (#14099)
- feat(deps): bump @opentelemetry/instrumentation-connect from 0.39.0 to 0.40.0 (#14101)
- feat(deps): bump @opentelemetry/instrumentation-express from 0.43.0 to 0.44.0 (#14102)
- feat(deps): bump @opentelemetry/instrumentation-fs from 0.15.0 to 0.16.0 (#14098)
- feat(deps): bump @opentelemetry/instrumentation-kafkajs from 0.3.0 to 0.4.0 (#14100)
- feat(nextjs): Add method and url to route handler request data (#14084)
- feat(node): Add breadcrumbs for
child_process
and worker_thread
(#13896) - fix(core): Ensure standalone spans are not sent if SDK is disabled (#14088)
- fix(nextjs): Await flush in api handlers (#14023)
- fix(nextjs): Don't leak webpack types into exports (#14116)
- fix(nextjs): Fix matching logic for file convention type for root level components (#14038)
- fix(nextjs): Respect directives in value injection loader (#14083)
- fix(nuxt): Only wrap
.mjs
entry files in rollup (#14060) - fix(nuxt): Re-export all exported bindings (#14086)
- fix(nuxt): Server-side setup in readme (#14049)
- fix(profiling-node): Always warn when running on incompatible major version of Node.js (#14043)
- fix(replay): Fix
onError
callback (#14002) - perf(otel): Only calculate current timestamp once (#14094)
- test(browser-integration): Add sentry DSN route handler by default (#14095)