本文介紹通過Jaeger C++ SDK將C++應用的Trace資料接入到Log Service的操作步驟。
前提條件
- 已建立Trace執行個體。更多資訊,請參見建立Trace執行個體。
已準備相關的開發環境,該環境需支援編譯及運行Jaeger C++ SDK。
如果您使用的是CMake編輯器,則其版本需為3.0及以上。
如果您使用的是GCC或G++編輯器,則其版本需為4.9.0及以上。
操作步驟
下載並編譯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。
無