← Усі дописи

@sentry/node-core: Sentry для помилок без конфліктів з OpenTelemetry

Використовуєте Sentry лише для помилок, а Observability – окремо?

Є сенс звернути увагу на новий пакет @sentry/node-core.

Він не тягне за собою свої версії OpenTelemetry залежностей, не патчить пакети та не налаштовує експортери за замовчуванням. Тобто працює лише у вашому кастомному стеку – без магії.

Я використовую Sentry в NestJS-додатках для відстеження помилок та моніторингу cron’ів. А traces з OpenTelemetry надсилаю деінде. Із попереднім SDK це було незручно – доводилося лізти в сорси Sentry й OpenTelemetry, щоб зрозуміти, як уникнути конфліктів.

Було так

import * as Sentry from '@sentry/nestjs';
import { SentryPropagator } from '@sentry/opentelemetry';
import { CustomSampler } from './sampler';

const sdk = new NodeSDK({
  traceExporter,
  sampler: new CustomSampler(),
  spanProcessors: [new BatchSpanProcessor(traceExporter)],
  contextManager: new Sentry.SentryContextManager(),
  textMapPropagator: new SentryPropagator(),
  instrumentations: [...],
});
sdk.start();

У попередній версії ще бажано було додавати:

Sentry.init({
  skipOpenTelemetrySetup: true,
  registerEsmLoaderHooks: false,
});

Стало так

const sdk = new NodeSDK({
  traceExporter,
  spanProcessors: [new BatchSpanProcessor(traceExporter)],
  instrumentations: [...],
});
sdk.start();

У @sentry/node-core цього не потрібно – він не втручається в OTel, доки ви самі не захочете.

Висновок

Якщо вам потрібен Sentry тільки для помилок – @sentry/node-core ідеально підходить:

Рекомендую спробувати замість @sentry/nestjs. Також варто спочатку прочитати Migration guide.


Уперше опубліковано в моєму Telegram-каналі.