すべてのプロダクト
Search
ドキュメントセンター

Application Real-Time Monitoring Service:SkyWalking を使用して Rust アプリケーションデータをレポートする

最終更新日:Mar 03, 2025

アプリケーションのトレースデータを表示するには、クライアントを使用してアプリケーションデータを Managed Service for OpenTelemetry にレポートする必要があります。このトピックでは、SkyWalking の Rust エージェントを使用して Rust アプリケーションデータをレポートする方法について説明します。

前提条件

  • Protobuf がインストールされていること。

    macOS

    brew install protobuf

    Debian ベースの OS

    sudo apt install protobuf-compiler
  • SkyWalking のエンドポイントを取得するには、次の手順を実行します。

    1. Managed Service for OpenTelemetry コンソール にログインします。

    2. 左側のナビゲーションペインで、クラスタ設定 をクリックします。表示されるページで、アクセスポイント情報 タブをクリックします。

    3. 上部のナビゲーションバーで、リージョンを選択します。クラスタ情報 セクションで、トークンを表示 をオンにします。

    4. クライアント パラメータを SkyWalking に設定します。

      下部の表の 関連情報 列に SkyWalking のエンドポイントが表示されます。

      SkyWalking接入点信息

      説明

      アプリケーションが Alibaba Cloud の本番環境にデプロイされている場合は、VPC エンドポイントを使用します。それ以外の場合は、パブリックエンドポイントを使用します。

背景情報

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 アプリケーションを手動でインストルメント化する

  1. Rust プロジェクトに SkyWalking 依存関係を追加します。

    説明

    この例では、SkyWalking 0.8.0 を使用しています。

    方法 1: Cargo.toml ファイルに依存関係を追加する

    # [dependency] に依存関係を追加します。
    skywalking = { version = "0.8.0", features = ["vendored"] }

    方法 2: ターミナルでコマンドを実行する

    cargo add skywalking --features vendored
  2. SkyWalking モジュールをソースコードにインポートします。

    # インストルメント化するソースコードに SkyWalking モジュールをインポートします。
    use skywalking::{reporter::grpc::GrpcReporter, trace::tracer::Tracer};

  3. アプリケーションを手動でインストルメント化します。

    // 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");
        // 何かを実行...
    }
  4. エンドポイントとトークンを設定します。

    エンドポイントと認証トークンを取得する方法の詳細については、前提条件 を参照してください。

    // <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());
  5. アプリケーションを再起動します。

FAQ

問題の説明: Rush プロジェクトをビルドすると、次の図に示すようにエラーメッセージが返されます。image.png

原因: これは Protobuf が不足していることが原因である可能性があります。 Protobuf のインストール方法の詳細については、前提条件 を参照してください。

参考資料

Apache SkyWalking の公式 Web サイト