Aviso de traducción IA

Este documento ha sido traducido por IA. Para información precisa, consulte la versión en inglés.

Telemetría

Experimental

El módulo de telemetría (Telemetry) de NocoBase está encapsulado basándose en OpenTelemetry. Este artículo presenta cómo utilizar el módulo de telemetría para recopilar datos de trazas (Trace) y métricas (Metric) para mejorar la observabilidad (Observability) del sistema NocoBase.

Instrumentación

Métricas

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

Referencias:

Trazas (Traces)

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

Referencias:

Bibliotecas de herramientas

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());
    });
  }
}
Atención

En NocoBase, la ubicación de inicialización del módulo de telemetría es app.beforeLoad. Por lo tanto, no todas las bibliotecas de instrumentación son adecuadas para NocoBase.
Por ejemplo: instrumentation-koa necesita ser introducido antes de que se instancie Koa. Aunque la Application de NocoBase se basa en Koa, el módulo de telemetría se inicializa después de que la Application se ha instanciado, por lo que no se puede aplicar.

Referencias:

Recopilación

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

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

Referencias: