本文介绍通过Jaeger C++ SDK将C++应用的Trace数据接入到日志服务的操作步骤。
前提条件
- 已创建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} 日志服务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。
无
- 修改examples目录下的App.cpp文件。