Tüm Ürünler
Search
Belge Merkezi

Managed Service for OpenTelemetry:Submit trace data from a Node.js application

Son Güncelleme:Oct 06, 2026

Node.js hizmetleriniz tek bir işlemin ötesine geçtiğinde, hizmet sınırları arasındaki gecikme sürelerini ve hataları teşhis etmek için dağıtık izlemeden yararlanmanız gerekir. Managed Service for OpenTelemetry, uygulamanızdan izleme verilerini toplar; uygulama topolojisi, iz analizi, anormallik ve yavaş işlem algılama ile SQL analizi olanakları sunar. Bu kılavuz, Express tabanlı uygulamalar için iki enstrümantasyon yaklaşımını ele alır: otomatik (kod gerektirmeyen) ve manuel (SDK düzeyinde).

Önkoşullar

  • Node.js 14 veya üzeri bir sürüm

    Önemli

    Node.js sürümünüz 14'ten önceki bir sürümse, izleme verilerini raporlamak için bunun yerine Jaeger kullanın. Daha fazla bilgi için bkz. Node.js uygulama verilerini raporlama.

  • Managed Service for OpenTelemetry konsolundan alınan uç nokta ve kimlik doğrulama belirteci

Uç noktayı alma

  1. Managed Service for OpenTelemetry konsoluna giriş yapın.

  2. Sol gezinme bölmesinde Cluster Configurations seçeneğine tıklayın. Görüntülenen sayfada Access point information sekmesine tıklayın.

  3. Üst gezinme çubuğunda bir bölge seçin. Cluster Information bölümünde Show Token anahtarını açın.

  4. Client ayarını OpenTelemetry olarak yapılandırın.

  5. Related Information sütununda uç noktayı kopyalayın.

    Endpoint information

Uygulamanız bir Alibaba Cloud üretim ortamında çalışıyorsa Virtual Private Cloud (VPC) uç noktasını kullanın. Diğer tüm ortamlar için genel uç noktayı kullanın.

Örnek kod

Tam örnek projeyi opentelemetry-nodejs-demo adresinden indirin.

Otomatik enstrümantasyon (önerilen)

Otomatik enstrümantasyon, kod değişikliği yapmadan uygulamanıza izleme özelliği ekler. OpenTelemetry otomatik enstrümantasyon paketi, başlatma sırasında desteklenen çerçeveleri algılar ve span'leri otomatik olarak oluşturur.

Kullanım durumu: Çoğu kullanım senaryosu için buradan başlayın. Otomatik enstrümantasyon; Express, Fastify, Koa ve 30'dan fazla diğer çerçeveyi destekler. Yalnızca özel span işleyicilerine, gelişmiş örnekleme yöntemlerine veya SDK başlatması üzerinde ayrıntılı kontrole ihtiyaç duyduğunuzda manuel enstrümantasyona geçiş yapın.

Adım 1: Bağımlılıkları yükleme

cd auto-instrumentation
npm init -y
npm install express axios

Adım 2: OpenTelemetry paketlerini yükleme

npm install --save @opentelemetry/api @opentelemetry/auto-instrumentations-node

Adım 3: Uygulamayı oluşturma

Aşağıdaki örnek, iki rotaya sahip temel bir Express sunucusu oluşturur:

"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");
});

Adım 4: Ortam değişkenlerini ayarlama ve uygulamayı başlatma

Aşağıdaki ortam değişkenlerini ayarlayın ve ardından uygulamayı başlatın:

export OTEL_TRACES_EXPORTER="otlp"
export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT="<your-endpoint>"
export OTEL_NODE_RESOURCE_DETECTORS="env,host,os"
export OTEL_SERVICE_NAME="<your-service-name>"
export NODE_OPTIONS="--require @opentelemetry/auto-instrumentations-node/register"
node main.js

Aşağıdaki yer tutucuları gerçek değerlerinizle değiştirin:

Yer Tutucu Açıklama Örnek
<your-endpoint> Uç noktayı alma bölümünde alınan HTTP uç noktası https://tracing-analysis-dc-hz.aliyuncs.com/...
<your-service-name> Konsolda uygulamanızı tanımlayan bir ad my-express-app

