Next.js の分散トレーシング

Mary-Kate Olsen
リリース: 2024-11-07 05:52:03
オリジナル
999 人が閲覧しました

Distributed Tracing in Next.js

最新のアプリケーションの分散化が進むにつれて、特にマイクロサービスやサーバーレス アーキテクチャの台頭により、これらのシステムの監視とデバッグはより複雑になっています。分散トレースは、開発者がさまざまなサービスを移動するリクエストを追跡するのに役立ち、パフォーマンスのボトルネック、エラー、遅延の問題を明確に把握できます。強力な React フレームワークである Next.js を使用する場合、分散トレーシングを実装すると、アプリの可観測性が向上し、より優れたパフォーマンス診断が可能になります。

この記事では、分散トレーシングの概念、それが Next.js にどのように適用されるか、そしてそれを実装するために実行できる手順について詳しく説明します。

分散トレーシングとは何ですか?

分散トレースは、特にリクエストが複数のサービスまたはコンポーネントにまたがる場合に、分散システムを通じてリクエストを追跡するために使用される方法です。従来のロギングやアプリケーション パフォーマンス モニタリング (APM) とは異なり、分散トレーシングは境界を越えてリクエストのフローをつなぎ合わせるため、遅延やエラーが発生した場所を簡単に特定できます。

分散トレーシングの主要な概念:

  • トレース: トレースは、分散システム内を移動するリクエストの過程を表します。複数のスパンで構成されています。
  • スパン: 各スパンは、API 呼び出し、データベース クエリ、コンポーネントのレンダリングなど、ジャーニー内の単一の操作を表します。スパンには、タグやイベントとともに、操作の開始時間と終了時間に関するメタデータが含まれます。
  • コンテキストの伝播: 分散トレースは、サービス境界を越えたトレース コンテキストの伝播に依存しており、システムのさまざまな部分が同じトレースに寄与できるようにします。

Next.js で分散トレーシングを使用する理由

Next.js はフルスタック フレームワークであり、外部サービスと対話できる API ルートとともに、サーバー側とクライアント側のレンダリングを組み合わせることができます。複数のコンポーネントとサービスを含む大規模なアプリケーションを構築する場合、パフォーマンスのボトルネックを特定し、システムの健全性を確保することが重要です。

分散トレースは Next.js 開発者に役立ちます:

  • API ルートのパフォーマンスを監視します: サーバー側ルートのパフォーマンスを理解し、遅いデータベース クエリや外部 API 呼び出しを特定し、ボトルネックを最適化します。
  • ユーザー エクスペリエンスの向上: サーバー側レンダリング (SSR)、静的サイト生成 (SSG)、クライアント側レンダリングのいずれを使用しても、さまざまな Next.js ページのレンダリングにかかる​​時間を監視します。
  • サービス間でのデバッグ エラー: Next.js アプリが複数のマイクロサービスまたはサードパーティ サービスと通信している場合、トレースはそれらのサービス間でのデータ フローを追跡するのに役立ち、エラーや遅延の問題の原因を特定するのに役立ちます。

Next.js で分散トレーシングを実装する方法

Next.js で分散トレースを実装するには、分散トレースを収集するための基盤を提供する OpenTelemetry などのオープンソース ライブラリや、より高度なトレース機能を提供する Datadog、New Relic などの独自のソリューションを利用できます。

ステップ 1: OpenTelemetry をセットアップする

OpenTelemetry は、トレース データを収集およびエクスポートするためのツールを提供するオープンソース標準です。幅広いベンダーやクラウド プラットフォームでサポートされています。

  1. OpenTelemetry パッケージをインストールします: まず、必要な OpenTelemetry パッケージをインストールします。 Node.js と HTTP フレームワークのコア パッケージと特定のパッケージが必要です。
   npm install @opentelemetry/api @opentelemetry/sdk-node @opentelemetry/instrumentation-http @opentelemetry/exporter-jaeger
ログイン後にコピー
ログイン後にコピー

