Telemetry Telemetri

Perhatian

Fitur ini saat ini bersifat eksperimental.

Modul telemetri (Telemetry) NocoBase berbasis pada OpenTelemetry, digunakan untuk mengumpulkan data trace dan metrik monitoring (Metric), meningkatkan observability NocoBase.

Instrumentasi

Metrik

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

Untuk penggunaan detail lihat OpenTelemetry - Acquiring a Meter.

Trace

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

Untuk penggunaan detail lihat OpenTelemetry - Acquiring a Tracer.

Library Tools

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

Lokasi inisialisasi modul telemetri di NocoBase adalah app.beforeLoad, sehingga tidak semua library instrumentasi cocok untuk NocoBase. Misalnya instrumentation-koa perlu di-import sebelum Koa di-instansiasi, sedangkan Application NocoBase meskipun berbasis Koa, modul telemetrinya baru diinisialisasi setelah Application di-instansiasi, sehingga tidak dapat digunakan.

Untuk penggunaan detail lihat OpenTelemetry - Libraries.

Pengumpulan

Metrik

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

Trace

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

Untuk penggunaan detail lihat OpenTelemetry - Exporters.

Tautan Terkait

  • Logger Log — Log dan telemetri digunakan bersama, melengkapi solusi observability
  • Plugin — Mendaftarkan instrumentasi telemetri dan collector di plugin
  • Ikhtisar Pengembangan Server — Posisi modul telemetri dalam arsitektur server
  • Event — Menginisialisasi telemetri di beforeLoad melalui mekanisme event
  • Middleware — Menggabungkan telemetri di middleware untuk tracing rantai request