Aşağıdaki tabloda her bir ortam değişkeni açıklanmıştır:

Değişken Açıklama
OTEL_TRACES_EXPORTER Dışa aktarma protokolü. OpenTelemetry Protokolü için otlp olarak ayarlayın.
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT İzleme verilerini alan HTTP uç noktası.
OTEL_NODE_RESOURCE_DETECTORS Başlatma sırasında çalıştırılacak kaynak dedektörleri. env,host,os ayarı; ortam, ana bilgisayar ve işletim sistemi meta verilerini toplar.
OTEL_SERVICE_NAME Managed Service for OpenTelemetry konsolunda görüntülenen hizmet adı.
NODE_OPTIONS Uygulama başlamadan önce otomatik enstrümantasyon modülünü yükler.
Kullanılabilir tüm OpenTelemetry ortam değişkenleriyle ilgili ayrıntılar için bkz. Otomatik Enstrümantasyon Yapılandırması .

Adım 5: İzleme verisi oluşturma

İzlemeler oluşturmak için bir istek gönderin:

curl localhost:7001/hello

İstek tamamlandıktan sonra SDK, izleme verilerini Managed Service for OpenTelemetry hizmetine dışa aktarır.

Manuel enstrümantasyon

Manuel enstrümantasyon; özel span işleyicileri, gelişmiş örnekleme ve uygulamaya özel yapılandırma dahil olmak üzere SDK başlatması üzerinde tam kontrol sağlar. Bu yaklaşım otomatik enstrümantasyonun yerine geçer; ikisini aynı anda kullanmayın.

Önemli

Manuel enstrümantasyon yolu dışa aktarma protokolü olarak gRPC kullanırken, otomatik yol HTTP kullanır. Güvenlik duvarı ilkeleriniz gRPC'yi desteklemiyorsa HTTP ile otomatik enstrümantasyon kullanın veya bunun yerine HTTP dışa aktarıcısını (@opentelemetry/exporter-trace-otlp-http) yapılandırın.

Adım 1: OpenTelemetry bağımlılıklarını ekleme

Aşağıdaki bağımlılıkları package.json dosyanıza ekleyin:

"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"
}

Adım 2: İzleyici sağlayıcısını oluşturma

Önemli

İzleyici sağlayıcısını diğer tüm uygulama içe aktarmalarından önce giriş dosyanızın en üstünde içe aktarın ve başlatın. OpenTelemetry, çerçeve kitaplıkları yüklenmeden önce bunlara yama uygulamalıdır. Yanlış başlatma sırası, eksik span'lerin en yaygın nedenidir.

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(),
    // Replace "opentelemetry-express" with your service name
    [SemanticResourceAttributes.SERVICE_NAME]: "opentelemetry-express",
  }),
});

Adım 3: Çerçeve enstrümantasyonlarını kaydetme

Gelen ve giden istekleri otomatik olarak izlemek için HTTP ve Express enstrümantasyonlarını kaydedin:

const { registerInstrumentations } = require("@opentelemetry/instrumentation");
const { HttpInstrumentation } = require("@opentelemetry/instrumentation-http");
const {
  ExpressInstrumentation,
} = require("@opentelemetry/instrumentation-express");

registerInstrumentations({
  tracerProvider: provider,
  instrumentations: [new HttpInstrumentation(), ExpressInstrumentation],
});
Diğer Node.js çerçevelerini enstrümante etmek için mevcut eklentiler açısından OpenTelemetry auto-instrumentations-node paketini inceleyin.

Adım 4: Dışa aktarıcıyı yapılandırma

İzleme verilerini Managed Service for OpenTelemetry hizmetine göndermek üzere gRPC üzerinden bir OTLP dışa aktarıcısı yapılandırın:

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

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

Aşağıdaki yer tutucuları gerçek değerlerinizle değiştirin:

Yer Tutucu Açıklama
<your-endpoint> Uç noktayı alma bölümünde alınan gRPC uç noktası
<your-token> Show Token anahtarını açtığınızda görüntülenen kimlik doğrulama belirteci

