本文介紹通過Jaeger C++ SDK將C++應用的Trace資料接入到Log Service的操作步驟。
前提條件
- 已建立Trace執行個體。更多資訊,請參見建立Trace執行個體。
- 已準備相關的開發環境,該環境需支援編譯及運行Jaeger C++ SDK。
- 如果您使用的是CMake編輯器,則其版本需為3.0及以上。
- 如果您使用的是GCC或G++編輯器,則其版本需為4.9.0及以上。
操作步驟
- 下載並編譯SDK。
- 下載Jaeger C++ SDK。
- 解壓安裝包到指定路徑。
- 進入解壓後的指定路徑,執行如下命令。
mkdir build cd build CXXFLAGS="-Wno-error=deprecated-copy" cmake .. make
- 編譯並運行代碼。
- 修改examples目錄下的App.cpp檔案。 將App.cpp檔案中的內容替換為如下內容,如下內容表示使用環境變數方式初始化Jaeger。更多資訊,請參見jaeger-client-cpp。
#include <iostream> #include <jaegertracing/Tracer.h> #include <jaegertracing/utils/EnvVariable.h> namespace { void setUpTracer() { const auto serviceName = jaegertracing::utils::EnvVariable::getStringVariable("JAEGER_SERVICE_NAME"); auto config = jaegertracing::Config(); config.fromEnv(); auto tracer = jaegertracing::Tracer::make( serviceName, config, jaegertracing::logging::consoleLogger()); opentracing::Tracer::InitGlobal( std::static_pointer_cast<opentracing::Tracer>(tracer)); } void tracedSubroutine(const std::unique_ptr<opentracing::Span>& parentSpan) { auto span = opentracing::Tracer::Global()->StartSpan( "tracedSubroutine", { opentracing::ChildOf(&parentSpan->context()) }); } void tracedFunction() { auto span = opentracing::Tracer::Global()->StartSpan("tracedFunction"); tracedSubroutine(span); } } // anonymous namespace int main(int argc, char* argv[]) { setUpTracer(); tracedFunction(); // Not strictly necessary to close tracer, but might flush any buffered // spans. See more details in opentracing::Tracer::Close() documentation. opentracing::Tracer::Global()->Close(); return 0; }
- 重新進入build目錄。
- 執行
make
命令構建App。 - 運行如下代碼。如下代碼中的變數需根據實際情況替換,關於變數的詳細說明如下表所示。
# 如果您需要列印Span,則執行此環境變數export JAEGER_REPORTER_LOG_SPANS=true。 export JAEGER_SAMPLER_TYPE=const export JAEGER_SAMPLER_PARAM=1 export JAEGER_SERVICE_NAME=${service} export JAEGER_PROPAGATION=w3c export JAEGER_ENDPOINT="https://${endpoint}/jaeger/api/traces" export JAEGER_TAGS=sls.otel.project=${project},sls.otel.instanceid=${instance},sls.otel.akid=${access-key-id},sls.otel.aksecret=${access-key-secret},service.version=${version} ./app
表 1. 變數說明 變數 說明 樣本 ${service} 服務名。根據您的實際情境取值即可。 payment ${version} 服務版本號碼。建議按照va.b.c格式定義。 v0.1.2 ${endpoint} Log ServiceProject的接入地址,格式為${project}.${region-endpoint}:Port,其中: - ${project}:Log ServiceProject名稱。
- ${region-endpoint}:Log ServiceProject所在地區的訪問網域名稱,支援公網和阿里雲內網(傳統網路、VPC)。更多資訊,請參見服務入口。
- Port:網路連接埠,固定為10010。
說明- 如果配置為stdout,即provider.WithTraceExporterEndpoint("stdout"),,表示將資料列印到標準輸出。
- 如果配置為空白值,表示不上傳Trace資料到Log Service。
test-project.cn-hangzhou.log.aliyuncs.com:10010 ${project} Log ServiceProject名稱。 test-project ${instance} Trace服務執行個體ID。更多資訊,請參見建立Trace執行個體。 test-traces ${access-key-id} 阿里雲帳號AccessKey ID。 建議您使用只具備Log ServiceProject寫入許可權的RAM使用者的AccessKey(包括AccessKey ID和AccessKey Secret)。授予RAM使用者向指定Project寫入資料許可權的具體操作,請參見授權。如何擷取AccessKey的具體操作,請參見存取金鑰。
無 ${access-key-secret} 阿里雲帳號AccessKey Secret。 建議您使用只具備Log ServiceProject寫入許可權的RAM使用者的AccessKey。
無
- 修改examples目錄下的App.cpp檔案。