微服务架构中的各个微服务是相对独立的,那么对每个微服务的性能评估及各个微服务之间调用关系是对微服务应用的很重要审计指标,Zipkin就是因为这个需求而产生的开源系统,她可以很好的和Sping cloud结合,只需要简单的配置就可以很好的使用,有关的原理网上已经有很多,本文就不多说,只是将使用过程中存在的调整在此说明,以解决新手的困惑。
docker方式部署Zipkin服务器
- 从镜像仓库下载docker镜像
docker pull openzipkin/zipkin
- 启动服务
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的客户端功能集成到微服务工程中。
- 引入对应的starter包
<!--zipkin依赖包-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
- 添加配置到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。
- 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,如果采集正常则就有数据显示,否则检查上面的配置和日志内容。