アプリケーションのトレースデータを表示するには、クライアントを使用してアプリケーションデータを Managed Service for OpenTelemetry にレポートする必要があります。このトピックでは、SkyWalking の Rust エージェントを使用して Rust アプリケーションデータをレポートする方法について説明します。
前提条件
Protobuf がインストールされていること。
macOS
brew install protobufDebian ベースの OS
sudo apt install protobuf-compiler
背景情報
SkyWalking は、中国で開発された一般的なアプリケーションパフォーマンス監視(APM)サービスです。SkyWalking は、マイクロサービスアプリケーション、クラウドネイティブアプリケーション、および Docker、Kubernetes、Mesos のコンテナ化アプリケーション向けに設計されています。SkyWalking は分散トレーシングシステムでもあります。
skywalking-rust は、SkyWalking の公式 Rust エージェントリポジトリです。 skywalking-rust を使用して、Rust アプリケーションを監視できます。 skywalking-rust を使用して、Rust アプリケーションを手動でインストルメント化する必要があります。
サンプルコード
サンプルコードリポジトリの詳細については、GitHub の skywalking-demo を参照してください。
サンプルコードは、Rust の hyper フレームワークに基づいて単純な HTTP リクエストを実装し、skywalking-rust を使用してアプリケーションを手動でインストルメント化して、Managed Service for OpenTelemetry にデータをレポートします。
SkyWalking を使用して Rust アプリケーションを手動でインストルメント化する
Rust プロジェクトに SkyWalking 依存関係を追加します。
説明この例では、SkyWalking 0.8.0 を使用しています。
方法 1: Cargo.toml ファイルに依存関係を追加する
# [dependency] に依存関係を追加します。 skywalking = { version = "0.8.0", features = ["vendored"] }方法 2: ターミナルでコマンドを実行する
cargo add skywalking --features vendoredSkyWalking モジュールをソースコードにインポートします。
# インストルメント化するソースコードに SkyWalking モジュールをインポートします。 use skywalking::{reporter::grpc::GrpcReporter, trace::tracer::Tracer};アプリケーションを手動でインストルメント化します。
// EntrySpan、LocalSpan、および ExitSpan を使用して、手動でインストルメンテーションを追加します。 これらの 3 種類のスパンを使用して、エンドツーエンドのトレース分析を実装できます。 // EntrySpan: エントリスパン。 サーバーはエントリスパンを使用して、HTTP リクエストからトレース分析コンテキストを取得します。 // LocalSpan: ローカルスパン。 ローカルスパンを使用して、同じプロセス内のアプリケーションをインストルメント化できます。 // ExitSpan: 出力スパン。 クライアントは出力スパンを使用して、トレース分析コンテキストを HTTP リクエストに挿入します。 // 次のサンプルコードは、プロセス間のトレースにインストルメンテーションを追加する方法の例を示しています。 // client.rs: let mut ctx = tracer.create_trace_context(); { // 何かを実行... let span = ctx.create_exit_span("operation1", "remote_peer"); } // server.rs: let mut ctx = tracer.create_trace_context(); { let span = ctx.create_entry_span("operation1"); // 何かを実行... }エンドポイントとトークンを設定します。
エンドポイントと認証トークンを取得する方法の詳細については、前提条件 を参照してください。
// <endpoint> はコレクターのエンドポイントを指定します。 <token> はコレクターの認証トークンを指定します。 <service_name> はアプリケーションの名前を指定します。 let endpoint = "<endpoint>"; let token = "<token>"; let service_name = "<service_name>"; let instance_name = "<instance_name>"; let reporter = GrpcReporter::connect(endpoint).await?; let reporter = reporter.with_authentication(token); let tracer = Tracer::new(service_name, instance_name, reporter.clone());アプリケーションを再起動します。
FAQ
問題の説明: Rush プロジェクトをビルドすると、次の図に示すようにエラーメッセージが返されます。
原因: これは Protobuf が不足していることが原因である可能性があります。 Protobuf のインストール方法の詳細については、前提条件 を参照してください。
