全部產品
Search
文件中心

Managed Service for OpenTelemetry:通過Jaeger上報Node.js應用資料

更新時間:Aug 08, 2024

通過Jaeger為應用埋點並上報鏈路資料至Managed Service for OpenTelemetry後,Managed Service for OpenTelemetry即可開始監控應用,您可以查看應用拓撲、調用鏈路、異常事務、慢事務和SQL分析等一系列監控資料。本文介紹如何使用Jaeger用戶端埋點並上報Node.js應用資料。

重要

為獲得更豐富的功能、更先進的鏈路追蹤能力,以及最佳使用體驗,建議您使用OpenTelemetry協議將應用接入Managed Service for OpenTelemetry

我們為您提供了詳細的OpenTelemetry接入指南和最佳實務,協助您快速上手Managed Service for OpenTelemetry。更多資訊,請參見接入應用

前提條件

  • 在Node工程的Package中配置對Jaeger Client的依賴。

    "dependencies": {
        "jaeger-client": "^3.12.0"
      }
  • 擷取存取點資訊

    新版控制台

    1. 登入可觀測鏈路 OpenTelemetry 版控制台,在左側導覽列單擊接入中心

    2. 開源架構地區單擊Jaeger卡片。

    3. 在彈出的Jaeger面板中選擇資料需要上報的地區。

      說明

      初次接入的地區將會自動進行資源初始化。

    4. 選擇串連方式上報方式,然後複製存取點資訊。

      • 串連方式:若您的服務部署在阿里雲上,且所屬地區與選擇的接入地區一致,推薦使用阿里雲內網方式,否則選擇公網方式。

      • 上報方式:根據用戶端支援的協議類型選擇HTTP或gRPC協議上報資料。

      image

    舊版控制台

    1. 登入可觀測鏈路 OpenTelemetry 版控制台

    2. 在左側導覽列單擊叢集配置,然後在右側頁面單擊存取點資訊頁簽。

    3. 在頁面頂部選擇需要接入的地區,然後在叢集資訊地區開啟顯示Token開關。

    4. 用戶端採集工具地區單擊Jaeger

      相關資訊列中,擷取存取點資訊。jager中國.jpg

      說明

      如果應用部署於阿里雲生產環境,則選擇阿里雲VPC網路存取點,否則選擇公網存取點。

背景資訊

資料是如何上報的?

  • 不通過Jaeger Agent而直接上報資料的原理如下圖所示。

  • 通過Jaeger Agent上報資料的原理如下圖所示。

操作步驟

  1. 初始化配置。

    說明

    請將<endpoint>替換成前提條件中擷取的存取點資訊。

    const initTracer = require("jaeger-client").initTracer;
    
    const config = {
        serviceName: 'node-service',
        sampler: {
            type: "const",
            param: 1
        },
        reporter: {
            collectorEndpoint: "<endpoint>"
        },
    };
  2. 建立Tracer執行個體對象。

    const tracer = initTracer(config);
  3. 建立Span執行個體對象。

    const span = tracer.startSpan("say-hello");
    
    // 設定標籤(可選,支援多個)
    span.setTag("tagKey-01", "tagValue-01");
    
    // 設定事件(可選,支援多個)
    span.log({event: "timestamp", value: Date.now()});
    
    // 標記Span結束
    span.finish();
  4. 登入Managed Service for OpenTelemetry控制台並查看調用鏈。

基於Express的完整樣本

const express = require("express");
const initTracer = require("jaeger-client").initTracer;
const app = express();

const config = {
    serviceName: 'node-service',
    sampler: {
        type: "const",
        param: 1
    },
    reporter: {
        collectorEndpoint: "<endpoint>"
    },
};
const tracer = initTracer(config);

app.all('*', function (req, res, next) {
    req.span = tracer.startSpan("say-hello");
    next();
});

app.get("/api", function (req, res) {
    const span = req.span;
    span.log({event: "timestamp", value: Date.now()});
    req.span.finish();
    res.send({code: 200, msg: "success"});
});

app.listen(3000, '127.0.0.1', function () {
    console.log('start');
});