链路追踪
1 概念
分布式计算八大误区
网络可靠。
延迟为零。
带宽无限。
网络绝对安全。
网络拓扑不会改变。
必须有一名管理员。
传输成本为零。
网络同质化。(操作系统-协议)
链路追踪的必要性
如果能跟踪每个请求-中间请求经过哪些微服务-请求耗时-网络延迟-业务逻辑耗时等。我们就能更好地分析系统瓶颈、解决系统问题。因此链路跟踪很重要。
> 《链路追踪》看看微服务之熵。
我们自己思考解决方案:在调用前后加时间戳。捕获异常。
链路追踪目的:解决错综复杂的服务调用中链路的查看。排查慢服务。
市面上链路追踪产品-大部分基于google的Dapper论文。
``sh
zipkin,twitter开源的。是严格按照谷歌的Dapper论文来的。pinpoint 韩国的 Naver公司的。Cat 美团点评的EagleEye 淘宝的
`
链路追踪要考虑的几个问题
Sleuth简介
Sleuth是Spring cloud的分布式跟踪解决方案。
span用一个64位id唯一标识。包括:id-描述-时间戳事件-spanId,span父id。
span被启动和停止时-记录了时间信息-初始化span叫:root span-它的span id和trace id相等。
其实数据结构是一颗树-从root span 开始。
> 《链路树演示》
2 使用
#### Sleuth单独
每个需要监控的系统
`sh
org.springframework.cloud spring-cloud-starter-sleuth
`
测试点:
`sh
[api-driver,1a409c98e7a3cdbf,1a409c98e7a3cdbf,true] [服务名称-traceId(一条请求调用链中 唯一ID)-spanID(基本的工作单元-获取数据等)-是否让zipkin收集和展示此信息]看下游[service-sms,1a409c98e7a3cdbf,b3d93470b5cf8434,true]traceId- 是一样的。服务名必须得写。
`
#### zipkin
上面拍错看日志-很原始。刀耕火种-加入利器 zipkin。
zipkin是twitter开源的分布式跟踪系统。
原理收集系统的时序数据-从而追踪微服务架构中系统延时等问题。还有一个友好的界面。
由4个部分组成:
Collector、Storage、Restful API、Web UI组成
采集器-存储器-接口-UI。
原理:
sleuth收集跟踪信息通过http请求发送给zipkin server-zipkin将跟踪信息存储-以及提供RESTful API接口-zipkin ui通过调用api进行数据展示。
默认内存存储-可以用mysql-ES等存储。
操作步骤:
`sh
org.springframework.cloud spring-cloud-starter-zipkin
`
`sh
spring: #zipkin zipkin: base-url: http://localhost:9411/ #采样比例1 sleuth: sampler: rate: 1
`
`sh
jar包下载:curl -sSL https://zipkin.io/quickstart.sh | bash -s我放到了 目录:C:githubonline-taxi-demo 下面。java -jar zipkin.jar或者docker:docker run -d -p 9411:9411 openzipkin/zipkin
`
测试点:
访问zipkin:http://localhost:9411/zipkin/
启动:eureka7900-service-sms 8002-api-driver 9002
发起一次 yapi ->api-driver->司机发送验证码。
观察zip界面-点查找-点依赖。
看查找下的时间。
再制造一次熔断-看看zipkin。停止service-sms-访问。会看到变红。
zipkin:最好和rabbitmq-mysql配合使用。
健康检查
使用
`sh
server端: de.codecentric spring-boot-admin-starter-server de.codecentric spring-boot-admin-server-ui
`
`sh
pom: org.springframework.boot spring-boot-starter-actuatoryml:management: endpoints: web: exposure: #yml加双引号-properties不用加 include: "*" health: ##默认是never show-details: ALWAYS enabled: true
`
`sh
http://localhost:6010/root/root
`
小插曲 正六边形算法。
邮件监控 -在admin组件中。
`sh
org.springframework.boot spring-boot-starter-mail
`
`sh
spring: application: name: cloud-admin security: user: name: root password: root # 邮件设置 mail: host: smtp.qq.com username: 单纯QQ号 password: xxxxxxx授权码 properties: mail: smpt: auth: true starttls: enable: true required: true#收件邮箱spring.boot.admin.notify.mail.to: 2634982208@qq.com # 发件邮箱spring.boot.admin.notify.mail.from: xxxxxxx@qq.com
``