Aviso de tradução por IA

Este documento foi traduzido por IA. Para informações precisas, consulte a versão em inglês.

Telemetria

Experimental

O módulo de telemetria (Telemetry) do NocoBase é baseado no OpenTelemetry. Este artigo apresenta como usar o módulo de telemetria para coletar dados de rastreamento (Trace) e métricas (Metric) para aumentar a observabilidade (Observability) do sistema NocoBase.

Instrumentação

Métricas

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

Referências:

Rastreamentos (Traces)

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

Referências:

Bibliotecas

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());
    });
  }
}
Atenção

No NocoBase, o local de inicialização do módulo de telemetria é app.beforeLoad. Portanto, nem todas as bibliotecas de instrumentação são adequadas para o NocoBase.
Por exemplo: o instrumentation-koa precisa ser introduzido antes que o Koa seja instanciado. Embora a Application do NocoBase seja baseada no Koa, o módulo de telemetria é inicializado após a Application ser instanciada, portanto, ele não pode ser aplicado.

Referências:

Coleta

Métricas

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(),
          }),
      );
    });
  }
}

Rastreamentos (Traces)

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()),
      );
    });
  }
}

Referências: