为什么要链路监控
用了微服务之后, 组件内部调来调去, 如果想要获得数据或者排查故障怎么办? 总不能每个服务都加log, 根据log 去判断... 所以就有了 Sleuth 和 Zipkin
Sleuth 负责在微服务间收集数据, Zipkin 负责存储并且展示, 两者就是这样的关系.
下载启动zipkin
zipkin是个jar包, 是要下载启动的. 官方文档很好很贴心:
curl -sSL https://zipkin.io/quickstart.sh | bash -s
java -jar zipkin.jar
注意, 这样启动的话数据只会放在内存. 等熟悉了之后我们再把数据放到其他存储方式.
sleuth-zipkin-demo 工程解读
工程位于: https://gitee.com/xiaofeipapa/spring-cloud-demo
目录是: sleuth-zipkin-demo
修改gateway项目
在配置文件里加上:
zipkin:
base-url: http://127.0.0.1:9411/ #zipkin 的服务端地址
sender:
type: web #采集日志向服务端传递的方式,还有mq等其他方式
sleuth:
sampler:
probability: 1 # 采集日志比率 如 0.1
这样就可以了, 就是这么的简单.
测试
启动各个项目, 在浏览器访问: http://localhost:10000/api/user/test_feign
然后打开 http://localhost:9411/ 点击+ , 选择 serviceName = back-gateway, 点击 Run Query, 就会看到如下图:
点击show 之后就能看到各种细节:
zipkin 使用rabbitmq
默认zipkin采用 http的方式收集数据, 相对而言, mq模式会更稳妥, 更不容易丢失数据. 以下记录zipkin 使用rabbimq的方式
安装rabbitmq
可以下载安装rabbitmq, 也可以直接用docker 启动
sudo docker pull rabbitmq:management
sudo docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:management
然后访问 localhost:15672 , 用户名密码都是guest , 会发现安装已成功.
修改zipkin的采集方式
将配置文件修改如下:
zipkin:
base-url: http://127.0.0.1:9411/ #zipkin 的服务端地址
sender:
type: rabbit
sleuth:
sampler:
probability: 1 # 采集日志比率 如 0.1
# rabbitmq config
rabbitmq:
host: localhost
port: 15672
username: guest
password: guest
将所有服务都重新启动, 然后访问 http://localhost:10000/api/user/test_feign , 然后在rabbitmq的管理界面, 会看到确实有mq消息产生了: