通过Jaeger为应用埋点并上报链路数据至可观测链路 OpenTelemetry 版后,可观测链路 OpenTelemetry 版即可开始监控应用,您可以查看应用拓扑、调用链路、异常事务、慢事务和SQL分析等一系列监控数据。本文介绍如何使用Jaeger埋点并上报C++应用数据。
为获得更丰富的功能、更先进的链路追踪能力,以及最佳使用体验,建议您使用OpenTelemetry协议将应用接入可观测链路 OpenTelemetry 版。
我们为您提供了详细的OpenTelemetry接入指南和最佳实践,帮助您快速上手可观测链路 OpenTelemetry 版。更多信息,请参见接入应用。
前提条件
背景信息
快速开始
运行以下命令,从官方网站获取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>
替换成前提条件获取的接入点信息。// 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
登录ARMS控制台后,在 页面选择目标应用,查看链路数据。
说明语言列显示图标的应用为接入应用监控的应用,显示-图标的应用为接入可观测链路 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>
替换成前提条件获取的接入点信息。// reporter.grpc.host-port用于设置网关,网关因地域而异。 例如: nohup ./jaeger-agent --reporter.grpc.host-port=tracing-analysis-dc-sz.aliyuncs.com:1883 --jaeger.tags=<endpoint>