场景:系统访问服务很慢,如果在每个系统都加切面拦截arond ,打印查看访问时间。这个比较繁琐,系统多了也比较不科学。
springcloud 的一组件 zipkin 为我们提供了这样的工具。
官网:https://zipkin.io/pages/quickstart.html
分两步实现服务跟踪,查找慢点:
第一步:部署服务。
官网提供有3种方式给我们。
1、docker 部署服务。
2、下载jar运行。
3、下载源码编译运行。
最近都在使用docker,所以我选择了第一种,也是官网推荐的:docker
docker run -d -p 9411:9411 openzipkin/zipkin
修改了下官网提供的脚本:加上内存限制,跟服务启动自启。重命名容器。
docker run --restart=always \ -m 1000M --memory-swap -1 \ -d --name zipkin \ -p 9215:9411 \ openzipkin/zipkin
运行后发现内存开销也就200多M。
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 974bf61270d5 zipkin 0.05% 292.3MiB / 1000MiB 29.23% 731kB / 1.75MB 0B / 0B 18
访问:http://192.168.89.190:9215/
我这里编辑部署到服务器上:写了个zipkin_docker.sh 脚本
[root@localhost soft]# mkdir zipkin [root@localhost soft]# cd zipkin/ [root@localhost zipkin]# vi zipkin_docker.sh docker run --restart=always \ -m 1000M --memory-swap -1 \ -d --name zipkin \ -p 9215:9411 \ openzipkin/zipkin
第二步:springboot应用整合zipkin服务。
我们这里不用管服务端,客户端,只要配置上zipkin地址即可。
application.yml
spring: zipkin: enabled: true base-url: http://192.168.89.190:9215
项目pom.xml增加依赖jar
<!--服务链路追踪--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-sleuth-zipkin</artifactId> </dependency>
<properties> <!--zipkin2.12.x需要此版本jooq --> <jooq.version>3.11.11</jooq.version> <zipkin.version>2.12.2</zipkin.version> <zipkin-storage-mysql.version>2.8.4</zipkin-storage-mysql.version> </properties>
我有3个服务。
web-pc
server-search
server-db
第三步测试结果:
点击查询按钮,可以看到如下结果。点击每条记录,可以看到每个服务的具体每个方法请求耗时。。