logologo
Start
Handbuch
Entwicklung
Plugins
API
Startseite
English
简体中文
日本語
한국어
Español
Português
Deutsch
Français
Русский
Start
Handbuch
Entwicklung
Plugins
API
Startseite
logologo

Schnellstart

Plugin-Entwicklung: Überblick
Erstes Plugin schreiben
Projektverzeichnisstruktur

Serverseitige Entwicklung

Überblick
Plugin
Collections (Datentabellen)
Datenbankoperationen
DataSourceManager
ResourceManager
ACL-Zugriffskontrolle
Middleware
Cache
Events
Request-Kontext
Migration (Update-Skripte)
Logger (Protokollierung)
I18n (Internationalisierung)
Command (Befehlszeile)
CronJobManager
Tests

Clientseitige Entwicklung

Überblick
Plugin
Kontext
Router
ACL-Zugriffskontrolle
DataSourceManager
Ressourcen
Requests
Stile & Themes
Logger (Protokollierung)
I18n (Internationalisierung)
Tests

Sonstiges

Plugin-Update-Leitfaden
Sprachenliste
Abhängigkeitsverwaltung
Build
Next PagePlugin-Entwicklung: Überblick
KI-Übersetzungshinweis

Dieses Dokument wurde von KI übersetzt. Für genaue Informationen lesen Sie bitte die englische Version.

#Telemetrie

Experimentell

Das Telemetrie-Modul von NocoBase basiert auf OpenTelemetry. Dieser Artikel beschreibt, wie Sie das Telemetrie-Modul verwenden, um Traces (Ablaufverfolgung) und Metriken zu sammeln, um die Beobachtbarkeit (Observability) des NocoBase-Systems zu verbessern.

#Instrumentierung

#Metriken

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

Referenzen:

  • https://opentelemetry.io/docs/instrumentation/js/manual/#acquiring-a-meter

#Traces

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

Referenzen:

  • https://opentelemetry.io/docs/instrumentation/js/manual/#acquiring-a-tracer

#Bibliotheken

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

In NocoBase erfolgt die Initialisierung des Telemetrie-Moduls zum Zeitpunkt app.beforeLoad. Daher sind nicht alle Instrumentierungs-Bibliotheken für NocoBase geeignet.
Beispielsweise muss instrumentation-koa vor der Instanziierung von Koa eingebunden werden. Obwohl die Application von NocoBase auf Koa basiert, wird das Telemetrie-Modul erst nach der Instanziierung der Application initialisiert, weshalb diese Bibliothek nicht verwendet werden kann.

Referenzen:

  • https://opentelemetry.io/docs/instrumentation/js/libraries/

#Erfassung

#Metriken

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

Referenzen:

  • https://opentelemetry.io/docs/instrumentation/js/exporters