skywalking-rust SDK を使用して Rust アプリケーションを手動でイベントトラッキングし、トレースデータを OpenTelemetry 向けマネージドサービスにレポートします。分散トレースをキャプチャするには、skywalking-rust を使用して手動でコードにスパンを追加する必要があります。
仕組み
skywalking-rust SDK は、中国で開発された人気のアプリケーションパフォーマンス監視 (APM) サービスである Apache SkyWalking の公式 Rust エージェントです。SkyWalking は、Docker、Kubernetes、Mesos におけるマイクロサービス、クラウドネイティブ、コンテナ化アプリケーション向けに設計されており、分散トレーシングシステムでもあります。この SDK は、gRPC プロトコルを介して OpenTelemetry 向けマネージドサービスに接続し、アプリケーションからトレースデータをレポートします。
前提条件
開始する前に、以下が準備できていることを確認してください:
Rust ツールチェーン (rustc および Cargo)
Protobuf コンパイラ:
macOS
brew install protobufDebian/Ubuntu
sudo apt install protobuf-compilerOpenTelemetry 向けマネージドサービスから取得した SkyWalking エンドポイントと認証トークン (「SkyWalking エンドポイントの取得」をご参照ください)
SkyWalking エンドポイントの取得
OpenTelemetry 向けマネージドサービスコンソールにログインします。
左側のナビゲーションウィンドウで、[クラスター設定] をクリックします。次に、[アクセスポイント情報] タブをクリックします。
上部のナビゲーションバーでリージョンを選択します。[クラスター情報] セクションで、[トークンの表示] をオンにします。
[クライアント] セクションで、[SkyWalking] をクリックします。
[関連情報] 列からエンドポイントをコピーします。

アプリケーションが Alibaba Cloud の本番環境で実行されている場合は、VPC エンドポイントを使用してください。それ以外の場合は、パブリックエンドポイントを使用してください。
Rust アプリケーションをインストルメントする
以下の手順では、skywalking-rust 0.8.0 を使用します。
ステップ 1: SkyWalking の依存関係の追加
ご利用の Cargo.toml に依存関係を追加します:
[dependencies]
skywalking = { version = "0.8.0", features = ["vendored"] }または、次のコマンドを実行します:
cargo add skywalking --features vendoredステップ 2: SkyWalking モジュールのインポート
イベントトラッキング対象のソースファイルに、次のインポート文を追加します:
use skywalking::{reporter::grpc::GrpcReporter, trace::tracer::Tracer};ステップ 3: gRPC レポーターの設定
レポーターを SkyWalking エンドポイントに接続し、トークンを使用して認証します。プレースホルダーを実際の値に置き換えてください。
// これらのプレースホルダーを実際の値に置き換えます。
let endpoint = "<your-skywalking-endpoint>";
let token = "<your-authentication-token>";
let service_name = "<your-service-name>";
let instance_name = "<your-instance-name>";
let reporter = GrpcReporter::connect(endpoint).await?;
let reporter = reporter.with_authentication(token);
let tracer = Tracer::new(service_name, instance_name, reporter.clone());ステップ 4: スパンの作成
SkyWalking は、エンドツーエンドの分散トレーシングのために 3 種類のスパンタイプを使用します:
| スパンタイプ | 目的 | 使用場面 |
|---|---|---|
エントリー スパン (EntrySpan) | 受信リクエストをキャプチャする | サーバーサイドで、インバウンドリクエストからトレースコンテキストを抽出する場合 |
ローカル スパン (LocalSpan) | プロセス内の操作をキャプチャする | 単一プロセス内のロジックをトレースする場合 |
エグジット スパン (ExitSpan) | 送信リクエストをキャプチャする | クライアントサイドで、アウトバウンドリクエストにトレースコンテキストを挿入する場合 |
クライアントサイドのコード (コンテキストを伝播するためのエグジットスパンを作成):
let mut ctx = tracer.create_trace_context();
{
// アウトバウンド呼び出しを行う前にエグジットスパンを作成します。
let span = ctx.create_exit_span("operation1", "remote_peer");
// ... リクエストを送信 ...
}サーバーサイドのコード (コンテキストを受け取るためのエントリースパンを作成):
let mut ctx = tracer.create_trace_context();
{
// 受信リクエストを処理する際にエントリースパンを作成します。
let span = ctx.create_entry_span("operation1");
// ... リクエストを処理 ...
}ステップ 5: アプリケーションの再ビルドと再起動
イベントトラッキングを追加した後、アプリケーションを再ビルドして再起動します:
cargo build --releaseアプリケーションがリクエストを処理すると、トレースデータが OpenTelemetry 向けマネージドサービスに送信され始めます。
サンプルコード
hyper フレームワークを使用して SkyWalking のイベントトラッキングを備えた HTTP サーバーを構築する完全な動作例については、GitHub の skywalking-demo をご参照ください。
トラブルシューティング
Protobuf 関連のエラーでビルドが失敗する

原因: Protobuf コンパイラがインストールされていないか、PATH に含まれていません。
解決策: 「前提条件」で説明されているように Protobuf をインストールしてから、ビルドを再試行してください。