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.31.0
Important Changes
- feat(node): Add
dataloader
integration (#13664)
This release adds a new integration for the dataloader
package. The Node
SDK (and all SDKs that depend on it) will now automatically instrument dataloader
instances. You can also add it
manually:
Sentry.init({
integrations: [Sentry.dataloaderIntegration()],
});
Other Changes
- feat(browser): Add navigation
activationStart
timestamp to pageload span (#13658) - feat(gatsby): Add optional
deleteSourcemapsAfterUpload
(#13610) - feat(nextjs): Give app router prefetch requests a
http.server.prefetch
op (#13600) - feat(nextjs): Improve Next.js serverside span data quality (#13652)
- feat(node): Add
disableInstrumentationWarnings
option (#13693) - feat(nuxt): Adding
experimental_basicServerTracing
option to Nuxt module (#13643) - feat(nuxt): Improve logs about adding Node option 'import' (#13726)
- feat(replay): Add
onError
callback + other small improvements to debugging (#13721) - feat(replay): Add experimental option to allow for a checkout every 6 minutes (#13069)
- feat(wasm): Unconditionally parse instruction addresses (#13655)
- fix: Ensure all logs are wrapped with
consoleSandbox
(#13690) - fix(browser): Try multiple options for
lazyLoadIntegration
script parent element lookup (#13717) - fix(feedback): Actor color applies to feedback icon (#13702)
- fix(feedback): Fix form width on mobile devices (#13068)
- fix(nestjs): Preserve original function name on
SentryTraced
functions (#13684) - fix(node): Don't overwrite local variables for re-thrown errors (#13644)
- fix(normalize): Treat Infinity as NaN both are non-serializable numbers (#13406)
- fix(nuxt): Use correct server output file path (#13725)
- fix(opentelemetry): Always use active span in
Propagator.inject
(#13381) - fix(replay): Fixes potential out-of-order segments (#13609)
Work in this release was contributed by @KyGuy2002, @artzhookov, and @julianCast. Thank you for your contributions!