本文介绍通过Jaeger C++ SDK将C++应用的Trace数据接入到日志服务的操作步骤。
前提条件
- 已创建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}
日志服务Project的接入地址,格式为${project}.${region-endpoint}:Port,其中:
${project}:日志服务Project名称。
${region-endpoint}:日志服务Project所在地域的访问域名,支持公网和阿里云内网(经典网络、VPC)。更多信息,请参见服务入口。
Port:网络端口,固定为10010。
说明如果配置为stdout,即provider.WithTraceExporterEndpoint("stdout"),表示将数据打印到标准输出。
如果配置为空值,表示不上传Trace数据到日志服务。
test-project.cn-hangzhou.log.aliyuncs.com:10010
${project}
日志服务Project名称。
test-project
${instance}
Trace服务实例ID。更多信息,请参见创建Trace实例。
test-traces
${access-key-id}
阿里云账号AccessKey ID。
建议您使用只具备日志服务Project写入权限的RAM用户的AccessKey(包括AccessKey ID和AccessKey Secret)。授予RAM用户向指定Project写入数据权限的具体操作,请参见授权。如何获取AccessKey的具体操作,请参见访问密钥。
无
${access-key-secret}
阿里云账号AccessKey Secret。
建议您使用只具备日志服务Project写入权限的RAM用户的AccessKey。
无