SASDN-Zipkin
use zipkin-transport-kafka
package, send trace message to kafka and consume from it.
Install
$ npm install --save sasdn-zipkin
Examples
gRPC
gRPC Server Middleware
;; // { 127.0.0.1:9092 } is remote kafka collector urlGrpcImpl.init'127.0.0.1:9092', ; ;app.usenew GrpcImpl.createMiddleware;app.bind'127.0.0.1:8080'.start;
gRPC Client Proxy
;; // { 127.0.0.1:9092 } is remote kafka collector urlGrpcImpl.init'127.0.0.1:9092', ;GrpcImpl.setReceiverServiceInfo; ;;
Koa
Koa Server Middleware
;; // { 127.0.0.1:9092 } is remote kafka collector urlKoaImpl.init'127.0.0.1:9092', ; ;app.usenew KoaImpl.createMiddleware;app.listen'127.0.0.1', 8080;
Typeorm
Typeorm Client Proxy
;;; // build entities;entities.push; // { 127.0.0.1:9092 } is remote kafka collector urlTypeOrmImpl.init'127.0.0.1:9092', ;TypeOrmImpl.setReceiverServiceInfo; ;;
在 zipkin trace 日志中添加自定义数据
SASDN-Zipkin 允许用户在 trace 日志中添加自定义数据,但是为服务端添加自定义数据与为客户端添加自定义数据两种方案,他们执行顺序和触发日志发送的时机是完全不一样的,下面就开始介绍如何添加自定义数据。
为服务端添加自定义数据
通过上面的代码,可以知道服务端是通过 middleware 的方式添加 zipkin trace 的,如果需要添加新的自定义参数,则需要创建新的middleware,并启用。所有日志都是全局的,每个请求都会经过middleware即必然会进行记录.
在 grpc server 的 zipkin trace 记录添加自定义数据:请求中的元数据
;; ;GrpcImpl.init'127.0.0.1:9092', ; ;app.use;app.usezipkinTmpl.createMiddleware;app.bind'127.0.0.1:8080'.start;
在 koa server 的 zipkin trace 记录中添加自定义数据:接口返回状态码
;; ;// { 127.0.0.1:9092 } is remote kafka collector urlKoaImpl.init'127.0.0.1:9092', ; ;app.usezipkinImpl.createMiddleware;app.use;app.listen'127.0.0.1', 8080;
为客户端添加自定义数据
为客户端添加自定义数据的方式相对简单,只需要在 createClient 后,执行 Client 的远程调用前,将自定义数据通过 setCustomizedRecords 方法加入到缓存中即可。
在 grpc client的 zipkin trace 记录添加自定义数据:当前时间
;; ;// { 127.0.0.1:9092 } is remote kafka collector urlGrpcImpl.init'127.0.0.1:9092', ;GrpcImpl.setReceiverServiceInfo; ;; // 在 Zipkin Event:Client Send 时,记录当前时间zipkinImpl.setCustomizedRecordsZIPKIN_EVENT.CLIENT_SEND, ; proxyClient.getOrderrequest,;
在 typeorm client的 zipkin trace 记录添加自定义数据:日志信息
;;; // build entities;entities.push; TypeOrmImpl.init'127.0.0.1:9092', ;TypeOrmImpl.setReceiverServiceInfo; ;;; // 在 Zipkin Event:Client Receive 时,记录一个字符串zipkinImpl.setCustomizedRecordsZIPKIN_EVENT.CLIENT_RECV, ; .createQueryBuilder'user' .where'user.id=:id', .getOne;