Application Load Balancer (ALB) はトレーシングをサポートしています。この機能を有効にすると、ALB はリクエストを転送する際に自動的にトレースヘッダーを挿入します。これにより、リクエストのソース、経由したノード、応答時間など、完全なリクエストトレースデータを取得できます。これにより、分散アーキテクチャにおけるパフォーマンスボトルネックを迅速に特定し、解決することができます。
背景情報
トレーシング分析は、分散アプリケーションの開発者に対し、完全なコールチェーンの再構築、リクエスト量の統計、トポロジーの可視化、アプリケーション依存関係分析などのツールを提供します。これらのツールは、分散アプリケーションアーキテクチャにおけるパフォーマンスボトルネックを迅速に分析し、診断するのに役立ちます。
トレースレコードは、コールチェーン (トレース) に対応します。広義には、コールチェーンは分散システムを通過するトランザクションまたはワークフローの実行パスを表します。これは複数のスパンで構成される有向非巡回グラフ (DAG) であり、各スパンはコールチェーン内での名前付きで時間計測された連続実行セグメントを表します。
ALB トレーシングを有効にすると、ALB はリクエストを転送する際に HTTP トレースヘッダーを自動的に挿入または更新し、トレースデータを Alibaba Cloud Managed Service for OpenTelemetry にレポートします。ALB トレーシングは、OpenTelemetry と Zipkin の両方のトレーシング方式をサポートしています。
トレーシング方式
OpenTelemetry
ALB トレーシングが有効で、タイプとして OpenTelemetry が選択されている場合、ALB はバックエンドサーバーにリクエストを転送する前に、HTTP ヘッダーの traceparent フィールドを追加または更新します。traceparent フィールドのフォーマットは {version}-{traceid}-{parentid}-{traceflags} です。次の表に各部分の説明を示します。
フィールド | 説明 | フォーマット |
| 使用される OpenTelemetry のバージョン。 | 常に |
| このトレースを識別する ID。 | 32 桁の 16 進数。 |
| トレースチェーン上の現在のノードを識別する ID。 | 16 桁の 16 進数。 |
| このリクエストがサンプリングされるかどうかを示します。 |
|
シナリオ 1:リクエストに traceparent が含まれていない場合
クライアントから送信されたリクエストヘッダーに traceparent フィールドが含まれていない場合、ALB は完全な traceparent フィールドを生成し、HTTP ヘッダーに挿入します。
シナリオ 2:リクエストに traceparent がすでに含まれている場合
アップストリームサービスがリクエストヘッダーにすでに traceparent フィールドを含んでいる場合、ALB は version、traceid、traceflags を継承し、新しい parentid のみを生成します。
次の表はフィールド値を比較したものです:
部分 | アップストリームリクエストの値 | ALB が転送した値 | 処理 |
|
|
| 継承 |
|
|
| 継承 |
|
|
| 新規生成 |
|
|
| 継承 |
Zipkin
ALB トレーシングが有効で、タイプとして Zipkin が選択されている場合、ALB はバックエンドサーバーにリクエストを転送する前に、HTTP ヘッダーの X-B3-* フィールドを追加または更新します。次の表に各フィールドの説明を示します。
フィールド | 説明 | フォーマット |
| このトレースを識別する ID。 | 16 桁の 16 進数。 |
| トレースチェーン上の現在のノードを識別する ID。 | 16 桁の 16 進数。 |
| トレースチェーン上の前のノードを識別する ID。 | 16 桁の 16 進数。 |
| このリクエストがサンプリングされるかどうかを示します。 |
|
シナリオ 1:リクエストにトレースヘッダーが含まれていない場合
クライアントから送信されたリクエストヘッダーに X-B3-* フィールドが含まれていない場合、ALB はトレースチェーンのオリジンノードとして機能し、X-B3-TraceId、X-B3-SpanId、X-B3-Sampled フィールドを生成して HTTP ヘッダーに挿入します。チェーン上にアップストリームノードがないため、転送されるリクエストには X-B3-ParentSpanId フィールドは含まれません。
シナリオ 2:リクエストにトレースヘッダーがすでに含まれている場合
アップストリームサービスがリクエストヘッダーに完全な X-B3-* フィールドをすでに含んでいる場合、ALB は X-B3-TraceId と X-B3-Sampled の値を継承し、新しい X-B3-SpanId を生成し、アップストリームリクエストの X-B3-SpanId を X-B3-ParentSpanId としてバックエンドサーバーに渡します。
次の表はフィールド値を比較したものです:
フィールド | アップストリームリクエストの値 | ALB が転送した値 | 処理 |
|
|
| 継承 |
|
|
| 新規生成 |
|
|
| アップストリームの SpanId を使用 |
|
|
| 継承 |
適用範囲
Standard Edition と WAF Enhanced Edition の ALB インスタンスのみがトレーシングをサポートしています。Basic Edition の ALB インスタンスはこの機能をサポートしていません。
ALB インスタンスを作成し、サーバーグループを作成済みであること。
インスタンスのリスナーを設定し、サーバーグループに関連付けていること。
バックエンドサーバーとして ECS インスタンスを作成し、ECS インスタンスに Nginx サービスをデプロイし、ECS インスタンスをサーバーグループに追加済みであること。
ステップ 1:トレーシングの有効化
ALB コンソールにログインし、インスタンスが配置されているリージョンを選択し、ターゲットインスタンスを見つけて、そのインスタンス ID をクリックします。
リスナー タブをクリックし、ターゲットリスナーを見つけて、そのリスナー ID をクリックします。
リスナーの詳細 タブの Managed Service for OpenTelemetry セクションで、Managed Service for OpenTelemetry スイッチをオンにします。
Managed Service for OpenTelemetry を有効にする ダイアログボックスで、次の設定を行い、保存 をクリックします。
サービスの有効化
Managed Service for OpenTelemetry を有効化する:初めてサービスを使用する場合は、サービス契約を選択して有効化を確認します。
アクセスログの作成 (ターゲットの ALB インスタンスでまだ作成されていない場合)
プロジェクト:Simple Log Service のリソース管理ユニットで、リソースの分離と制御に使用されます。
-
既存の Project の選択:ドロップダウンリストから既存のプロジェクトを選択します。
-
Project の新規作成:フィールドにプロジェクト名を入力します。
-
Logstore: Simple Log Service における、ログデータの収集、ストレージ、およびクエリのためのユニットです。
-
既存の Logstore の選択:ドロップダウンリストから既存の Logstore を選択します。
-
Logstore の新規作成:フィールドに Logstore 名を入力します。[プロジェクトの作成] を選択した場合は、[Logstore の作成] も選択する必要があります。
-
Managed Service for OpenTelemetry の設定
Managed Service for OpenTelemetry のタイプ:OpenTelemetry(W3C) または Zipkin(B3) を選択できます。
サンプリングレート:有効値は 1~100 です。デフォルト値:100。サンプルレートを調整して、レポートされるトレースデータの量を制御します。
サービスにリンクされたロールの作成に関する注意事項:この操作を実行すると、システムは自動的にサービスリンクロールを作成します。
ステップ 2:トレースデータの表示
クライアント端末にログインし、バックエンドサーバーとの接続性をテストします。詳細については、「ALB を使用した IPv4 負荷分散の迅速な実装」をご参照ください。
ALB コンソールにログインし、インスタンスが配置されているリージョンを選択し、ターゲットインスタンスを見つけて、そのインスタンス ID をクリックします。
リスナー タブをクリックし、ターゲットリスナーを見つけて、そのリスナー ID をクリックします。
リスナーの詳細 タブの Managed Service for OpenTelemetry セクションで、呼び出しチェーン分析 の横にある 表示 をクリックし、Managed Service for OpenTelemetry コンソールに移動してトレースデータを表示します。
ページ上部のクエリバーには、
attributes.app_lb_idとattributes.slb_vportフィルターが自動的に含まれます。左側のクイックフィルターパネルでは、ステータス、持続時間の範囲、アプリケーション名でフィルタリングできます。
詳細情報
トレーシングの無効化
トレーシングはアクセスログに依存します。アクセスログを無効にするとトレーシングが利用できなくなるため、慎重に操作してください。トレーシングを無効にしても、アクセスログは有効のままです。不要になった場合は、手動で無効にしてください。
ALB インスタンス配下のすべてのリスナーでトレーシングが無効になると、ALB は Managed Service for OpenTelemetry へのトレースデータの送信を停止します。
課金
トレーシングを使用すると、Alibaba Cloud は自動的に Managed Service for OpenTelemetry とアクセスログサービスを有効にします。有効化後、データレポート、トレースストレージ、ログサービスに対して料金が発生します。
ALB トレーシングがサポートされているリージョン
パブリッククラウドリージョン
エリア | リージョン |
中国 | 中国 (杭州)、中国 (上海)、中国 (深セン)、中国 (成都)、中国 (青島)、中国 (北京)、中国 (張家口)、中国 (ウランチャブ)、中国 (香港)、中国 (広州)、中国 (河源) |
アジアパシフィック | シンガポール、マレーシア (クアラルンプール)、日本 (東京)、インドネシア (ジャカルタ) |
ヨーロッパおよびアメリカ | イギリス (ロンドン)、ドイツ (フランクフルト)、米国 (バージニア)、米国 (シリコンバレー) |