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

Application Real-Time Monitoring Service:Node.js アプリケーションのデータをレポートする

最終更新日:Mar 12, 2026

Node.js アプリケーションを実行する際には、パフォーマンスの問題を診断するために、リクエストのレイテンシ、エラー率、およびサービス間の依存関係を可視化する必要があります。OpenTelemetry 向けマネージドサービス (トレーシング分析) は、アプリケーションから収集した分散トレースを可視化し、マイクロサービス全体におけるボトルネックを特定するのに役立ちます。

このトピックでは、Jaeger クライアントライブラリを用いて Node.js アプリケーションをインストルメント化し、トレースデータをトレーシング分析にレポートする手順について説明します。

データレポートの仕組み

トレースデータは、以下のいずれかの経路を通じてトレーシング分析のバックエンドに到達します:

  • 直接レポート — アプリケーションが HTTP 経由でコレクターのエンドポイントにスパンを送信します。追加のインフラストラクチャは不要です。

    不通过Jaeger Agent而直接上报

  • エージェントベースのレポート — アプリケーションが UDP 経由でローカルの Jaeger エージェントにスパンを送信し、エージェントがコレクターに転送します。UDP トランスポートまたはローカルでのスパンバッファリングが必要な場合にこの経路を使用します。

    通过Jaeger Agent上报数据

以下に示す手順では、より一般的な「直接レポート」方式を採用します。「エージェントベースのレポート」については、「jaeger-client-node ドキュメント」をご参照ください。

前提条件

開始する前に、以下の条件を満たしていることを確認してください。

  • ご利用のマシンに Node.js がインストールされていること

  • プロジェクトに jaeger-client の依存関係が追加されていること:

      "dependencies": {
          "jaeger-client": "^3.12.0"
      }
  • Jaeger または Zipkin コレクターのエンドポイント(下記の「コレクターのエンドポイントを取得する」セクションを参照)

コレクターのエンドポイントを取得する

  1. OpenTelemetry 向けマネージドサービスコンソールにログインします。

  2. 左側のナビゲーションウィンドウで、クラスター設定 をクリックします。その後、アクセスポイント情報 タブをクリックします。

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

  4. クライアント セクションで、Jaeger または Zipkin をクリックします。

  5. 関連情報 列からエンドポイントをコピーします。

    Jaeger/Zipkin access point information

説明

ご利用のアプリケーションが Alibaba Cloud の本番環境で実行される場合は、仮想プライベートクラウド (VPC) エンドポイントを使用してください。それ以外の場合は、パブリックエンドポイントを使用します。Zipkin の場合、特別な理由がない限り v2 エンドポイントをご利用ください。

アプリケーションのインストルメント化

ステップ 1:トレーサーの初期化

サービス名、サンプリング戦略、およびコレクターのエンドポイントを指定して Jaeger クライアントを設定します。

説明

<endpoint> を、前のセクションで取得したエンドポイントに置き換えてください。このエンドポイントは、トレーシング分析コンソールの 概要 ページでもご確認いただけます。

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

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

ステップ 2:トレーサーインスタンスの作成

const tracer = initTracer(config);

ステップ 3:スパンの作成と完了

スパンは単一の作業単位を表します。スパンを開始し、任意でタグおよびログをアタッチした後、完了することでデータが送信されます。

const span = tracer.startSpan("say-hello");

// メタデータをキーと値のペアとしてタグとしてアタッチ(トレース詳細ビューに表示されます)
span.setTag("tagKey-01", "tagValue-01");

// タイムスタンプ付きのログエントリを記録(スパンのログタイムラインに表示されます)
span.log({event: "timestamp", value: Date.now()});

// スパンを完了してコレクターに送信します
span.finish();

ステップ 4:コンソールでのトレースの確認

トレーシング分析コンソールにログインし、トレースを確認します。

Express を使用した完全な例

この例では Express アプリケーションをインストルメント化します。すべての着信リクエストがスパンでラップされ、/api ルートに対してログエントリが記録されます。

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

<endpoint> をご利用のコレクターのエンドポイントに置き換え、アプリケーションを実行します:

node app.js

テストリクエストを送信します:

curl http://127.0.0.1:3000/api

期待される応答:

{"code":200,"msg":"success"}

プレースホルダー

コードを実行する前に、以下のプレースホルダーを実際の値に置き換えてください。

プレースホルダー説明
<endpoint>OpenTelemetry 向けマネージドサービスコンソールから取得した Jaeger コレクターのエンドポイントです。「コレクターのエンドポイントを取得する」セクションを参照してください。