Avis de traduction IA

Ce document a été traduit par IA. Pour des informations précises, veuillez consulter la version anglaise.

Télémétrie

Expérimental

Le module de télémétrie (Telemetry) de NocoBase est encapsulé sur la base d'OpenTelemetry. Cet article présente comment utiliser le module de télémétrie pour collecter des données de traces (Trace) et de métriques (Metric) afin d'améliorer l'observabilité (Observability) du système NocoBase.

Instrumentation

Métriques

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

Références :

Traces

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

Références :

Bibliothèques d'outils

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

Dans NocoBase, l'emplacement d'initialisation du module de télémétrie est app.beforeLoad. Par conséquent, toutes les bibliothèques d'instrumentation ne sont pas adaptées à NocoBase.
Par exemple : instrumentation-koa doit être introduit avant l'instanciation de Koa. Bien que l'Application de NocoBase soit basée sur Koa, le module de télémétrie est initialisé après l'instanciation de l'Application, il ne peut donc pas être appliqué.

Références :

Collecte

Métriques

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

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

Références :