全部產品
Search
文件中心

Application Real-Time Monitoring Service:通過Jaeger上報C++應用資料

更新時間:Aug 08, 2024

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

重要

為獲得更豐富的功能、更先進的鏈路追蹤能力,以及最佳使用體驗,建議您使用OpenTelemetry協議將應用接入Managed Service for OpenTelemetry

我們為您提供了詳細的OpenTelemetry接入指南和最佳實務,協助您快速上手Managed Service for OpenTelemetry。更多資訊,請參見接入應用

前提條件

擷取存取點資訊

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

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

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

    說明

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

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

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

    • 上報方式:根據用戶端支援的協議類型選擇HTTP或gRPC協議上報資料。

    image.png

背景資訊

資料是如何上報的?

  • 不通過Jaeger Agent而直接上報資料的原理如下圖所示。

  • 通過Jaeger Agent上報資料的原理如下圖所示。

快速開始

  1. 運行以下命令,從官方網站擷取jaeger-client-cpp

    wget https://github.com/jaegertracing/jaeger-client-cpp/archive/master.zip && unzip master.zip
  2. 解壓並進入jaeger-client-cpp安裝包,然後運行以下命令編譯jaeger-client-cpp。

    說明

    編譯依賴CMake,gcc版本不低於4.9.2。

    mkdir build
        cd build
        cmake ..
        make
  3. 下載原生Jaeger Agent,並用以下參數啟動Agent,以將資料上報至Managed Service for OpenTelemetry

    說明

    請將<endpoint>替換成前提條件擷取的存取點資訊。

    // reporter.grpc.host-port用於設定網關,網關因地區而異。 例如:
    nohup ./jaeger-agent --reporter.grpc.host-port=tracing-analysis-dc-sz.aliyuncs.com:1883 --jaeger.tags=<endpoint>
  4. 進入jaeger-client-cpp的example目錄,運行測試案例。

    ./app ../examples/config.yml

    登入ARMS控制台後,在應用監控 > 應用列表頁面選擇目標應用,查看鏈路資料。

    說明

    語言列顯示image表徵圖的應用為接入應用監控的應用,顯示-表徵圖的應用為接入可觀測鏈路 OpenTelemetry 版的應用。

通過Agent上報資料

  1. 安裝Jaeger Client(官方下載地址)。

  2. 建立Trace。

    例如,我們可以根據YAML配置產生Trace對象。

    void setUpTracer(const char* configFilePath)
    {
        auto configYAML = YAML::LoadFile(configFilePath);
        // 從YAML檔案中匯入配置。
        auto config = jaegertracing::Config::parse(configYAML);
        // 設定Trace的serviceName和日誌。
        auto tracer = jaegertracing::Tracer::make(
            "example-service", config, jaegertracing::logging::consoleLogger());
        //將Tracer設定為全域變數。
        opentracing::Tracer::InitGlobal(
            std::static_pointer_cast<opentracing::Tracer>(tracer));
    }

    YAML配置參考:

    disabled: false
    reporter:
      logSpans: true
    sampler:
      type: const
      param: 1
  3. 建立Span。

    // 有parentSpan的情況下建立Span。
    void tracedSubroutine(const std::unique_ptr<opentracing::Span>& parentSpan)
    {
        auto span = opentracing::Tracer::Global()->StartSpan(
            "tracedSubroutine", { opentracing::ChildOf(&parentSpan->context()) });
    }
    
    // 無parentSpan的情況下建立Span。
    void tracedFunction()
    {
        auto span = opentracing::Tracer::Global()->StartSpan("tracedFunction");
        tracedSubroutine(span);
    }
  4. 下載原生Jaeger Agent,並用以下參數啟動Agent,以將資料上報至Managed Service for OpenTelemetry

    說明

    請將<endpoint>替換成前提條件擷取的存取點資訊。

    // reporter.grpc.host-port用於設定網關,網關因地區而異。 例如:
    nohup ./jaeger-agent --reporter.grpc.host-port=tracing-analysis-dc-sz.aliyuncs.com:1883 --jaeger.tags=<endpoint>