このセットアップには以下が含まれます:

  • @opentelemetry/api: コア トレース API。
  • @opentelemetry/sdk-node: トレースをキャプチャする Node.js SDK。
  • @opentelemetry/instrumentation-http: HTTP 呼び出しのインストルメンテーション。
  • @opentelemetry/exporter-jaeger: オープンソースの分散トレーシング システムであるJaeger へのエクスポーターの例。
  1. トレース設定ファイルを作成します: Next.js プロジェクトで、tracing.js というファイルを作成して、OpenTelemetry を構成および初期化します。
   const { NodeTracerProvider } = require('@opentelemetry/sdk-node');
   const { SimpleSpanProcessor } = require('@opentelemetry/sdk-trace-base');
   const { JaegerExporter } = require('@opentelemetry/exporter-jaeger');
   const { HttpInstrumentation } = require('@opentelemetry/instrumentation-http');

   const provider = new NodeTracerProvider();

   // Configure exporter
   const exporter = new JaegerExporter({
     endpoint: 'http://localhost:14268/api/traces', // Jaeger endpoint
   });

   provider.addSpanProcessor(new SimpleSpanProcessor(exporter));

   // Register the provider globally
   provider.register();

   // Initialize HTTP instrumentation
   new HttpInstrumentation().setTracerProvider(provider);
ログイン後にコピー
ログイン後にコピー
  1. API ルートをインストルメント化します: OpenTelemetry の API を使用して、Next.js API ルートにスパンを手動で作成できます。
   import { trace } from '@opentelemetry/api';

   export default async function handler(req, res) {
     const tracer = trace.getTracer('default');
     const span = tracer.startSpan('api-route-handler');

     try {
       // Simulate some async work
       await new Promise((resolve) => setTimeout(resolve, 100));
       res.status(200).json({ message: 'Hello from the API' });
     } catch (error) {
       span.recordException(error);
       res.status(500).json({ error: 'Internal Server Error' });
     } finally {
       span.end();
     }
   }
ログイン後にコピー

これにより、API ルートの実行を追跡するスパンが作成されます。エラーがある場合、スパンはその例外をキャプチャします。

  1. クライアント側トレースをキャプチャする (オプション): クライアント側のトレース (ページのレンダリングまたはデータのロードにかかる時間を測定するなど) の場合、ブラウザーで同様の OpenTelemetry 構成をセットアップできます。また、トレース データをバックエンドに送信するようにエクスポーターを構成することもできます。

ステップ 2: トレース ベンダーを使用する

あるいは、Datadog、New Relic、AWS X-Ray などのサードパーティ ツールを使用することもできます。これらのツールは、より包括的なトレース機能を提供し、他のパフォーマンス監視ツールと統合します。

たとえば、Datadog を Next.js アプリケーションに統合するには:

  1. Datadog パッケージをインストールします:
   npm install @opentelemetry/api @opentelemetry/sdk-node @opentelemetry/instrumentation-http @opentelemetry/exporter-jaeger
ログイン後にコピー
ログイン後にコピー
  1. トレースを初期化します: dd-tracing.js ファイルを作成し、アプリケーションの Datadog トレースを構成します。
   const { NodeTracerProvider } = require('@opentelemetry/sdk-node');
   const { SimpleSpanProcessor } = require('@opentelemetry/sdk-trace-base');
   const { JaegerExporter } = require('@opentelemetry/exporter-jaeger');
   const { HttpInstrumentation } = require('@opentelemetry/instrumentation-http');

   const provider = new NodeTracerProvider();

   // Configure exporter
   const exporter = new JaegerExporter({
     endpoint: 'http://localhost:14268/api/traces', // Jaeger endpoint
   });

   provider.addSpanProcessor(new SimpleSpanProcessor(exporter));

   // Register the provider globally
   provider.register();

   // Initialize HTTP instrumentation
   new HttpInstrumentation().setTracerProvider(provider);
ログイン後にコピー
ログイン後にコピー
  1. 監視と分析: Datadog にトレースを送信した後、ダッシュボードを使用してリクエスト パスを視覚化し、ボトルネックを特定し、システムを監視します。

ステップ 3: トレースを分析する

トレース システムがセットアップされたら、Jaeger、Datadog、または任意のトレース バックエンドなどのツールを使用してトレースを表示および分析できます。これらのツールは各トレースのウォーターフォール ビューを表示し、アプリケーション内でリクエストがどのように流れ、どこでパフォーマンスの問題が発生するかを理解するのに役立ちます。

結論

分散トレースは、最新のアプリケーション、特にクライアント側とサーバー側の両方のロジックを処理する Next.js のようなフレームワークで構築されたアプリケーションに不可欠な可視性を提供します。分散トレースを実装すると、アプリのパフォーマンスについて深い洞察が得られ、ボトルネックを効率的に診断して修正できるようになります。 OpenTelemetry などのオープンソース ソリューションを選択する場合でも、Datadog などの商用ツールを選択する場合でも、分散トレーシングは Next.js アプリケーションが最適化され、信頼性が高く、スケーラブルであることを確認するのに役立ちます。

以上がNext.js の分散トレーシングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート