トレースの中核的な価値は「接続」にあります。ユーザ端末、ゲートウェイ、バックエンドアプリケーション、および依存サービス(データベース、メッセージングシステム、大規模モデルなど)は、まとめてトレースのトポロジマップを形成します。このトポロジのカバレッジが広ければ広いほど、トレースが提供できる価値は大きくなります。エンドツーエンドトレースは、関連するすべてのITシステムをカバーするベストプラクティスであり、システムコールと状態全体にわたるユーザー行動の完全な記録を提供します。
ワークフロー
Application Real-Time Monitoring Service (ARMS) とManaged Service for OpenTelemetryは、ユーザ端末(ブラウザ、Android、iOSなど)、クラウドゲートウェイ(Application Load Balancer、Microservice Engine、NGINX Ingress Controller、Service Meshなど)、バックエンドアプリケーション(Java、Go、Python、.NETアプリケーションなど)、および依存サービス(データベース、メッセージキュー、大規模モデルなど)の間のエンドツーエンドトレースをサポートしています。次の図に示すように。
トレースインストルメンテーション:Java、Go、Python用の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 |
2024年にリリースされたJava v4.0用のARMSエージェントは、OpenTelemetryエコシステムを完全に採用しています。エージェント基盤はOpenTelemetryフレームワークに基づいて完全にアップグレードされており、さまざまなリソースの追加監視、パフォーマンス診断、およびアプリケーションセキュリティデータを提供します。より豊富なデータに加えて、Java v4.0用のARMSエージェントは、より柔軟なトレースサンプリングポリシー、ユーザーフレンドリーなエージェント管理、包括的な自己監視、動的な機能低下などの高度な機能をサポートしており、エンタープライズレベルの本番環境により適しています。
トレースの収集と処理:Alibaba Cloudと深く統合し、クラウドサービスのトレース設定を容易に実現
クラウドに移行する企業にとっての大きな課題は、クラウドサービスの可用性への強い依存です。エンドツーエンドトレースを使用すると、低速または失敗したリクエストノードを迅速に特定し、障害復旧を改善し、ビジネス損失を削減できます。
Managed Service for OpenTelemetryは、約10のAlibaba Cloudサービスと連携して、内部トレースとデータレポートを実装しています。企業ユーザーは、クラウドサービスコンソールでトレースオプションを有効にするだけでトレースを表示できるため、収集コストを大幅に削減できます。Application Load Balancer (ALB)、Microservice Engine (MSE)、およびARMS User Experience Monitoring (RUM)のトレース統合を以下に示します。
サービスの特性により、異なるクラウドサービスは異なるトレースインストルメンテーションスキームを使用します。トレースデータの収集は、一般的に次の2つのタイプに分けられます。
直接または転送されたトレースレポート:RUMで見られるように、内部トレース機器はExporterを介して直接レポートし、より詳細で柔軟なインストルメンテーションを提供します。
ログデータのトレースへの変換:ALBでは、バックエンドシステムがアクセスのログをトレースデータに変換し、侵入の少ないインストルメンテーションを提供します。
2つのスキームにはそれぞれ長所と短所があります。通常は、より標準化された直接または転送されたトレースレポートが推奨されます。ただし、パフォーマンス要件が高い場合、またはシステムでトレースを有効にするのが難しい場合は、TraceIdなどのトレースコンテキストがログに追加されている限り、ログをトレースに変換できます。
次の表に、サポートされているクラウドサービスとトレースプロトコル、および関連するリファレンスを示します。
カテゴリ | ソース | リファレンス | トレースプロトコル |
ユーザ端末 | Webアプリケーション、HTML5アプリケーション、ミニプログラム | W3C、B3、Jaeger、SkyWalking | |
AndroidおよびiOSアプリ | W3CとSkyWalking | ||
ゲートウェイ | MSE | W3C、B3、SkyWalking | |
NGINX Ingress Controller | W3C、B3、Jaeger | ||
ALB | B3 | ||
Service Mesh | B3 | ||
API Gateway | B3 | ||
バックエンドアプリケーション | ARMSエージェントによって監視されるJava、Go、Pythonアプリケーション | W3C、B3、Jaeger、SkyWalking、EagleEye | |
.NETやNode.jsなどの他の言語のアプリケーション
| W3C、B3、Jaeger、SkyWalking | ||
依存サービス | リモートプロシージャコール(RPC)、メッセージキュー、データベース、タスクスケジューリングなど、さまざまなタイプをカバーする100以上のコンポーネントが監視対象としてサポートされています。 |
トレースコンテキストの伝播:Alibaba Cloudエンドツーエンドトレースプロトコルを標準化し、ARMSエージェントによる複数のプロトコル変換をサポート
単一アプリケーションからのインストルメンテーションとデータ収集は、対応するトレースデータがコンソールに表示されたときに成功します。ただし、エンドツーエンドトレースでは、アップストリームとダウンストリームのトレースを統一されたプロトコルでリンクして継続性を確保する必要があり、技術的および調整上の課題が生じます。
Managed Service for OpenTelemetryは、OpenTelemetry W3Cプロトコルに基づいてエンドツーエンドのトレース接続をすでに実現しており、包括的で柔軟なトレースエコシステムのために、次の図に示すように、より多くのプロトコルとサービスを段階的にカバーしていきます。
新しいアプリケーションと比較して、既存のアプリケーションは、特にテクノロジスタックの移行時(たとえば、SkyWalkingからOpenTelemetryへの移行)に、エンドツーエンドプロトコルを統一する上でより大きな課題に直面します。既存の監視システムの継続的な運用を確保しながら、新しいシステムを検証し、2つの異なるトレースシステムの共存を可能にすることは、既存のアプリケーションをアップグレードまたは接続するための大きなハードルです。
これに対処するために、自己開発のARMSエージェントは広範な互換性最適化を経て、以下に示すように、移行が完了するまで両方のシステムが正しく安定して動作するようにデュアルエージェントの共存を実現しています。
ARMSエージェントは、マルチプロトコルの認識と送信をサポートしています。アップストリームシステムとダウンストリームシステムを簡単に変更できないシナリオでは、エージェントはプロトコルメディエータとして機能できます。たとえば、アップストリームアプリケーションAはJaegerプロトコルを使用し、ARMSエージェントはJaegerデータを受信して転送すると同時にJaegerとZipkin B3の両方の形式に変換し、ダウンストリームアプリケーションBはZipkin B3プロトコルを使用します。これにより、異なるプロトコルを使用するシステム間でシームレスなトレースデータ送信が保証され、トレースの継続性と接続性が確保されます。