调用链

最近更新时间:2019-06-27 10:44:15

为了节约用户的开发成本和提升使用效率,TSF 提供了 Spring Cloud 全链路跟踪的组件。用户只需要在代码中配置组件依赖,即可直接使用 TSF 的全链路跟踪功能,无需关心日志采集、分析、存储等过程。 用户仅需要安装了对应的依赖包及添加依赖项即可,无须其他配置。

准备工作

开始实践调用链功能前,请确保已完成 SDK 下载

依赖项

添加 pom.xml 依赖:

<dependency>
    <groupId>com.tencent.tsf</groupId>
    <artifactId>spring-cloud-tsf-sleuth</artifactId>
    <version><!-- 调整为 SDK 最新版本号 --></version>
</dependency>

微服务对下游组件访问的链路支持

微服务对 Redis、MySQL、MongoDB、消息队列 CMQ 的访问操作会产生跟踪日志, TSF 会对该日志进行采集、分析、统计,这些组件的调用会展现在 TSF 平台的链路追踪中。

说明:

非微服务组件的链路支持功能依赖于1.14.0版本及以上版本的 SDK,详情请参考 SDK 更新日志

Redis 链路使用说明

考虑到 Redis 库的多样性,以及 spring-data-redis 库的易用性,目前只对spring-boot-starter-data-redis进行支持,在引用 spring-boot-starter-data-redis 时不要指定版本,只需要整个工程依赖 parent pom 即可:

<parent>
    <groupId>com.tencent.tsf</groupId>
    <artifactId>spring-cloud-tsf-dependencies</artifactId>
    <version>tsf的版本号(1.14以后开始支持 Redis)</version>
</parent>

spring-boot-starter-data-redis的版本为 parent pom 文件管理的 Redis Starter 的版本。在代码中具体使用时,引入 RedisTemplate,然后使用其方法即可。
如果通过其他方式引入 Redis 客户端(例如直接 new Jedis),则将无法在 TSF 的链路中查看到相应的信息。

MySQL 链路使用说明

支持实现 JDBC 规范的 MySQL 驱动器和各类连接池(如 Tomcat-JDBC、DBCP、Hikari、Druid),在使用时需引入 SpringBoot 相关依赖和 MySQL 驱动依赖:

<!-- spring-boot-starter-jdbc -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
    <version>RELEASE</version>
</dependency>
<!-- mysql -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>RELEASE</version>
</dependency>

引入依赖后,根据需要添加相关数据库连接池依赖或直接使用 SpringBoot 默认选项。

MongoDB 链路使用说明

考虑到 spring-data-mongodb 库的易用性,目前只对spring-boot-starter-data-mongodb进行支持,在引用 spring-boot-starter-data-mongodb 时不要指定版本,只需要整个工程依赖 parent pom 即可,示例如下:

  <parent>
      <groupId>com.tencent.tsf</groupId>
      <artifactId>spring-cloud-tsf-dependencies</artifactId>
      <version>tsf的版本号(1.14以后开始支持 MongoDB)</version>
  </parent>

spring-boot-starter-data-mongodb的版本即是 parent pom 文件管理的 mongoldb starter 的版本。在代码中具体使用时,引入MongoTemplate,然后使用其方法即可。

  • 如果需要制定 MongoDB 连接的 URI,需要满足以下格式:
    mongodb://host[:port1][/[database][?options]] #暂时只支持单节点 MongonDB
    也可以不用填写,即默认 host 是本机,默认端口27017。
  • 如果通过其他方式引入 MongoDB 客户端,例如直接new MongoClient(host,port),则在 TSF 的链路中将无法查看到相应的信息。

消息队列 CMQ 链路使用说明

CMQ 组件目前通过 Spring Cloud Stream Binder 方式接入Spring Cloud 体系,对于 CMQ 组件的全链路追踪目前基于spring-cloud-stream-binder-cmq扩展实现,使用时需在上下游服务中添加spring-cloud-stream-binder-cmq依赖并按照规范进行 CMQ 配置。

<!-- 使用CMQ -->
<dependency>
    <groupId>com.qcloud</groupId>
    <artifactId>spring-cloud-stream-binder-cmq</artifactId>
    <version>VERSION</version>
</dependency>

配置参考:

spring:
  application:
    name: cmq-demo
  cloud:
    stream:
      bindings:
        input:
          destination: test-topic
        output:
          destination: test-topic
      cmq:
        bindings:
          input:
            consumer:
              pollingWaitSeconds: 3
        binder:
          secretId: ***
          secretKey: ***
          endpoint: https://cmq-queue-***.api.qcloud.com

标签与自定义元数据

调用链支持用户在代码中设置标签(Tag) 和自定义元数据(CustomMetada),分别用于调用链的筛选和附带业务信息。

接口定义:

public class TsfContext {
    /**
     * 设置多个 Tag。如果有某个 Tag 之前已经被设置过,那么它的值会被覆盖。
     */
    public static void putTags(Map<String, String> tagMap, TagControlFlag... flags) {}

    /**
     * 设置 Tag。如果该 key 之前已经被设置过,那么它的值会被覆盖。
     */
    public static void putTag(String key, String value, TagControlFlag... flags) {}

    /**
     * 设置 CustomMetadata。
     */
    public static void putCustomMetadata(Object customMetadata)
}