全部产品
Search
文档中心

Managed Service for OpenTelemetry:Gunakan Managed Service for OpenTelemetry untuk mengirimkan data jejak aplikasi Node.js

更新时间:Jul 02, 2025

Setelah Anda menggunakan OpenTelemetry untuk menginstrumentasi aplikasi dan melaporkan data jejak ke Managed Service for OpenTelemetry, Managed Service for OpenTelemetry mulai memantau aplikasi tersebut. Anda dapat melihat data pemantauan aplikasi, seperti topologi aplikasi, jejak, transaksi abnormal, transaksi lambat, dan data analisis SQL. Topik ini menjelaskan cara menggunakan OpenTelemetry untuk secara otomatis atau manual menginstrumentasi aplikasi Node.js berbasis Express dan melaporkan data.

Prasyarat

Penting

Versi Node.js harus 14 atau lebih baru. Jika tidak, disarankan menggunakan Jaeger untuk melaporkan data jejak aplikasi Node.js. Untuk informasi lebih lanjut, lihat Laporkan Data Aplikasi Node.js.

Untuk mendapatkan titik akhir Managed Service for OpenTelemetry, ikuti langkah-langkah berikut:

  1. Masuk ke Konsol Managed Service for OpenTelemetry.

  2. Di bilah navigasi sisi kiri, klik Cluster Configurations. Di halaman yang muncul, klik tab Access point information.

  3. Di bilah navigasi atas, pilih wilayah. Di bagian Cluster Information, aktifkan opsi Show Token.

  4. Atur parameter Client menjadi OpenTelemetry.

    Dapatkan titik akhir Managed Service for OpenTelemetry di kolom Related Information pada tabel di bagian bawah.OT接入点信息

    Catatan

    Jika aplikasi Anda diterapkan di lingkungan produksi Alibaba Cloud, gunakan titik akhir Virtual Private Cloud (VPC). Jika tidak, gunakan titik akhir publik.

Informasi Latar Belakang

OpenTelemetry menyediakan beberapa plug-in instrumentasi otomatis yang dapat digunakan untuk membuat rentang secara otomatis untuk kerangka kerja umum. Tabel berikut mencantumkan kerangka kerja yang didukung. Untuk informasi lebih lanjut, lihat Dokumentasi OpenTelemetry.

Lihat Kerangka Kerja Node.js yang Didukung

Kerangka Kerja

Referensi

amqplib

@opentelemetry/instrumentation-amqplib

aws-lambda

@opentelemetry/instrumentation-aws-lambda

aws-sdk

@opentelemetry/instrumentation-aws-sdk

bunyan

@opentelemetry/instrumentation-bunyan

cassandra-driver

@opentelemetry/instrumentation-cassandra-driver

connect

@opentelemetry/instrumentation-connect

cucumber

@opentelemetry/instrumentation-cucumber

dataloader

@opentelemetry/instrumentation-dataloader

dns

@opentelemetry/instrumentation-dns

express

@opentelemetry/instrumentation-express

fastify

@opentelemetry/instrumentation-fastify

generic-pool

@opentelemetry/instrumentation-generic-pool

graphql

@opentelemetry/instrumentation-graphql

grpc

@opentelemetry/instrumentation-grpc

hapi

@opentelemetry/instrumentation-hapi

http

@opentelemetry/instrumentation-http

ioredis

@opentelemetry/instrumentation-ioredis

knex

@opentelemetry/instrumentation-knex

koa

@opentelemetry/instrumentation-koa

lru-memoizer

@opentelemetry/instrumentation-lru-memoizer

memcached

@opentelemetry/instrumentation-memcached

mongodb

@opentelemetry/instrumentation-mongodb

mongoose

@opentelemetry/instrumentation-mongoose

mysql

@opentelemetry/instrumentation-mysql

mysql2

@opentelemetry/instrumentation-mysql2

nestjs-core

@opentelemetry/instrumentation-nestjs-core

net

@opentelemetry/instrumentation-net

pg

@opentelemetry/instrumentation-pg

pino

@opentelemetry/instrumentation-pino

redis

@opentelemetry/instrumentation-redis

restify

@opentelemetry/instrumentation-restify

socket.io

@opentelemetry/instrumentation-socket.io

winston

@opentelemetry/instrumentation-winston

Kode Contoh

Anda dapat mengunduh kode contoh dari opentelemetry-nodejs-demo.

Metode 1: Instrumentasi Otomatis (direkomendasikan)

  1. Unduh dependensi yang diperlukan untuk menjalankan proyek.

    cd auto-instrumentation
    
    npm init -y
    npm install express
    npm install axios
  2. Unduh dependensi yang diperlukan untuk instrumentasi otomatis OpenTelemetry.

    npm install --save @opentelemetry/api
    npm install --save @opentelemetry/auto-instrumentations-node
  3. Tulis kode aplikasi.

    Berikut adalah contoh sederhana yang diimplementasikan menggunakan Express:

    "use strict";
    
    const axios = require("axios").default;
    const express = require("express");
    const app = express();
    
    app.get("/", async (req, res) => {
      const result = await axios.get("http://localhost:7001/hello");
      return res.status(201).send(result.data);
    });
    
    app.get("/hello", async (req, res) => {
      console.log("hello world!")
      res.json({ code: 200, msg: "success" });
    });
    
    app.use(express.json());
    
    app.listen(7001, () => {
      console.log("Listening on http://localhost:7001");
    });
  4. Gunakan variabel lingkungan untuk mengatur parameter OpenTelemetry dan jalankan aplikasi.

    Ganti ${httpEndpoint} dengan titik akhir HTTP yang diperoleh di Prasyarat. Ganti ${serviceName} dengan nama aplikasi.

    export OTEL_TRACES_EXPORTER="otlp"
    export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT="${httpEndpoint}"
    export OTEL_NODE_RESOURCE_DETECTORS="env,host,os"
    export OTEL_SERVICE_NAME="${serviceName}"
    export NODE_OPTIONS="--require @opentelemetry/auto-instrumentations-node/register"
    node main.js
    Catatan

    Untuk informasi tentang variabel lingkungan OpenTelemetry, lihat Konfigurasi Instrumentasi Otomatis.

  5. Akses aplikasi.

    Akses aplikasi dengan menjalankan perintah berikut atau menggunakan browser. Kemudian, Anda dapat menghasilkan jejak dan melaporkan data jejak ke Managed Service for OpenTelemetry.

    curl localhost:7001/hello

