KEMBAR78
# Set Up Tracing | Sentry for Next.js With [tracing](https://docs.sentry.io/product/insights/overview.md), Sentry automatically tracks your software performance across your application services, measuring metrics like throughput and latency, and displaying the impact of errors across multiple systems. If you’re adopting Tracing in a high-throughput environment, we recommend testing prior to deployment to ensure that your service’s performance characteristics maintain expectations. Sentry can integrate with **OpenTelemetry**. You can find more information about it [here](https://docs.sentry.io/platforms/javascript/guides/nextjs/opentelemetry.md). ## [Configure](https://docs.sentry.io/platforms/javascript/guides/nextjs/tracing.md#configure) Enable tracing by setting the sample rate for your traces. Set `tracesSampleRate` in your config files: * `sentry.server.config.js` * `sentry.edge.config.js`: * `instrumentation-client.js` * If you previously had a file called `sentry.client.config.(js|ts)`, you can safely rename this to `instrumentation-client.(js|ts)` for all Next.js versions. `instrumentation-client.(js|ts)` ```javascript import * as Sentry from "@sentry/nextjs"; Sentry.init({ dsn: "https://examplePublicKey@o0.ingest.sentry.io/0", // We recommend adjusting this value in production, or using `tracesSampler` // for finer control tracesSampleRate: 1.0, // ... rest of your config }); // This export will instrument router navigations, and is only relevant if you enable tracing. // `captureRouterTransitionStart` is available from SDK version 9.12.0 onwards export const onRouterTransitionStart = Sentry.captureRouterTransitionStart; ``` Additional Configuration for App Router on Next.js 14 In order to enable distributed tracing for App Router on Next.js 14 you need to add or modify the `generateMetadata` function of your root layout: `app/layout.tsx` ```typescript import * as Sentry from "@sentry/nextjs"; import type { Metadata } from "next"; export function generateMetadata(): Metadata { return { // ... your existing metadata other: { ...Sentry.getTraceData(), }, }; } ``` * You can establish a uniform sample rate for all transactions by setting the `tracesSampleRate` option in your SDK config to a number between `0` and `1`. (For example, to send 20% of transactions, set `tracesSampleRate` to `0.2`.) * For more granular control over sampling, you can set the sample rate based on the transaction itself and the context in which it's captured, by providing a function to the `tracesSampler` config option. The two options are mutually exclusive. If both are set, `tracesSampler` will take precedence. You can find more in-depth explanations and examples about sampling configuration in [Configure Sampling](https://docs.sentry.io/platforms/javascript/guides/nextjs/tracing/configure-sampling.md). ## [Distributed Tracing](https://docs.sentry.io/platforms/javascript/guides/nextjs/tracing.md#distributed-tracing) Sentry captures distributed traces consisting of transactions and spans, which measure individual services and individual operations within those services, respectively. Learn more about our model in [Distributed Tracing](https://docs.sentry.io/product/sentry-basics/tracing/distributed-tracing.md). ## [Verify](https://docs.sentry.io/platforms/javascript/guides/nextjs/tracing.md#verify) While you're testing, set `tracesSampleRate` to `1.0`, as that ensures that every transaction will be sent to Sentry. Once testing is complete, you may want to set a lower `tracesSampleRate` value, or switch to using `tracesSampler` to selectively sample and filter your transactions, based on contextual data. If you leave your sample rate at `1.0`, a transaction will be sent every time a user loads a page or navigates within your app. Depending on the amount of traffic your application gets, this may mean a lot of transactions. If you have a high-load, backend application, you may want to consider setting a lower `tracesSampleRate` value, or switching to using `tracesSampler` to selectively sample and filter your transactions, based on contextual data. ## [Automatic Instrumentation](https://docs.sentry.io/platforms/javascript/guides/nextjs/tracing.md#automatic-instrumentation) See [Automatic Instrumentation](https://docs.sentry.io/platforms/javascript/guides/nextjs/tracing/instrumentation/automatic-instrumentation.md) to learn about all the things that the SDK automatically instruments for you. ## [Custom Instrumentation](https://docs.sentry.io/platforms/javascript/guides/nextjs/tracing.md#custom-instrumentation) You can also manually start spans to instrument specific parts of your code. This is useful when you want to measure the performance of a specific operation or function. * [Tracing APIs](https://docs.sentry.io/platforms/javascript/guides/nextjs/apis.md#tracing): Find information about APIs for custom tracing instrumentation * [Instrumentation](https://docs.sentry.io/platforms/javascript/guides/nextjs/tracing/instrumentation.md): Find information about manual instrumentation with the Sentry SDK * [Sending Span Metrics](https://docs.sentry.io/platforms/javascript/guides/nextjs/tracing/span-metrics.md): Learn how to capture metrics on your spans ## [Disabling Tracing](https://docs.sentry.io/platforms/javascript/guides/nextjs/tracing.md#disabling-tracing) If you want to disable tracing, you *should not* set `tracesSampleRate` at all. Setting it to `0` will not disable tracing, it will simply never send any traces to Sentry. Instead, neither `tracesSampleRate` nor `tracesSampler` should be defined in your SDK config to fully disable tracing. In addition, you can set `__SENTRY_TRACING__` to `false` to ensure the tracing code is removed from your production build. This will result in [trace propagation](https://docs.sentry.io/platforms/javascript/guides/nextjs/tracing/distributed-tracing.md) being disabled as well. See [Tree Shaking](https://docs.sentry.io/platforms/javascript/guides/nextjs/configuration/tree-shaking.md) for more information. ## [Next Steps](https://docs.sentry.io/platforms/javascript/guides/nextjs/tracing.md#next-steps) * #### [Sending Span Metrics](https://docs.sentry.io/platforms/javascript/guides/nextjs/tracing/span-metrics.md) Learn how to add attributes to spans to monitor performance and debug applications * #### [Set Up Distributed Tracing](https://docs.sentry.io/platforms/javascript/guides/nextjs/tracing/distributed-tracing.md) Learn how to connect events across applications/services. * #### [Configure Sampling](https://docs.sentry.io/platforms/javascript/guides/nextjs/tracing/configure-sampling.md) Learn how to configure sampling in your app. * #### [Instrumentation](https://docs.sentry.io/platforms/javascript/guides/nextjs/tracing/instrumentation.md) Learn how to configure spans to capture trace data on any action in your app. * #### [Troubleshooting](https://docs.sentry.io/platforms/javascript/guides/nextjs/tracing/troubleshooting.md) Learn how to troubleshoot your tracing setup.