微服务多了,A服务调用B服务,B服务调用C服务,关系的追踪,检查各环节耗时等就显得重要,spring cloud zikpin 就为此而生
借用一张图理解
多个微服务把追踪信息发给kafka,zipkin获取kafka管道信息,ui展示给浏览器,并把获取的信息保存到mysql持久化。
一、zipkin server安装配置
1. 获取服务打包的可执行jar文件
代码及配置参见网址 :https://github.com/openzipkin/zipkin
因为zipkin 在新版本不再建议用户自己编译配置,提供一个直接生成并下载jar文件的方式
$ curl -sSL https://zipkin.io/quickstart.sh | bash -s
执行后可以看到目录下有了文件 zikpin.jar
$ java -jar zipkin.jar
即可在浏览器查看服务,默认是9411端口
是不是很简单。
2. 因为需要使用kafka,先启动kafka,如何安装kafka见我的另外文章。
cd kafka_2.12-2.1.0
bin/zookeeper-server-start.sh config/zookeeper.properties &
bin/kafka-server-start.sh config/server.properties &
3.创建数据库和表
方法参见官方github网址:https://github.com/openzipkin/zipkin/tree/master/zipkin-storage/mysql-v1
[root@centos7 ~]# mysql -uroot -p -e "SET GLOBAL innodb_file_format=Barracuda"
[root@centos7 ~]# mysql -uroot -p -e "show global variables like 'innodb_file_format'"
[root@centos7 ~]# mysql -uroot -p -e "create database if not exists zipkin"
下载 https://github.com/openzipkin/zipkin/blob/master/zipkin-storage/mysql-v1/src/main/resources/mysql.sql
[root@centos7 ~]# mysql -uroot -p -Dzipkin < mysql.sql
创建后进入mysql可以看到如下表。
MariaDB [zipkin]> show tables;
+---------------------+
| Tables_in_zipkin |
+---------------------+
| zipkin_annotations |
| zipkin_dependencies |
| zipkin_spans |
+---------------------+
4. 在做好以上准备后,重新运行 zikpin.jar, 带上环境变量
$KAFKA_BOOTSTRAP_SERVERS=127.0.0.1:9092 STORAGE_TYPE=mysql MYSQL_USER=root MYSQL_PASS=123 java -jar zipkin.jar
需要指定其他环境变量参见官网,比如mysql的详细配置
* `MYSQL_DB`: The database to use. Defaults to "zipkin".
* `MYSQL_USER` and `MYSQL_PASS`: MySQL authentication, which defaults to empty string.
* `MYSQL_HOST`: Defaults to localhost
* `MYSQL_TCP_PORT`: Defaults to 3306
* `MYSQL_MAX_CONNECTIONS`: Maximum concurrent connections, defaults to 10
* `MYSQL_USE_SSL`: Requires `javax.net.ssl.trustStore` and `javax.net.ssl.trustStorePassword`, defaults to false.
二、被监控微服务配置 (zikpin client)
1. pom.xml 加入:
2. application.properties 增加
spring.zipkin.enabled=true
spring.zipkin.sender.type=kafka
spring.kafka.bootstrap-servers=centos7.linbsoft.com:9092
spring.zipkin.base-url=http://centos7.linbsoft.com:8441
spring.sleuth.sampler.probability=1.0
其中 spring.sleuth.sampler.probability=1.0 表示监控100%的调用,实际应用应该小一点,比如 0.1 表示10%的调用会被监控,实际使用100%可能会把mysql挤破了。
客户端微服务修改后重启即可。
三、测试
1. kafka查看topic
bin/kafka-topics.sh --zookeeper 127.0.0.1:2181 --list
可以看到有个zipkin名字的topic
2.启动一个kafka消费者监控信息
bin/kafka-console-consumer.sh --bootstrap-server centos7.linbsoft.com:9092 --topic zipkin --from-beginning
3. 浏览器 调用zikpin-client微服务(即按上面二中安装配置了的微服务)
4.再在浏览器中监控zikpin服务器
可以看到有数据了
5. 查看某条记录的依赖图,可以看到微服务间调用关系
6.查看上面2中的kafka的监控窗口
7.查看数据库