全部產品
Search
文件中心

Managed Service for OpenTelemetry:通過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. 登入可觀測鏈路 OpenTelemetry 版控制台,在左側導覽列單擊接入中心

    2. 開源架構地區單擊SkyWalking卡片。

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

      說明

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

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

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

      image.png

    舊版控制台

    1. 登入可觀測鏈路 OpenTelemetry 版控制台

    2. 在左側導覽列單擊叢集配置,然後在右側頁面單擊存取點資訊頁簽。

    3. 在頁面頂部選擇需要接入的地區,然後在叢集資訊地區開啟顯示Token開關。

    4. 用戶端採集工具地區單擊SkyWalking

      相關資訊列中,擷取存取點資訊。

      SkyWalking存取點資訊

      說明

      如果應用部署於阿里雲生產環境,則選擇阿里雲VPC網路存取點,否則選擇公網存取點。

背景資訊

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官網