在使用链路追踪控制台追踪应用的链路数据之前,需要通过客户端将应用数据上报至链路追踪。本文介绍如何通过Jaeger客户端上报C++应用数据。

前提条件

获取接入点信息
  1. 登录链路追踪Tracing Analysis控制台,在页面顶部选择需要接入的地域。
  2. 在左侧导航栏单击集群配置,然后单击接入点信息页签。
  3. 接入点信息页签的集群信息区域打开显示Token开关。
  4. 客户端采集工具区域单击需要使用的链路数据采集客户端。

    在下方表格的相关信息列中,获取接入点信息。

    Jaeger/Zipkin接入点信息
    说明
    • 对于ACK集群应用,建议通过ARMS OpenTelemetry Collector上报应用数据。ARMS OpenTelemetry Collector支持本地集群内的链路采样与指标无损统计,在降低链路传输、存储成本的同时,不影响监控或告警指标的准确性。更多信息,请参见ARMS OpenTelemetry Collector
    • 如果应用部署于阿里云生产环境,则选择私网接入点,否则选择公网接入点。对于Zipkin,一般情况下请使用v2版接入点,v1版接入点仅限对Zipkin十分了解的高阶用户使用。

背景信息

数据是如何上报的?
  • 不通过Jaeger Agent而直接上报数据的原理如下图所示。不通过Jaeger Agent而直接上报
  • 通过Jaeger Agent上报数据的原理如下图所示。通过Jaeger Agent上报数据

快速开始

  1. 运行以下命令,从官方网站获取jaeger-client-cpp
    wget https://github.com/jaegertracing/jaeger-client-cpp/archive/master.zip && unzip master.zip
  2. 解压并进入jaeger-client-cpp安装包,然后运行以下命令编译jaeger-client-cpp。
    说明 编译依赖CMake,gcc版本不低于4.9.2。
    mkdir build
        cd build
        cmake ..
        make
  3. 下载原生Jaeger Agent,并用以下参数启动Agent,以将数据上报至链路追踪Tracing Analysis。
    说明 请将<endpoint>替换成链路追踪控制台集群配置页面上相应客户端和相应地域的接入点。获取接入点信息的方法,请参见前提条件。
    // reporter.grpc.host-port用于设置网关,网关因地域而异。 例如:
    nohup ./jaeger-agent --reporter.grpc.host-port=tracing-analysis-dc-sz.aliyuncs.com:1883 --jaeger.tags=<endpoint>
  4. 进入jaeger-client-cpp的example目录,运行测试用例。
    ./app ../examples/config.yml
  5. 登录链路追踪控制台,查看上报的数据。

通过Agent上报数据

  1. 安装Jaeger Client(官方下载地址)。
  2. 创建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
  3. 创建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);
    }
  4. 下载原生Jaeger Agent,并用以下参数启动Agent,以将数据上报至链路追踪Tracing Analysis。
    说明 请将<endpoint>替换成链路追踪控制台集群配置页面上相应客户端和相应地域的接入点。获取接入点信息的方法,请参见前提条件。
    // reporter.grpc.host-port用于设置网关,网关因地域而异。 例如:
    nohup ./jaeger-agent --reporter.grpc.host-port=tracing-analysis-dc-sz.aliyuncs.com:1883 --jaeger.tags=<endpoint>