tars 调用链

    tars框架内部采用opentracing api来封装调用链数据采集功能,并且封装了opentracing api的zipkin-brave实现。

    数据埋点

    • client send: 如果当前线程存在span,那么创建一个新的子span,如果不存在,那么创建一个新的tracer的根span,span类型为client,对于tars rpc调用,span tag信息中填写标准的peer相关信息还有自定义信息。

    • client receive: 关闭发起请求时对应的client span, 调用发生错误时需要填写标准定义的span log信息。

    • server receive: 如果请求中包含调用链上下文信息,则共享传输过来的span信息,否则开启一个新的span,span类型为server, span tag中填写自定义信息。

    • server send: 关闭对应的server span,服务发生错误时需要填写标准定义的span log信息。

    数据采集抽样

    • 按比例采集,在配置文件中配置比例,当前版本只支持此种方式。
    • 自定义过滤方法采集,框架提供接口,由用户自己实现并注册。
    • 其他采样方式……

    上报内容

    每一种埋点产生的span和Span Context信息,具体见opentracing标准定义。

    客户端自定义上报

    用户可通过框架提供的自定义接口在业务代码中上报自己定义的事件和信息。

    • http 序列化后的数据通过http协议上报数据,直接上报数据到跟踪系统。
    • kafaka 上报 序列化后的数据写入到kafka集群中,再由跟踪系统读取kafka后反序列化

    上报数据格式和具体的调用链数据收集示例有关,不同的实例有不同的格式,以下以快速集成zipkin为例,展示出可读性强的json格式。

    json格式

    数据分析与展示

    框架内置集成zipkin系统,可通过zipkin的页面查询调用链数据。

    目前tars -java从1.5.0版本开始支持调用链,cpp 版本即将放出,下面以集成zipkin为例介绍。

    开启调用链功能不需要改写一行业务代码,只需增加指定的服务配置即可。

    1. 在tars管理平台上选中要开启调用链的服务,点击“编辑”。

      2.选择编辑私有模版,填写以下内容:

    1. <application>
    2. <server>
    3. sampletype=http
    4. sampleencoding=json
    5. </server>
    6. </tars>

    说明:

    注意:

    tars-java支持用户在业务代码中上报自定义的信息到调用链追踪系统中,通过调用框架提供的api即可完成,使用示例如下:

    上报键值对信息:

    1. TraceContext.getInstance().tag("key", "value");

    上报事件性信息:

    消息内容为自定义内容

    现在以集成zipkin为例展示所上报的数据。

    • 获取zipkin server的可执行jar包。

      参考

    • 启动zipkin server,启动参数设置请参考zipkin官方文档说明。

    • 配置前台配置文件中的xxx.xml
      1. trace_html=zipkin_address(include http://)

    2

    点开单次调用链查看详细信息:

    5

    调用链key-value信息说明:

    key value
    client.ipv4 客户端ipv4地址。
    client.port 客户端端口。
    server.ipv4 服务端ipv4地址。
    server.port 服务端端口。
    tars.interface 服务端被调接口名(对于tars-java来说就是一个obj)。
    tars.method 服务端被调方法名。
    tars.protocol 数据编码协议。
    tars.retcode 调用返回码,0表示成功,非0为失败。
    tars.client.version 客户端tars版本
    tars.server.version 服务端tars版本