全部產品
Search
文件中心

Application Real-Time Monitoring Service:通過SkyWalking上報Rust應用資料

更新時間:Aug 08, 2024

通過SkyWalking為應用埋點並上報鏈路資料至Managed Service for OpenTelemetry後,Managed Service for OpenTelemetry即可開始監控應用,您可以查看應用拓撲、調用鏈路、異常事務、慢事務和SQL分析等一系列監控資料。本文介紹如何使用SkyWalking Rust Agent埋點並上報應用資料。

前提條件

  • 已安裝protobuf。

    macOS

    brew install protobuf

    Debian-base

    sudo apt install protobuf-compiler
  • 擷取存取點資訊

    1. 登入ARMS控制台,在左側導覽列單擊接入中心

    2. 服務端應用地區單擊SkyWalking卡片。

    3. 在彈出的SkyWalking面板中選擇資料需要上報的地區。

      說明

      初次接入的地區將會自動進行資源初始化。

    4. 選擇串連方式,然後複製存取點資訊。

      若您的服務部署在阿里雲上,且所屬地區與選擇的接入地區一致,推薦使用阿里雲內網方式,否則選擇公網方式。

      image.png

背景資訊

SkyWalking是一款廣受歡迎的國產APM(Application Performance Monitoring,應用效能監控)產品,主要針對微服務、Cloud Native和容器化(Docker、Kubernetes、Mesos)架構的應用。SkyWalking的核心是一個分布式追蹤系統。

Skywalking-rust是SkyWalking的Rust Agent官方庫,可以通過接入skywalking-rust實現對Rust應用的監控,skywalking-rust目前對Rust應用的自動埋點支援較差,需要使用者手動添加埋點。

樣本Demo

樣本Demo倉庫地址:SkyWalking Demo

該Demo基於Rust的Web架構hyper實現了一個簡單的HTTP Server,並使用skywalking-rust手動添加埋點,向Managed Service for OpenTelemetry控制台上報資料。

用SkyWalking為Rust應用手動埋點

  1. 在Rust專案引入SkyWalking依賴。

    說明

    本文中以SkyWalking 0.8.0版本為例。

    方法一:直接在cargo.toml中添加依賴

    # 在[dependency]下添加
    skywalking = { version = "0.8.0", features = ["vendored"] }

    方法二:在終端執行命令

    cargo add skywalking --features vendored
  2. 在原始碼中匯入SkyWalking模組。

    # 在需要埋點的原始碼中匯入模組
    use skywalking::{reporter::grpc::GrpcReporter, trace::tracer::Tracer};

  3. 手動埋點。

    // 使用EntrySpan、LocalSpan、ExitSpan完成調用鏈手動埋點,使用這三種Span,可以完成全鏈路追蹤。
    // EntrySpan: 入口Span,服務端使用EntrySpan從Http請求中拿到鏈路追蹤上下文。
    // LocalSpan: 本地Span,同一進程內可使用該Span埋點。
    // ExitSpan: 出口Span,用戶端使用ExitSpan向Http請求中注入鏈路追蹤上下文。
    
    // 跨進程的調用鏈,可以參照下面:
    
    // client.rs:
        
    let mut ctx = tracer.create_trace_context();
    {
        do something...
        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");
        do something...
    }
  4. 配置存取點和令牌。

    您可以通過前提條件擷取存取點地址和鑒權Token。

    // <endpoint>是存取點地址,<token>是存取點鑒權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. 重啟應用。

常見問題

構建Rust專案時報錯如下:image.png

問題原因:缺少protobuf,您可以參考前提條件安裝protobuf。

相關文檔

SkyWalking官網