トレーシング分析の価値は、接続性から生まれます。トレースは、ユーザーのクライアント、ゲートウェイ、バックエンドアプリケーション、およびデータベース、メッセージキュー、大規模言語モデルなどの依存コンポーネントをリンクするトポロジーグラフを形成します。カバレッジが広ければ広いほど、トレーシングの価値は高まります。エンドツーエンドトレーシングは、関連するすべての IT システムを網羅し、これらのシステム全体にわたるユーザーリクエストの完全な呼び出しパスと状態を記録します。
Alibaba Cloud のエンドツーエンドトレーシングソリューション
次の図に示すように、Managed Service for OpenTelemetry を含む Alibaba Cloud ARMS は、ユーザー クライアント (Web、Android、iOS など)、クラウド ゲートウェイ (ALB、MSE、Ingress、ASM など)、バックエンド アプリケーション (Java、Go、Python、.NET など)、およびクラウド コンポーネント (データベース、メッセージ キュー、大規模言語モデルなど) にわたるエンドツーエンドのトレースをサポートします。

トレースインストルメンテーション:主流言語向けの ARMS エージェントと多言語対応のためのオープンソース
Java、Go、Python などの主流の言語では、ARMS 独自のエージェントを使用することで、より高いトレース品質、優れたパフォーマンス、強力な安定性、向上したユーザビリティを実現できます。より多くの言語をサポートするために、Managed Service for OpenTelemetryは、OpenTelemetry、SkyWalking、Zipkin、Jaeger という 4 つの主要なトレースフレームワークと完全に互換性があります。また、このサービスは、次の表に示すように、10 以上の言語のトレース計装とデータレポートもサポートしています。
ARMS と Managed Service for OpenTelemetry のデータは、完全に相互運用可能です。マルチ言語シナリオでそれらを組み合わせて使用できます。
|
プログラミング言語 |
ARMS アプリケーションモニタリング (独自エージェント、SLA 保証) |
Managed Service for OpenTelemetry (オープンソースクライアント、自己管理) |
推奨される接続タイプ |
|
Java |
自動インストルメンテーション |
自動インストルメンテーション |
ARMS |
|
Go |
自動インストルメンテーション |
自動インストルメンテーション |
ARMS |
|
Python |
自動インストルメンテーション |
自動インストルメンテーション |
ARMS |
|
Node.js |
サポートされていません |
自動インストルメンテーション |
OpenTelemetry |
|
.NET |
サポートされていません |
自動インストルメンテーション |
OpenTelemetry |
|
PHP |
サポートされていません |
自動インストルメンテーション |
OpenTelemetry |
|
Erlang |
サポートされていません |
自動インストルメンテーション |
OpenTelemetry |
|
C++ |
サポートされていません |
手動インストルメンテーション |
OpenTelemetry |
|
Swift |
サポートされていません |
手動インストルメンテーション |
OpenTelemetry |
|
Ruby |
サポートされていません |
手動インストルメンテーション |
OpenTelemetry |
|
Rust |
サポートされていません |
手動インストルメンテーション |
SkyWalking |
ARMS は 2024 年に JavaAgent 4.0 をリリースし、OpenTelemetry エコシステムを全面的に採用しました。エージェントのコアは OpenTelemetry フレームワーク上に構築されており、リソースモニタリング、パフォーマンス診断、アプリケーションセキュリティのための追加データを提供します。豊富なデータに加えて、ARMS JavaAgent 4.0 は、柔軟なトレースサンプリングポリシー、GUI ベースのエージェント管理、包括的な自己監視、動的な機能の縮退などの高度な機能をサポートしており、エンタープライズの本番環境に最適です。
トレース収集と処理:Alibaba Cloud エコシステムとの緊密な統合によるワンクリックでのトレースアクセス
クラウド移行時によくある課題は、複雑な依存関係全体でサービスの可用性を維持することです。エンドツーエンドトレーシングは、低速または不正なリクエストの原因となるノードを迅速に特定し、障害回復速度を向上させ、ビジネスへの影響を軽減することで、この課題に対処します。
Managed Service for OpenTelemetryは、10 近くの Alibaba Cloud 製品と密接に連携しており、内部トレースの計装とデータレポートが可能です。サポートされているクラウド製品のコンソールでトレーススイッチを有効にすると、対応するトレースデータを表示でき、データ収集が大幅に簡素化されます。次の図は、ALB Gateway、MSE Gateway、および ARMS Real User Monitoring のトレースを有効にする方法を示しています。

