对于一个大型的几十个、几百个微服务构成的微服务架构系统,通常会遇到下面一些问题。
二 需求:监控微服务- 如何串联整个调用链路,快速定位问题?定位问题,不再使用查看日志的方式。
- 如何理清各个微服务之间的依赖关系?
- 如何进行各个微服务接口的性能分折?执行时间。
- 如何跟踪整个业务流程的调用处理顺序?
2 “神”工具
- Spring Boot Actuator + 端点
- Spring Boot Admin + 可视化UI界面
- Hystrix Dashboard监控Hystrix服务
- Hystrix Turbine聚合多个Hystrix服务的监控信息
-
Spring Cloud Sleuth + Zipkin Server分布式链路跟踪
Spring Cloud Sleuth大量借用了,帮我们解决像上面提到的问题
-
Google Dapper
-
Twitter Zipkin,UI界面数据展示
-
Apache HTrace
- Spring Cloud Sleuth,分布式链路跟踪,埋点,生成跟踪数据 》上传 》 Zipkin Server,UI界面数据展示
- 第一步:需要监控和管理的微服务,都必须和zipkin整合
- 第二步:微服务,跟踪数据,上传zipkin server
- 第三步:在zipkin server ui上分析数据、查找问题所在的微服务、分析各个微服务的性能
- 这里面涉及到Spring Cloud Sleuth的一些术语:
- request:请求
- response:响应
- span(跨度):基本工作单元,即工作流程中的一小段工作区间
- 请求是一个跨度
- 响应是一个跨度
- 服务是一个跨度
- 服务和服务之间的网络通信是一个跨度
- No Span Id:没有跨度id
- Span Id一直在变
- trace(跟踪):一组共享"rootspan"的 span组成的树状结构称为 traceo trace也用一个64位的 ID唯一标识, trace中的所有 span都共享该 trace的 ID;
- No Trace Id:没有跟踪id。
- Trace Id,全局的唯一,在整个链路中没有改变过。
- annotation(标注): annotation用来记录事件的存在,其中,核心annotation用来定义请求的开始和结束。
- CS(Client sent客户端发送):客户端发起一个请求,该annotation描述了span的开始;
- SR(server Received服务器端接收):服务器端获得请求并准备处理它。如果用 SR减去 CS时间戳,就能得到网络延迟;
- SS(server sent服务器端发送):该annotation表明完成请求处理(当响应发回客户端时)。如果用 SS减去 SR时间戳,就能得到服务器端处理请求所需的时间;
- CR(Client Received客户端接收): span结束的标识。客户端成功接收到服务器端的响应。如果 CR减去 CS时间戳,就能得到从客户端发送请求到服务器响应的所需的时间;
-
Google Dapper
-
Twitter Zipkin,UI界面数据展示
-
Apache HTrace
- Spring Cloud Sleuth,埋点,生成跟踪数据 》上传 》 Zipkin Server,UI界面数据展示
- async
- Hystrix
- messaging
- websocket
- rxjava
- scheduling
- web(Spring MVC Controller,Servlet)
- webclient(Spring RestTemplate)
- Feign
- Zuul;
- APM(应用性能监控与管理)工具
- Zipkin,Twitter开源,分布式实时数据跟踪系统,Distributed Tracking System。
-
基于Google Dapper,论文,实现链路追踪,标杆和理论基础。
-
官网,OpenZipkin · A distributed tracing system
-
第一步:收集系统的时序数据
-
第二步:UI界面
-
第三步:分析追踪数据
-
第四步:延时、异常等待问题
-
-
韩国、Naver、Pinpoint。Apache、HTrace。阿里、EagleEye。京东、Hydra等
- 创建一个SpringBoot项目,用于搭建Zipkin Server服务端;
- 添加依赖:自动引入springmvc,web项目,不使用内嵌的tomcat,使用的是jboss旗下的undertown内嵌服务器:
io.zipkin.java zipkin-autoconfigure-ui2.12.3 io.zipkin.java zipkin-server2.12.3 注意:这个里面有版本的兼容性问题,当前我们的spring cloud G SR3版本使用2.12.3便可以正常使用,如果使用zipkin-server的最新的版本,可能会启动失败;
-
配置文件:application.properties
#内嵌的服务器undertown的端口 server.port=9410 #zipkin启动报错无法访问的解决方法 management.metrics.web.server.autoTimeRequests=false
-
在启动类上加入注解:@EnableZipkinServer
@EnableZipkinServer //开启zipkin server的支持 @SpringBootApplication public class SleuthApplication { public static void main(String[] args) { SpringApplication.run(SleuthApplication.class); } }
-
然后启动zipkin server服务,访问http://localhost:9410 (默认启动了Undertow服务的9410端口)
为什么会有这个页面?
-
项目中没有加页面呀???为什么?
-
页面在jar包里面,一般名称是Xxx-UI.jar,同swagger的swagger-ui.jar
-
-
能看到上面这个页面,zipkin server服务搭建OK;
目前我们还查询不到数据,我们需要把微服务和sleuth整合,并把sleuth记录的数据上传到zipkin server,此时我们才能在页面上看到数据。
1)服务查询条件:
-
服务名:就是微服务配置文件中的application name;
-
Span名称:跨度;
-
时间段 :现在查询的时间段;例如,查今天的所有数据。
-
根据Annotation查询:根据标注查询,用于自定义查询条件;例如,自定义一个参数去查。
-
持续时间:一次调用链的持续时间;例如,查运行时间大于5秒的服务调用。
-
数量:一页数量;
-
排序:排序规则;
2)服务查询结果:
3)点击,查看服务地址。点击,查看服务调用参数详情:
(2)依赖(3)根据Trace id进行搜索 (4)可选的另外一套UI界面,功能一样,丑,英文,不好用,不建议用 9、内存:Spring Cloud Sleuth,埋点,生成跟踪数据 》上传 》 Zipkin Server,UI界面数据展示 》数据在内存中
- 第一步:微服务中使用spring cloud sleuth埋点,把生成的数据上传到zipkin server上
-
添加依赖,哪个服务需要监控和管理就加在哪个微服务上,provider和consumer都可以
org.springframework.cloud spring-cloud-starter-sleuthorg.springframework.cloud spring-cloud-starter-zipkin -
配置文件:application.properties
#指定Zipkin server地址,接收spring cloud sleuth各个埋点生成的链路跟踪数据 spring.zipkin.base-url=http://localhost:9410 #发送跟踪数据到zipkin的类型web(http) spring.zipkin.sender.type=web #request采样的数量 默认是0.1 也即是10%,即采样10%的请求数据; #因为在分布式系统中,数据量可能会非常大,因此采样非常重要我们示例数据少最好配置为1全采样,100%的采集会稍微影响一点性能 #例如一天的请求数据为200万,采样10%,即20万的数据量 spring.sleuth.sampler.probability=1.0
-
-
第二步:启动需要监控和管理的微服务
-
要连数据库,得启动mysql
-
要连注册中心,得启动eureka
-
要连配置中心获取配置,得启动配置中心项目spring cloud config
-
使用spring cloud bus进行全局配置刷新
-
使用rabbitmq消息总线,得启动rabbitmq
-
-
-
-
第三步:调用微服务
-
最简单,使用浏览器,因为微服务都是基于http + Restful的controller
-
-
第四步:重新登录到zipkin server的首页,可看到数据
1)思想、组织
-
Elastic Search是一个分布式可扩展的实时搜索和分析引擎
-
分布式实时搜索框架
-
-
大数据领域中使用的一个组件。
-
我们暂时不想象那么复杂,我们可以把它当作一个数据库来对待,就是用来存储数据的;
2)实现技术
- Elastic Search底层
- Apache Lucene
- http + restful的请求方式,证明,可以直接使用http请求访问它并且得到json数据
3)具体:Elastic Search相关信息
GitHub:GitHub - elastic/elasticsearch: Free and Open, Distributed, RESTful Search Engine
中文下载:Download Elasticsearch | Elastic
有windows版本(学习)和linux版本(工作)
4)具体:Elastic Search解压(目录结构)、安装、启动、访问
解压下载后的压缩包即完成安装,切换到bin目录,使用双击elasticsearch.bat脚本启动;
启动后访问:http://localhost:9201,如果能返回json信息则表示安装启动OK;
(5)只官配play:zipkin + Elastic Search,链路跟踪数据持久化
- 第一步:搭建好Elastic Search环境
- 第二步:zipkin server项目中,添加依赖
io.zipkin.java zipkin-autoconfigure-storage-elasticsearch-http2.8.4 - 第三步:zipkin server项目中,application配置文件,添加配置
#问题:idea不识别,没有提示,显黄色,不影响,可运行 #原因:ES开发的spring boot Xxx.starter,没有写mater文件 #类型:固定elasticsearch zipkin.storage.type=elasticsearch #名字:对应访问它,返回的json,cluster_name属性的值 zipkin.storage.elasticsearch.cluster=elasticsearch #ES的ip和端口 zipkin.storage.elasticsearch.hosts=http://localhost:9201 #索引名称,自定义 zipkin.storage.elasticsearch.index=zipkin
-
至此 zipkin server上的跟踪数据便存储在了Elasticsearch中,当zipkin server 重启或宕机,历史数据依然不会丢失;
spring cloud stream
spring cloud getaway
spring cloud sso(单点登录)
spring cloud nacos
spring cloud 综合案例(安全,服务调服务的安全机制)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)