Уведомление об ИИ-переводе

Этот документ был переведён с помощью ИИ. Для получения точной информации обратитесь к английской версии.

Телеметрия

Экспериментальная функция

Модуль телеметрии (Telemetry) NocoBase построен на базе OpenTelemetry. В этой статье рассказывается, как использовать модуль телеметрии для сбора данных трассировки (Trace) и метрик (Metric) с целью повышения наблюдаемости (Observability) системы NocoBase.

Инструментирование

Метрики

const meter = app.telemetry.metric.getMeter();
const counter = meter.createCounter('event_counter', {});
counter.add(1);

Ссылки:

Трассировка

const tracer = app.telemetry.trace.getTracer();
tracer.startActiveSpan();
tracer.startSpan();

Ссылки:

Библиотеки инструментов

import { Plugin } from '@nocobase/server';
import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node';

class InstrumentationPlugin extends Plugin {
  afterAdd() {
    this.app.on('beforeLoad', (app) => {
      app.telemetry.addInstrumentation(getNodeAutoInstrumentations());
    });
  }
}
Внимание

В NocoBase инициализация модуля телеметрии выполняется в app.beforeLoad. По этой причине не все библиотеки инструментирования подходят для использования в NocoBase.
Например, instrumentation-koa требует подключения до создания экземпляра Koa. Несмотря на то, что Application в NocoBase основан на Koa, модуль телеметрии инициализируется уже после создания экземпляра Application, что делает использование этой библиотеки невозможным.

Ссылки:

Сбор данных

Метрики

import { Plugin } from '@nocobase/server';
import {
  PeriodicExportingMetricReader,
  ConsoleMetricExporter,
} from '@opentelemetry/sdk-metrics';

class MetricReaderPlugin extends Plugin {
  afterAdd() {
    this.app.on('beforeLoad', (app) => {
      app.telemetry.metric.registerReader(
        'console',
        () =>
          new PeriodicExportingMetricReader({
            exporter: new ConsoleMetricExporter(),
          }),
      );
    });
  }
}

Трассировка

import { Plugin } from '@nocobase/server';
import {
  BatchSpanProcessor,
  ConsoleSpanExporter,
} from '@opentelemetry/sdk-trace-base';

class TraceSpanProcessorPlugin extends Plugin {
  afterAdd() {
    this.app.on('beforeLoad', (app) => {
      app.telemetry.trace.registerProcessor(
        'console',
        () => new BatchSpanProcessor(new ConsoleSpanExporter()),
      );
    });
  }
}

Ссылки: