为什么要链路监控
在微服务架构中,随着业务发展,系统拆分导致系统调用链路愈发复杂,一个看似简单的前端请求可能最终需要调用很多次后端服务才能完成,那么当整个请求出现问题时,我们很难得知到底是哪个服务出了问题导致的,一个来自用户的请求先到达前端A(如前端界面),然后通过远程调用,到达系统的中间件B、C(如负载均衡、网关等),最后到达后端服务D、E,后端经过一系列的业务逻辑计算,最后将数据返回给用户。所以在微服务架构中,必须实现分布式链路追踪,去跟进一个请求到底有哪些服务参与,参与的顺序又是怎样的,从而达到每个请求的步骤清晰可见,出现问题能够快速定位的目的。
Sleuth对于大部分用户来说都是透明的,系统间的交互信息都能被自动采集。用户可以通过日志文件获取链路数据,也可以将数据发给远程服务进行统一收集展示。
Spring Cloud Sleuth可以结合ZipKin,将信息发送到ZipKin,利用ZipKin的存储来存储信息,利用ZipKin UI来展示数据。
Zipkin
Zipkin是Twitter的一个开源项目,它基于Google的Dapper实现,被业界广泛使用。Zipkin致力于收集分布式系统的链路数据,提供了数据持久化策略,也提供面向开发者的API接口,用于查询数据,还提供了UI组件帮助我们查看具体的链路信息。
Zipkin的架构主要由4个核心组件构成。
- Collector:链路数据收集器,主要用于处理从链路客户端发送过来的链路数据,将这些数据转换为Zipkin内部处理的Span格式,以支持后续的存储、分析和展示等功能。
- Storage:存储组件,用来存储接收到的链路数据,默认会将这些数据存储在内存中,同时支持多种存储策略,比如将链路数据存储在MySQL、Cassandra和ElasticSearch中。
- RESTful API:API组件,它是面向开发者的,提供外部访问API接口,可以通过这些API接口来自定义展示界面。
- Web UI:UI组件,基于API接口实现的上层应用,用户利用UI组件可以很方便地查询和分析链路数据。
Zipkin安装
可以直接下载jar包运行:
这里使用docker进行使用,同时存储使用ElasticSearch数据库, 在docker-compose启动文件中添加:
elasticsearch:
image: elasticsearch:6.8.10
restart: always
networks:
- spring