Adım 5 (isteğe bağlı): Özel olaylar ve nitelikler ekleme

Uygulamaya özel bağlam sağlamak için mevcut span'e olaylar ve nitelikler ekleyin:

const api = require("@opentelemetry/api");
const currentSpan = api.trace.getSpan(api.context.active());

// Add a timestamped event
currentSpan.addEvent("timestamp", { value: Date.now() });

// Add a custom attribute
currentSpan.setAttribute("tagKey-01", "tagValue-01");
OpenTelemetry izleme API'si hakkında daha fazla bilgi için bkz. OpenTelemetry JS başlangıç kılavuzu .

ARMS konsolunda izleme verilerini görüntüleme

  1. Managed Service for OpenTelemetry konsoluna giriş yapın.

  2. Sol gezinme bölmesinde Applications seçeneğine tıklayın.

  3. İzlemeleri, topolojiyi ve performans verilerini görüntülemek için uygulama adınıza tıklayın.

Sorun giderme

Uygulama konsolda görünmüyor

  • OTEL_EXPORTER_OTLP_TRACES_ENDPOINT (otomatik) veya OTLPTraceExporter içindeki url parametresinin (manuel) konsoldaki uç nokta ile eşleştiğini doğrulayın.

  • Uç noktaya ağ bağlantısını onaylayın. Uygulamanız Alibaba Cloud dışında çalışıyorsa VPC uç noktası yerine genel uç noktayı kullanın.

  • Uygulamanızın en az bir istek aldığını kontrol edin. OpenTelemetry, span'leri dışa aktarmadan önce arabelleğe alır.

  • Manuel enstrümantasyon için izleyici sağlayıcısının herhangi bir uygulama içe aktarmasından önce başlatıldığını onaylayın. Yanlış başlatma sırası eksik span'lere neden olur.

Hata ayıklama günlüğünü etkinleştirme

SDK davranışını incelemek için OpenTelemetry günlük düzeyini debug olarak ayarlayın:

export OTEL_LOG_LEVEL=debug

Uygulamayı yeniden başlatın ve span dışa aktarma günlüklerini ve hatalarını kontrol etmek için konsol çıktısını inceleyin. Başarılı bir dışa aktarma işlemi, şuna benzer günlük girdileri üretir:

@opentelemetry/api: Registered a global for diag v1.x.x
...
items to be sent [{"traceId":"...","spanId":"...","name":"GET /hello",...}]

Herhangi bir span girdisi görünmüyorsa uygulamanızın en az bir isteği işlediğini ve uç noktanın erişilebilir olduğunu doğrulayın.

Desteklenen Node.js çerçeveleri

OpenTelemetry, aşağıdaki çerçeveler için otomatik enstrümantasyon eklentileri sağlar. Tam liste için bkz. OpenTelemetry JS contrib deposu.

Tüm desteklenen çerçeveleri görüntüle

Çerçeve Enstrümantasyon paketi
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

Tam örnek kod

Aşağıdaki kod, tüm manuel enstrümantasyon adımlarını tek bir çalıştırılabilir Express uygulamasında birleştirir. Örnek, izleme verilerini Managed Service for OpenTelemetry hizmetine göndermek için gRPC tabanlı OTLPTraceExporter kullanır.

"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");

// 1. Create a tracer provider with service metadata
const provider = new NodeTracerProvider({
  resource: new Resource({
    [SemanticResourceAttributes.HOST_NAME]: require("os").hostname(),
    [SemanticResourceAttributes.SERVICE_NAME]: "opentelemetry-express",
  }),
});

// 2. Register HTTP and Express instrumentations
registerInstrumentations({
  tracerProvider: provider,
  instrumentations: [new HttpInstrumentation(), ExpressInstrumentation],
});

// 3. Configure the gRPC exporter with authentication
const metadata = new grpc.Metadata();
metadata.set("Authentication", "<your-token>");

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

// 4. Application code (must come after provider registration)
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");
});

<your-token> ve <your-endpoint> ifadelerini Uç noktayı alma bölümünde alınan belirteç ve gRPC uç noktasıyla değiştirin.