通过Jaeger上报C++应用数据
在使用可观测链路 OpenTelemetry 版控制台追踪应用的链路数据之前,需要通过客户端将应用数据上报至可观测链路 OpenTelemetry 版。本文介绍如何通过Jaeger客户端上报C++应用数据。
前提条件
获取接入点信息
- 登录可观测链路 OpenTelemetry 版控制台。
- 在左侧导航栏单击集群配置,然后在右侧页面单击接入点信息页签。
- 在页面顶部选择需要接入的地域,然后在集群信息区域打开显示Token开关。
- 在客户端采集工具区域单击需要使用的链路数据采集客户端。
在下方表格的相关信息列中,获取接入点信息。
说明 如果应用部署于阿里云生产环境,则选择阿里云VPC网络接入点,否则选择公网接入点。对于Zipkin,一般情况下请使用v2版接入点,v1版接入点仅限对Zipkin十分了解的高阶用户使用。
背景信息
数据是如何上报的?
- 不通过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>
替换成可观测链路 OpenTelemetry 版控制台 页面相应客户端和地域的接入点。获取接入点信息的方法,请参见前提条件。// 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>
替换成可观测链路 OpenTelemetry 版控制台 页面相应客户端和地域的接入点。获取接入点信息的方法,请参见前提条件。// reporter.grpc.host-port用于设置网关,网关因地域而异。 例如: nohup ./jaeger-agent --reporter.grpc.host-port=tracing-analysis-dc-sz.aliyuncs.com:1883 --jaeger.tags=<endpoint>