logologo
Empezar
Manual
Desarrollo
Plugins
API
Inicio
English
简体中文
日本語
한국어
Español
Português
Deutsch
Français
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
Empezar
Manual
Desarrollo
Plugins
API
Inicio
logologo

Inicio rápido

Resumen de desarrollo de plugins
Escribir el primer plugin
Estructura de directorios del proyecto

Desarrollo del lado del servidor

Visión general
Plugin
Colecciones
Operaciones de base de datos
Gestión de fuentes de datos
Gestión de recursos
Control de permisos (ACL)
Middleware
Caché
Evento
Contexto de solicitud
Migración (Script de actualización)
Registro (Logger)
Internacionalización (I18n)
Línea de comandos (Command)
Gestión de tareas programadas
Pruebas

Desarrollo del lado del cliente

Visión general
Plugin
Contexto
Enrutador (Router)
Control de permisos (ACL)
Gestión de fuentes de datos
Recurso
Solicitud
Estilos y temas
Registro (Logger)
Internacionalización (I18n)
Pruebas

Otros

Guía de actualización de plugins
Lista de idiomas
Gestión de dependencias
Compilación
Next PageResumen de desarrollo de plugins
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:

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

#Trazas (Traces)

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

Referencias:

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

#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:

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

#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:

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