製品の機能が異なるため、トレースインストルメンテーションの方法も異なります。データ収集方法は、主に次の 2 つのカテゴリに分類されます:
-
直接または転送によるトレース報告:たとえば、リアルユーザーモニタリングは、内部インストルメンテーションを使用し、Exporter を介してデータを直接報告します。これにより、より詳細で柔軟なインストルメンテーションが可能になります。
-
ログからトレースへの変換:たとえば、ALB ゲートウェイはバックエンドでアクセスログを消費し、それをトレースデータに変換します。この方法は、より非侵入的です。
どちらの方法にもトレードオフがあります。一般的には、直接または転送によるトレース報告がより標準的なアプローチとして推奨されます。ただし、高性能なシナリオや、レガシーシステムの変更が困難な場合には、ログからトレースへの変換が代替案となります。これには、TraceId などのトレースコンテキストをログに追加する必要があります。
次の表は、現在トレーシングをサポートしているクラウド製品、プロトコル、および接続ガイドの一覧です。
|
接続カテゴリ |
クライアント |
接続ガイド |
サポートされているプロトコル |
|
ユーザークライアント |
Web/H5/ミニプログラム |
w3c、b3、jaeger、skywalking |
|
|
Android/iOS |
w3c、skywalking |
||
|
ゲートウェイ |
MSE |
w3c、b3、skywalking |
|
|
ACK Ingress |
w3c、b3、jaeger |
||
|
ALB |
b3 |
||
|
ASM |
b3 |
||
|
API Gateway |
b3 |
||
|
バックエンドアプリケーション |
Java/Go/Python (独自) |
w3c、b3、jaeger、 skywalking、eagle eye |
|
|
.NET、Node.js、およびその他の 言語 (オープンソース) |
w3c、b3、jaeger、 skywalking |
||
|
依存コンポーネント |
RPC、メッセージキュー、データベース、タスクスケジューリングなど、さまざまなタイプに対応する 100 以上のプラグインをサポートします。 |
||
トレースコンテキストのパススルー:プロトコルの統一と ARMS エージェントによるマルチプロトコル変換
単一のアプリケーションコンポーネントの場合、インストルメンテーションが成功すると、コンソールでそのトレースデータを収集・表示できます。しかし、真のエンドツーエンドトレーシングには、上流と下流のトレースを統一されたプロトコルで接続し、途切れることのないチェーンを確保する必要があります。これには、技術面と調整面の両方で課題が伴います。
Alibaba Cloud Observability は、OpenTelemetry W3C プロトコルに基づいたエンドツーエンドトレーシングを提供し、より多くのプロトコルとコンポーネントのサポートを段階的に拡大して、より完全で柔軟なトレーシングエコシステムを構築していきます。次の図は、完全なエンドツーエンドの呼び出しチェーンを示しています。

既存のアプリケーションのエンドツーエンドのプロトコルスタックを統一することは、新規のアプリケーションよりも困難です。特に、SkyWalking から OpenTelemetry への移行など、技術スタックを切り替える場合はなおさらです。新しいシステムを検証しながら、既存の O&M システムを稼働させ続ける必要があり、最大の課題は、2 つの異なるトレーシングシステムがトレースの継続性を損なうことなく共存できるようにすることです。
この課題に対処するため、ARMS の独自エージェントには互換性の最適化が含まれており、デュアルエージェントの共存が可能です。これにより、移行が完了するまで両方のシステムが正しく安定して実行されることが保証されます。次の図は、このシナリオを示しています。

ARMS の独自エージェントは、マルチプロトコルの検出とパススルーをサポートしています。上流と下流のシステムの変更が困難な場合、ARMS エージェントを使用してプロトコル変換を行うことができます。たとえば、上流のアプリケーション A が Jaeger プロトコルを使用している場合、ARMS エージェントは Jaeger コンテキストを受け取り、Jaeger と Zipkin B3 の両方のコンテキストを下流にパススルーします。これにより、下流のアプリケーション B は Zipkin B3 プロトコルを使用でき、TraceId のパススルーを実現してトレースを完全に接続できます。