logologo
Bắt đầu
Hướng dẫn
Phát triển
Plugin
API
Trang chủ
English
简体中文
日本語
한국어
Español
Português
Deutsch
Français
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
Bắt đầu
Hướng dẫn
Phát triển
Plugin
API
Trang chủ
logologo

Bắt đầu nhanh

Tổng quan phát triển plugin
Viết plugin đầu tiên
Cấu trúc thư mục dự án

Phát triển phía server

Tổng quan
Plugin
Collections (Bảng dữ liệu)
Thao tác Database
Quản lý DataSourceManager
Quản lý ResourceManager
Kiểm soát quyền ACL
Middleware
Cache
Event
Ngữ cảnh yêu cầu (Context)
Script nâng cấp (Migration)
Logger (Nhật ký)
I18n (Quốc tế hóa)
Command (Dòng lệnh)
Quản lý tác vụ định kỳ (CronJobManager)
Test

Phát triển phía client

Tổng quan
Plugin
Ngữ cảnh (Context)
Router
Kiểm soát quyền ACL
Quản lý DataSourceManager
Resource
Request
Styles & Themes
Logger (Nhật ký)
I18n (Quốc tế hóa)
Test

Khác

Hướng dẫn nâng cấp plugin
Danh sách ngôn ngữ
Quản lý phụ thuộc
Build
Next PageTổng quan phát triển plugin
Thông báo dịch bằng AI

Tài liệu này được dịch bằng AI. Để biết thông tin chính xác, vui lòng tham khảo phiên bản tiếng Anh.

#Telemetry

Thử nghiệm

Module Telemetry của NocoBase được đóng gói dựa trên OpenTelemetry. Bài viết này giới thiệu cách sử dụng module Telemetry để thu thập dữ liệu truy vết (Trace) và chỉ số (Metric) nhằm tăng cường khả năng quan sát (Observability) cho hệ thống NocoBase.

#Chèn mã (Instrumentation)

#Chỉ số (Metrics)

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

Tham khảo:

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

#Truy vết (Traces)

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

Tham khảo:

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

#Thư viện công cụ

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());
    });
  }
}
Lưu ý

Vị trí khởi tạo của module Telemetry trong NocoBase là app.beforeLoad. Do đó, không phải tất cả các thư viện chèn mã (instrumentation) đều phù hợp với NocoBase.
Ví dụ: instrumentation-koa cần được đưa vào trước khi Koa được khởi tạo (instantiated), trong khi Application của NocoBase mặc dù dựa trên Koa, nhưng module Telemetry chỉ được khởi tạo sau khi Application đã khởi tạo, vì vậy nó không thể áp dụng được.

Tham khảo:

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

#Thu thập (Collection)

#Chỉ số (Metrics)

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

#Truy vết (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()),
      );
    });
  }
}

Tham khảo:

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