背景
上一篇只是单纯的从原理上以及控制台上去实践系统之间的打通,但是如果能从页面上去看每一个请求日志的链路情况就更好了。其实zipkin是提供了一个UI后台管理给到我们的。
注意点:关于 Zipkin 的服务端,在使用 Spring Boot 2.x 版本后,官方就不推荐自行定制编译了,反而是直接提供了编译好的 jar 包来给我们使用。具体请查阅:https://zipkin.io/pages/quickstart.html (最直接、权威的就是阅读官方网站)
1 | curl -sSL https://zipkin.io/quickstart.sh | bash -s |
快速上手
Zipkin 分为两端,一个是 Zipkin 服务端,一个是 Zipkin 客户端,客户端也就是微服务的应用。
客户端会配置服务端的 URL 地址,一旦发生服务间的调用的时候,会被配置在微服务里面的 Sleuth 的监听器监听,并生成相应的 Trace 和 Span 信息发送给服务端。
发送的方式主要有两种,一种是 HTTP 报文的方式,还有一种是消息总线的方式如 RabbitMQ。
不论哪种方式,我们都需要:
- 一个 Eureka 服务注册中心,这里我们就用之前的
eureka
项目来当注册中心。 - 一个 Zipkin 服务端。
- 三个微服务应用,
trace-a
和trace-b
和trace-c
,其中trace-a
中有一个 REST 接口/trace-a
,调用该接口后将触发对trace-b
应用的调用,最后调用trace-c
。其实2个服务就够了~
环境说明
也是因为一些环境问题,总是导致ui后管一直没有数据,这次参考了很多文章一级官网网址来操作的,才得以显示数据。
1 | <parent> |
方式一:通过HTTP
客户端的pom文件内容如下:
1 | <dependencies> |
客户端的properties文件内容如下:
1 | trace-a = |
访问层部分Java代码如下:
1 | package com.allei; |
还是确定一下注册中心,保证服务都有起来。
通过上面的脚本拉取最新的zipkin服务,此时的版本是:2.19.2
1 | ➜ Desktop curl -sSL https://zipkin.io/quickstart.sh | bash -s |
并且启动服务:嗯~ logo已经更换的更加的骚气~
1 | ➜ Desktop java -jar zipkin.jar |
当浏览器访问trace-a
服务的时候,去后管页面查看就能看到服务列表以及日志情况。
图一:
图二:
方式二:RabbitMQ
安装RabbitMQ
1 | ➜ ~ brew install rabbitmq |
安装的路径在:/usr/local/Cellar/rabbitmq/3.8.0
,利用brew安装软件速度可能会很慢,大家可以去更换一下源就变好了。但这个其实也不一定。
启动RabbitMQ
1 | ➜ sbin rabbitmq-server |
默认密码账号为guest/guest。登录进入后就能看到界面了。
配置客户端pom文件:
1 | # 新加入 |
为了觉得不是http的模式导致的数据,故意让地址写错
1 | http://localhost:9412 = |
然后客户端就什么都不用管了。但是服务端因为是下载的Jar的方式,让其支持RabbitMQ只能通过环境变量的方式来启动。
1 | RABBIT_ADDRESSES=localhost java -jar zipkin.jar |
这个时候会发现RabbitMQ会有一个zipkin的队列。
可配置的环境变量如下表所示:
属性 | 环境变量 | 描述 |
---|---|---|
zipkin.collector.rabbitmq.concurrency |
RABBIT_CONCURRENCY |
并发消费者数量,默认为 1 |
zipkin.collector.rabbitmq.connection-timeout |
RABBIT_CONNECTION_TIMEOUT |
建立连接时的超时时间,默认为 60000 毫秒,即 1 分钟 |
zipkin.collector.rabbitmq.queue |
RABBIT_QUEUE |
从中获取 span 信息的队列,默认为 zipkin |
zipkin.collector.rabbitmq.uri |
RABBIT_URI |
符合 RabbitMQ URI 规范 的 URI,例如 amqp://user:pass@host:10000/vhost |
如果设置了 URI,则以下属性将被忽略。
属性 | 环境变量 | 描述 |
---|---|---|
zipkin.collector.rabbitmq.addresses |
RABBIT_ADDRESSES |
用逗号分隔的 RabbitMQ 地址列表,例如 localhost:5672,localhost:5673 |
zipkin.collector.rabbitmq.password |
RABBIT_PASSWORD |
连接到 RabbitMQ 时使用的密码,默认为 guest |
zipkin.collector.rabbitmq.username |
RABBIT_USER |
连接到 RabbitMQ 时使用的用户名,默认为 guest |
zipkin.collector.rabbitmq.virtual-host |
RABBIT_VIRTUAL_HOST |
使用的 RabbitMQ virtual host,默认为 / |
zipkin.collector.rabbitmq.use-ssl |
RABBIT_USE_SSL |
设置为 true 则用 SSL 的方式与 RabbitMQ 建立链接 |
然后访问 http://localhost:10001/trace-a 并刷新 Zipkin UI,看到如下内容,就说明 Sleuth+Zipkin+RabbitMQ 整合成功了。
参考地址
- https://www.cnblogs.com/mxmbk/p/9820936.html
- https://juejin.im/post/5c3d4df0f265da61307517ad
- https://github.com/openzipkin/zipkin
- https://www.cnblogs.com/sxdcgaq8080/p/10007735.html
- https://blog.csdn.net/u010046908/article/details/54773323
- https://windmt.com/2018/04/24/spring-cloud-12-sleuth-zipkin/
- https://zipkin.io/pages/quickstart.html
如果大家喜欢我的文章,可以关注个人订阅号。欢迎随时留言、交流。