Skip to main content

SentryPlugin

SentryPlugin

This plugin integrates the Sentry error tracking & performance monitoring service with your Vendure server. In addition to capturing errors, it also provides built-in support for tracing as well as enriching your Sentry events with additional context about the request.

Pre-requisites

This plugin depends on access to Sentry, which can be self-hosted or used as a cloud service.

If using the hosted SaaS option, you must have a Sentry account and a project set up (sign up here). When setting up your project, select the "Node.js" platform and no framework.

Once set up, you will be given a Data Source Name (DSN) which you will need to provide to the plugin.

Installation

npm install --save @vendure/sentry-plugin

Configuration

Setting up the Sentry plugin requires two steps:

Step 1: Preload the Sentry instrument file

The Sentry SDK must be initialized before your application starts. This is done by preloading the instrument file when starting your Vendure server:

node --import @vendure/sentry-plugin/instrument ./dist/index.js

Or if using TypeScript directly with tsx:

tsx --import @vendure/sentry-plugin/instrument ./src/index.ts

Step 2: Add the SentryPlugin to your Vendure config

import { VendureConfig } from '@vendure/core';
import { SentryPlugin } from '@vendure/sentry-plugin';

export const config: VendureConfig = {
// ...
plugins: [
// ...
SentryPlugin.init({
// Optional configuration
includeErrorTestMutation: true,
}),
],
};

Tracing

This plugin includes built-in support for tracing, which allows you to see the performance of your. To enable tracing, preload the instrument file as described in Step 1. This make sure that the Sentry SDK is initialized before any other code is executed.

You can also set the tracesSampleRate and profilesSampleRate options to control the sample rate for tracing and profiling, with the following environment variables:

  • SENTRY_TRACES_SAMPLE_RATE
  • SENTRY_PROFILES_SAMPLE_RATE

The sample rate for tracing should be between 0 and 1. The sample rate for profiling should be between 0 and 1.

By default, both are set to undefined, which means that tracing and profiling are disabled.

Instrumenting your own code

You may want to add your own custom spans to your code. To do so, you can use the Sentry object from the @sentry/node package. For example:

import * as Sentry from "@sentry/node";

export class MyService {
async myMethod() {
Sentry.setContext('My Custom Context,{
key: 'value',
});
}
}

Error test mutation

To test whether your Sentry configuration is working correctly, you can set the includeErrorTestMutation option to true. This will add a mutation to the Admin API which will throw an error of the type specified in the errorType argument. For example:

mutation CreateTestError {
createTestError(errorType: DATABASE_ERROR)
}

You should then be able to see the error in your Sentry dashboard (it may take a couple of minutes to appear).

Signature
class SentryPlugin {
static options: SentryPluginOptions = {} as any;
init(options: SentryPluginOptions) => ;
}

options

init

method
(options: SentryPluginOptions) =>