HTTP+DB+Redis+Logging
客户端
客户端代码简要说明:
- 首先,客户端也是需要通过
jaeger.Init
方法初始化Jaeger
。 - 在本示例中,我们通过HTTP客户端向服务端发起了
3
次请求:/user/query
用于查询用户,使用前一个接口返回的用户ID。/user/delete
用于删除用户,使用之前接口返回的用户ID。
服务端
服务端代码简要说明:
- 首先,客户端也是需要通过
jaeger.Init
方法初始化Jaeger
。 - 在本示例中,我们使用到了数据库和数据库缓存功能,以便于同时演示
ORM
和Redis
的链路跟踪记录。 我们在程序启动时通过以下方法设置当前数据库缓存管理的适配器为
redis
。关于缓存适配器的介绍感兴趣可以参考 缓存管理-接口设计 章节。- 在
ORM
的操作中,这里使用Cache
方法缓存查询结果到redis
中,并在删除操作中也使用Cache
方法清除redis
中的缓存结果。关于ORM
的缓存管理介绍请参考 章节。
效果查看
启动服务端:
启动客户端:
在Jaeger
上查看链路信息:
可以看到,这次请求总共产生了14
个span
,其中客户端有4
个span
,服务端有个span
,每一个span
代表一个链路节点。不过,我们注意到,这里产生了3
个errors
。我们点击详情查看什么原因呢。
我们看到好像所有的redis
操作都报错了,随便点击一个redis
的相关span
,查看一下详情呢:
原来是redis
连接不上报错了,这样的话所有的orm
缓存功能都失效了,但是可以看到并没有影响接口逻辑,只是所有的查询都走了数据库。这个报错是因为我本地忘了打开redis server
,我赶紧启动一下本地的redis server
,再看看效果:
再把上面的客户端运行一下,查看jaeger
:
HTTP Client&Server
、Logging
组件在之前已经介绍过,因此这里我们主要关注orm
和redis
组件的链路跟踪信息。
我们随便点开一个ORM
链路Span
,看看Attributes/Tags
信息:
可以看到这里的span.kind
是internal
,也就是之前介绍过的方法内部span
类型。这里很多Tags
在之前已经介绍过,因此这里主要介绍关于数据库相关的Tags
: