通過Jaeger為應用埋點并上報鏈路數據至可觀測鏈路 OpenTelemetry 版后,可觀測鏈路 OpenTelemetry 版即可開始監控應用,您可以查看應用拓撲、調用鏈路、異常事務、慢事務和SQL分析等一系列監控數據。本文介紹如何使用Jaeger埋點并上報C++應用數據。
為獲得更豐富的功能、更先進的鏈路追蹤能力,以及最佳使用體驗,建議您使用OpenTelemetry協議將應用接入可觀測鏈路 OpenTelemetry 版。
我們為您提供了詳細的OpenTelemetry接入指南和最佳實踐,幫助您快速上手可觀測鏈路 OpenTelemetry 版。更多信息,請參見接入應用。
前提條件
新版控制臺
登錄可觀測鏈路 OpenTelemetry 版控制臺,在左側導航欄單擊接入中心。
在開源框架區域單擊Jaeger卡片。
在彈出的Jaeger面板中選擇數據需要上報的地域。
說明初次接入的地域將會自動進行資源初始化。
選擇連接方式和上報方式,然后復制接入點信息。
連接方式:若您的服務部署在阿里云上,且所屬地域與選擇的接入地域一致,推薦使用阿里云內網方式,否則選擇公網方式。
上報方式:根據客戶端支持的協議類型選擇HTTP或gRPC協議上報數據。
舊版控制臺
在左側導航欄單擊集群配置,然后在右側頁面單擊接入點信息頁簽。
在頁面頂部選擇需要接入的地域,然后在集群信息區域打開顯示Token開關。
在客戶端采集工具區域單擊Jaeger。
在相關信息列中,獲取接入點信息。
說明如果應用部署于阿里云生產環境,則選擇阿里云VPC網絡接入點,否則選擇公網接入點。
背景信息
不通過Jaeger Agent而直接上報數據的原理如下圖所示。
通過Jaeger Agent上報數據的原理如下圖所示。
快速開始
運行以下命令,從官方網站獲取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,以將數據上報至可觀測鏈路 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
在可觀測鏈路 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,以將數據上報至可觀測鏈路 OpenTelemetry 版。
說明請將
<endpoint>
替換成前提條件獲取的接入點信息。// reporter.grpc.host-port用于設置網關,網關因地域而異。 例如: nohup ./jaeger-agent --reporter.grpc.host-port=tracing-analysis-dc-sz.aliyuncs.com:1883 --jaeger.tags=<endpoint>