すべてのプロダクト
Search
ドキュメントセンター

Managed Service for OpenTelemetry:Node.js アプリケーションデータのレポート

最終更新日:Dec 30, 2024

このトピックでは、Node.js アプリケーションのデータを Tracing Analysis にレポートする方法について説明します。

前提条件

Jaeger 依存関係が Node.js プロジェクトのパッケージに追加されています。

"dependencies": {
    "jaeger-client": "^3.12.0"
  }

Jaeger または Zipkin のエンドポイントを取得するには、次の手順を実行します。

  1. Managed Service for OpenTelemetry コンソールにログインします。

  2. 左側のナビゲーションペインで、クラスタ設定をクリックします。表示されるページで、アクセスポイント情報タブをクリックします。

  3. 上部のナビゲーションバーで、リージョンを選択します。クラスタ情報セクションで、トークンの表示をオンにします。

  4. クライアントパラメータを Jaeger または Zipkin に設定します。この例では、Jaeger が選択されています。

    下部の表の関連情報列で、Jaeger または Zipkin のエンドポイントを取得します。

    Jaeger/Zipkin接入点信息

    説明

    アプリケーションが Alibaba Cloud 本番環境にデプロイされている場合は、VPC エンドポイントを使用します。それ以外の場合は、パブリックエンドポイントを使用します。一般的に、Zipkin には v2 のエンドポイントを使用します。Zipkin をよく理解している場合にのみ、v1 のエンドポイントを使用します。

背景情報

データはどのようにレポートされますか?

  • 次の図は、Jaeger エージェントを使用せずにデータをレポートする方法を示しています。

  • 次の図は、Jaeger エージェントを使用してデータをレポートする方法を示しています。

手順

  1. 初期化のためのパラメータを設定します。

    説明

    <endpoint>は、クライアントが存在するリージョンのエンドポイントに置き換えます。Managed Service for OpenTelemetry コンソールにログインし、アクセスポイント情報クラスタ設定ページのタブでエンドポイントを確認できます。エンドポイントの取得方法の詳細については、このトピックの「前提条件」セクションを参照してください。

    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. スパンを作成します。

    const span = tracer.startSpan("say-hello");
    
    // オプション。1 つ以上のタグを設定します。
    span.setTag("tagKey-01", "tagValue-01");
    
    // オプション。1 つ以上のログを設定します。
    span.log({event: "timestamp", value: Date.now()});
    
    // スパンを終了します。
    span.finish();
  4. Tracing Analysis コンソールにログインして、トレースを表示します。

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