微服务架构中的各个微服务是相对独立的,那么对每个微服务的性能评估及各个微服务之间调用关系是对微服务应用的很重要审计指标,Zipkin就是因为这个需求而产生的开源系统,她可以很好的和Sping cloud结合,只需要简单的配置就可以很好的使用,有关的原理网上已经有很多,本文就不多说,只是将使用过程中存在的调整在此说明,以解决新手的困惑。

docker方式部署Zipkin服务器

1. 从镜像仓库下载docker镜像

 docker pull openzipkin/zipkin

2. 启动服务

 docker run -d --restart always -v /etc/localtime:/etc/localtime:ro -p 9411:9411 --name zipkin openzipkin/zipkin

这种启动模式所有数据都存储到内存,在生产环境建议采用mysql、ES等持久化模式,具体如何配置请求助搜索引擎。

正常启动后用浏览器代开http://172.16.15.239:9411,如果正常打开则说明服务启动正常。

spring cloud工程中引入Zipkin客户端

Zipkin的运行模式是CS方式,需要纳入跟踪体系的微服务都是作为客户端来实现的,所以必须将Zipkin的客户端功能集成到微服务工程中。

1. 引入对应的starter包

        org.springframework.cloud            spring-cloud-starter-zipkin        

2. 添加配置到application.yml中

#链路跟踪sleuth & zipkin配置spring:  zipkin:    base-url: http://172.16.15.239:9411  sleuth:    sampler:      probability: 1.0

其中,base-url是Zipkin服务端地址,probability是日志采集的频率,1.0表示全部采集,0表示不采集,介于0-1之间的数据表示采集比例,有的早期版本这个属性名称为rate或者percentage。

3. Controler层添加日志

Zipkin是通过日志采集数据的,所以在每个Controler方法的开始添加一条日志输出。

public ResponseData login(HttpServletResponse response, @RequestParam String mobile, @RequestParam String password){        log.info("登录");        ResponseData ResponseData=userBase.login(mobile, password);        try {            if (ResponseData.getCode() == 0) {                PublicKey publicKey = RSAUtils.getPublicKey(publicKeyBase64);                response.addCookie(new Cookie("toon-app-token", new String(Base64.getEncoder().encode(RSAUtils.encryptByPublicKey(ResponseData.getData().getString("userId").getBytes(), publicKey)))));                response.addCookie(new Cookie("toon-type", "toonapp"));            }        } catch (Exception e) {            ResponseData.setStatus(ResponseCode.LOGIN_ERROR);            log.error("{}",e.getLocalizedMessage());        }        return ResponseData;    }
    app_1 | 2019-12-11 13:35:48.597  INFO [gateway-toonapp,d6f0c66942371771,660729f52e1ea255,true] 1 --- [io-8011-exec-10] c.s.p.m.gateway.toonapp.web.Controller   : toonapp鉴权gw_1  | 2019-12-11 13:35:48.601  INFO [gateway-entrance,d6f0c66942371771,d6f0c66942371771,true] 1 --- [nio-8010-exec-9] c.s.p.m.g.entrance.filter.AccessFilter   : 鉴权结果ResponseData(code=0, message=成功, data={"userId":"61d4b219-e4e5-4c29-9688-b6759e3e6427"})

其中INFO后面第一个[]中的数据就是表明Zipkin配置已经生效(第4个数据如果都是false就说明采集频率设置错误,要么是参数名称不对,要么是采集频率过低)。

跟踪结果分析

通过浏览器打开Zipkin,如果采集正常则就有数据显示,否则检查上面的配置和日志内容。

075f63257515ada1cf400a504fffe06d.png

跟踪链列表

1e954f6a4e8ec5f62342caa88fe70fe9.png

调用链详细数据

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