HTTP+DB+Redis+Logging

客户端

客户端代码简要说明:

  1. 首先,客户端也是需要通过jaeger.Init方法初始化Jaeger
  2. 在本示例中,我们通过HTTP客户端向服务端发起了3次请求:
    1. /user/query 用于查询用户,使用前一个接口返回的用户ID。
    2. /user/delete 用于删除用户,使用之前接口返回的用户ID。

服务端

服务端代码简要说明:

  1. 首先,客户端也是需要通过jaeger.Init方法初始化Jaeger
  2. 在本示例中,我们使用到了数据库和数据库缓存功能,以便于同时演示ORMRedis的链路跟踪记录。
  3. 我们在程序启动时通过以下方法设置当前数据库缓存管理的适配器为redis。关于缓存适配器的介绍感兴趣可以参考 缓存管理-接口设计 章节。

  4. ORM的操作中,这里使用Cache方法缓存查询结果到redis中,并在删除操作中也使用Cache方法清除redis中的缓存结果。关于ORM的缓存管理介绍请参考 章节。

效果查看

启动服务端:

启动客户端:

链路跟踪-HTTP示例-数据操作 - 图2

Jaeger上查看链路信息:

可以看到,这次请求总共产生了14span,其中客户端有4span,服务端有个span,每一个span代表一个链路节点。不过,我们注意到,这里产生了3errors。我们点击详情查看什么原因呢。

我们看到好像所有的redis操作都报错了,随便点击一个redis的相关span,查看一下详情呢:

链路跟踪-HTTP示例-数据操作 - 图5

原来是redis连接不上报错了,这样的话所有的orm缓存功能都失效了,但是可以看到并没有影响接口逻辑,只是所有的查询都走了数据库。这个报错是因为我本地忘了打开redis server,我赶紧启动一下本地的redis server,再看看效果:

再把上面的客户端运行一下,查看jaeger

链路跟踪-HTTP示例-数据操作 - 图7

HTTP Client&ServerLogging组件在之前已经介绍过,因此这里我们主要关注ormredis组件的链路跟踪信息。

我们随便点开一个ORM链路Span,看看Attributes/Tags信息:

链路跟踪-HTTP示例-数据操作 - 图9

可以看到这里的span.kindinternal,也就是之前介绍过的方法内部span类型。这里很多Tags在之前已经介绍过,因此这里主要介绍关于数据库相关的Tags

Redis链路信息

链路跟踪-HTTP示例-数据操作 - 图11