Metode 2: Instrumentasi Manual

  1. Tambahkan dependensi berikut untuk OpenTelemetry ke file package.json.

     "dependencies": {
        "@opentelemetry/api": "^1.0.4",
        "@opentelemetry/exporter-trace-otlp-grpc": "^0.27.0",
        "@opentelemetry/instrumentation": "^0.27.0",
        "@opentelemetry/instrumentation-express": "^0.27.0",
        "@opentelemetry/instrumentation-http": "^0.27.0",
        "@opentelemetry/resources": "^1.0.1",
        "@opentelemetry/sdk-trace-base": "^1.0.1",
        "@opentelemetry/sdk-trace-node": "^1.0.1"
      }
  2. Buat penyedia.

    const { Resource } = require("@opentelemetry/resources");
    const { NodeTracerProvider } = require("@opentelemetry/sdk-trace-node");
    const {
      SemanticResourceAttributes,
    } = require("@opentelemetry/semantic-conventions");
    
    const provider = new NodeTracerProvider({
      resource: new Resource({
        [SemanticResourceAttributes.HOST_NAME]: require("os").hostname(),
        [SemanticResourceAttributes.SERVICE_NAME]: "opentelemetry-express",    // Anda bisa mengganti opentelemetry-express dengan nama layanan aktual.
      }),
    });
  3. Daftarkan kerangka kerja HTTP dan Express menggunakan penyedia. Aplikasi dalam kerangka kerja ini dipantau dan dicegat secara otomatis.

    Catatan

    Untuk informasi tentang cara memantau aplikasi Node.js dalam kerangka kerja lain, lihat Dokumentasi OpenTelemetry.

    const { registerInstrumentations } = require("@opentelemetry/instrumentation");
    const { HttpInstrumentation } = require("@opentelemetry/instrumentation-http");
    const {
      ExpressInstrumentation,
    } = require("@opentelemetry/instrumentation-express");
    
    registerInstrumentations({
      tracerProvider: provider,
      instrumentations: [new HttpInstrumentation(), ExpressInstrumentation],
    });
  4. Konfigurasikan exporter untuk mengekspor data ke Managed Service for OpenTelemetry.

    Ganti <ENDPOINT> dan <AUTHENTICATION> dalam kode berikut dengan titik akhir dan token yang diperoleh di Prasyarat.

    const metadata = new grpc.Metadata();
    metadata.set("Authentication", "<AUTHENTICATION>");
    
    const exporter = new OTLPTraceExporter({ url: "<ENDPOINT>", metadata });
    provider.addSpanProcessor(new SimpleSpanProcessor(exporter));
    provider.register();
  5. Opsional. Tambahkan acara kustom dan atribut.

    Catatan

    Untuk informasi tentang cara menggunakan API OpenTelemetry, lihat Dokumentasi OpenTelemetry.

    const api = require("@opentelemetry/api");
    const currentSpan = api.trace.getSpan(api.context.active());
    currentSpan.addEvent("timestamp", { value: Date.now() });
    currentSpan.setAttribute("tagKey-01", "tagValue-01");

Lihat data jejak di konsol ARMS

Di halaman Applications dari Konsol Managed Service for OpenTelemetry, klik nama aplikasi. Di halaman yang muncul, lihat data jejak.

Kode contoh lengkap aplikasi Node.js berbasis Express

"use strict";

const { Resource } = require("@opentelemetry/resources");
const {
  OTLPTraceExporter,
} = require("@opentelemetry/exporter-trace-otlp-grpc");
const { NodeTracerProvider } = require("@opentelemetry/sdk-trace-node");
const { SimpleSpanProcessor } = require("@opentelemetry/sdk-trace-base");
const {
  ExpressInstrumentation,
} = require("@opentelemetry/instrumentation-express");
const { registerInstrumentations } = require("@opentelemetry/instrumentation");
const { HttpInstrumentation } = require("@opentelemetry/instrumentation-http");
const {
  SemanticResourceAttributes,
} = require("@opentelemetry/semantic-conventions");
const grpc = require("@grpc/grpc-js");

const provider = new NodeTracerProvider({
  resource: new Resource({
    [SemanticResourceAttributes.HOST_NAME]: require("os").hostname(),
    [SemanticResourceAttributes.SERVICE_NAME]: "opentelemetry-express",
  }),
});

registerInstrumentations({
  tracerProvider: provider,
  instrumentations: [new HttpInstrumentation(), ExpressInstrumentation],
});

const metadata = new grpc.Metadata();
metadata.set("Authentication", "<AUTHENTICATION>");

const exporter = new OTLPTraceExporter({ url: "<ENDPOINT>", metadata });
provider.addSpanProcessor(new SimpleSpanProcessor(exporter));
provider.register();

// Kode aplikasi
const api = require("@opentelemetry/api");
const axios = require("axios").default;
const express = require("express");
const app = express();

app.get("/", async (req, res) => {
  const result = await axios.get("http://localhost:7001/api");
  return res.status(201).send(result.data);
});

app.get("/api", async (req, res) => {
  const currentSpan = api.trace.getSpan(api.context.active());
  currentSpan.addEvent("timestamp", { value: Date.now() });
  currentSpan.setAttribute("tagKey-01", "tagValue-01");
  res.json({ code: 200, msg: "success" });
});

app.use(express.json());

app.listen(7001, () => {
  console.log("Listening on http://localhost:7001");
});