logologo
เริ่มต้น
คู่มือ
การพัฒนา
ปลั๊กอิน
API
หน้าหลัก
English
简体中文
日本語
한국어
Español
Português
Deutsch
Français
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
เริ่มต้น
คู่มือ
การพัฒนา
ปลั๊กอิน
API
หน้าหลัก
logologo

เริ่มต้นใช้งานฉบับย่อ

ภาพรวมการพัฒนาปลั๊กอิน
การเขียนปลั๊กอินแรกของคุณ
โครงสร้างไดเรกทอรีโปรเจกต์

การพัฒนาฝั่งเซิร์ฟเวอร์

ภาพรวม
ปลั๊กอิน
คอลเลกชัน
การดำเนินการฐานข้อมูล
การจัดการแหล่งข้อมูล
การจัดการทรัพยากร
การควบคุมการเข้าถึง (ACL)
มิดเดิลแวร์
แคช
เหตุการณ์
คอนเท็กซ์คำขอ
สคริปต์การย้ายข้อมูล
ล็อก
การทำให้เป็นสากล (I18n)
คำสั่ง
การจัดการงานที่กำหนดเวลา
การทดสอบ

การพัฒนาฝั่งไคลเอนต์

ภาพรวม
ปลั๊กอิน
คอนเท็กซ์
เราเตอร์
การควบคุมการเข้าถึง (ACL)
การจัดการแหล่งข้อมูล
ทรัพยากร
คำขอ
สไตล์และธีม
ล็อก
การทำให้เป็นสากล (I18n)
การทดสอบ

อื่นๆ

คู่มือการอัปเกรดปลั๊กอิน
รายการภาษา
การจัดการ Dependencies
การสร้าง
Next Pageภาพรวมการพัฒนาปลั๊กอิน
การแจ้งเตือนการแปลด้วย AI

เอกสารนี้แปลโดย AI สำหรับข้อมูลที่ถูกต้อง กรุณาดูเวอร์ชันภาษาอังกฤษ

#Telemetry

อยู่ในช่วงทดลอง

โมดูล Telemetry ของ NocoBase ถูกพัฒนาขึ้นโดยอ้างอิงจาก OpenTelemetry บทความนี้จะแนะนำวิธีการใช้โมดูล Telemetry เพื่อรวบรวมข้อมูล Trace (การติดตามเส้นทาง) และ Metric (ตัวชี้วัด) เพื่อเพิ่มความสามารถในการสังเกตการณ์ (Observability) ของระบบ NocoBase ครับ

#การติดตั้งเครื่องมือ (Instrumentation)

#Metric (ตัวชี้วัด)

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

อ้างอิง:

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

#Trace (การติดตามเส้นทาง)

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

อ้างอิง:

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

#ไลบรารีเครื่องมือ

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());
    });
  }
}
ข้อควรระวัง

ตำแหน่งการเริ่มต้นทำงาน (Initialization) ของโมดูล Telemetry ใน NocoBase คือ app.beforeLoad ดังนั้น จึงไม่ใช่ทุกไลบรารีสำหรับการติดตั้งเครื่องมือ (Instrumentation) ที่จะสามารถใช้งานกับ NocoBase ได้
ตัวอย่างเช่น: instrumentation-koa จำเป็นต้องถูกนำเข้าก่อนที่ Koa จะถูกสร้างอินสแตนซ์ (Instantiated) แต่เนื่องจากโมดูล Telemetry ของ NocoBase จะเริ่มต้นทำงานหลังจากที่ Application (ซึ่งอ้างอิงจาก Koa) ถูกสร้างอินสแตนซ์แล้ว จึงไม่สามารถใช้งานร่วมกันได้ครับ

อ้างอิง:

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

#การรวบรวมข้อมูล (Collection)

#Metric (ตัวชี้วัด)

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

อ้างอิง:

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