# NestJS Error Tracking and Performance Monitoring

> Error tracking that helps developers monitor and fix crashes in real time. Iterate continuously. Boost workflow efficiency. Improve user experience.

**URL:** https://sentry.io/for/nestjs/

---

**Documentation:** [https://docs.sentry.io/platforms/javascript/guides/nestjs/](https://docs.sentry.io/platforms/javascript/guides/nestjs/)

## Install

Add `@sentry/nestjs` as a dependency:

```bash
npm install --save @sentry/nestjs
```

You need to create a file named `instrument.js` that imports and initializes Sentry:

```javascript
import * as Sentry from '@sentry/nestjs';

// Ensure to call this before importing any other modules!
Sentry.init({
  dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0',

  // Add Tracing by setting tracesSampleRate
  // We recommend adjusting this value in production
  tracesSampleRate: 1.0,
});
```

You need to require or import the `instrument.js` file before requiring any other modules in your application. This is necessary to ensure that Sentry can automatically instrument all modules in your application:

```javascript
// Import this first!
import './instrument';

// Now import other modules
import { NestFactory } from "@nestjs/core";
import { AppModule } from "./app.module";

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
}

bootstrap();
```

Afterwards, add the `SentryModule` as a root module to your main module:

```javascript
import { Module } from "@nestjs/common";
import { SentryModule } from "@sentry/nestjs/setup";
import { AppController } from "./app.controller";
import { AppService } from "./app.service";

@Module({
  imports: [
    SentryModule.forRoot(),
    // ...other modules
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
```

In case you are using a global catch-all exception filter (which is either a filter registered with `app.useGlobalFilters()` or a filter registered in your app module providers annotated with an empty `@Catch()` decorator), add a `@WithSentry()` decorator to the `catch()` method of this global error filter. This decorator will report all unexpected errors that are received by your global error filter to Sentry:

```javascript
import { Catch, ExceptionFilter } from '@nestjs/common';
import { WithSentry } from '@sentry/nestjs';

@Catch()
export class YourCatchAllExceptionFilter implements ExceptionFilter {
  @WithSentry()
  catch(exception, host): void {
    // your implementation here
  }
}
```

In case you do not have a global catch-all exception filter, add the `SentryGlobalFilter` to the providers of your main module. This filter will report all unhandled errors that are not caught by any other error filter to Sentry. Important: The `SentryGlobalFilter` needs to be registered before any other exception filters.

```javascript
import { Module } from '@nestjs/common';
import { APP_FILTER } from '@nestjs/core';
import { SentryGlobalFilter } from '@sentry/nestjs/setup';

@Module({
  providers: [
    {
      provide: APP_FILTER,
      useClass: SentryGlobalFilter,
    },
    // ..other providers
  ],
})
export class AppModule {}
```

See the [NestJS docs](https://docs.sentry.io/platforms/javascript/guides/nestjs/) for full setup options.

## Features

### Powered by OpenTelemetry

Sentry works with OpenTelemetry to provide a simple configuration process, and rich distributed tracing context across all the libraries and frameworks used in your application. Regardless of your chosen tech stack.

### NestJS Performance Monitoring

Quickly identify NestJS [performance](/for/performance/) issues and view full end-to-end distributed trace to see the exact, poor-performing API call and surface any related errors.

### NestJS Error Monitoring with Complete Stack Traces

See the NestJS source code at each frame instead of settings for just line and column numbers. Get proper asynchronous context tracking — like thread-local store — in a way that fits Node's concurrency model.

### Fill In The Blanks About NestJS Errors

See what the app was doing when the NestJS error occurred: HTTP requests, database queries, console loft statements, etc.

### NestJS Application Profiling

Profiling lets you see what parts of your code are consuming the most resources, like CPU or memory, in your application— so you can optimize them before end user experience is impacted. Test your application performance in any environment, including in production, without writing manual tests or extensive troubleshooting.

---

*Source: [sentry.io/for/nestjs/](https://sentry.io/for/nestjs/)*
