通過Jaeger為應用埋點並上報鏈路資料至Managed Service for OpenTelemetry後,Managed Service for OpenTelemetry即可開始監控應用,您可以查看應用拓撲、調用鏈路、異常事務、慢事務和SQL分析等一系列監控資料。本文介紹如何使用Jaeger埋點並上報C++應用資料。
為獲得更豐富的功能、更先進的鏈路追蹤能力,以及最佳使用體驗,建議您使用OpenTelemetry協議將應用接入Managed Service for OpenTelemetry。
我們為您提供了詳細的OpenTelemetry接入指南和最佳實務,協助您快速上手Managed Service for OpenTelemetry。更多資訊,請參見接入應用。
前提條件
背景資訊
快速開始
運行以下命令,從官方網站擷取jaeger-client-cpp。
wget https://github.com/jaegertracing/jaeger-client-cpp/archive/master.zip && unzip master.zip
解壓並進入jaeger-client-cpp安裝包,然後運行以下命令編譯jaeger-client-cpp。
說明編譯依賴CMake,gcc版本不低於4.9.2。
mkdir build cd build cmake .. make
下載原生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>
進入jaeger-client-cpp的example目錄,運行測試案例。
./app ../examples/config.yml
登入ARMS控制台後,在 頁面選擇目標應用,查看鏈路資料。
說明語言列顯示表徵圖的應用為接入應用監控的應用,顯示-表徵圖的應用為接入可觀測鏈路 OpenTelemetry 版的應用。
通過Agent上報資料
安裝Jaeger Client(官方下載地址)。
建立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
建立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); }
下載原生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>