调用链监控
如果能跟踪每个请求,中间请求经过哪些微服务,请求耗时,网络延迟,业务逻辑耗时等。我们就能更好地分析系统瓶颈、解决系统问题。因此链路跟踪很重要。
链路追踪目的:解决错综复杂的服务调用中链路的查看。排查慢服务。
市面上链路追踪产品,大部分基于google的Dapper论文。
链路追踪要考虑的几个问题
- 探针的性能消耗。尽量不影响 服务本尊。
- 易用。开发可以很快接入,别浪费太多精力。
- 数据分析。要实时分析。维度足够。
Sleuth
Sleuth是Spring cloud的分布式跟踪解决方案。
span(跨度),基本工作单元。一次链路调用,创建一个span,span用一个64位id唯一标识。包括:id,描述,时间戳事件,spanId,span父id。
span被启动和停止时,记录了时间信息,初始化span叫:root span,它的span id和trace id相等。
trace(跟踪),一组共享“root span”的span组成的树状结构 称为 trace,trace也有一个64位ID,trace中所有span共享一个trace id。类似于一颗 span 树。
annotation(标签),annotation用来记录事件的存在,其中,核心annotation用来定义请求的开始和结束。
- CS(Client Send客户端发起请求)。客户端发起请求描述了span开始。
- SR(Server Received服务端接到请求)。服务端获得请求并准备处理它。SR-CS=网络延迟。
- SS(Server Send服务器端处理完成,并将结果发送给客户端)。表示服务器完成请求处理,响应客户端时。SS-SR=服务器处理请求的时间。
- CR(Client Received 客户端接受服务端信息)。span结束的标识。客户端接收到服务器的响应。CR-CS=客户端发出请求到服务器响应的总时间。
其实数据结构是一颗树,从root span 开始。
使用
在每个需要被监控的系统的pom中引入:
|
|
启动后,日志中可以看到类似于:[account-service,,,]
的数据,说明如下:
|
|
zipkin
zipkin是twitter开源的分布式跟踪系统。
原理收集系统的时序数据,从而追踪微服务架构中系统延时等问题。还有一个友好的界面。
由4个部分组成:Collector(采集器)、Storage(存储器)、Restful API(接口)、Web UI
原理
sleuth收集跟踪信息通过http请求发送给zipkin server,zipkin将跟踪信息存储,以及提供RESTful API接口,zipkin ui通过调用api进行数据展示。
默认内存存储,可以用mysql,ES等存储。
使用
在每个需要被监控的系统的pom中引入:
|
|
在每个需要监听的服务的配置文件中加入:
|
|
根据zipkin官网中的Quickstart,启动zipkin。
监控告警
使用 Spring Boot2.x Actuator 监控应用
在项目的 POM 中引入
|
|
Endpoints
可以通过/actuator
查看所有的暴露端点。
暴露配置
|
|
health端点
health端点会聚合你程序的健康指标,来检查程序的健康情况。端点公开的应用健康信息取决于:management.endpoint.health.show-details=always
show-details的值:
- never 不展示详细信息,up或者down的状态,默认配置
- when-authorized 详细信息将会展示给通过认证的用户。授权的角色可以通过 management.endpoint.health.roles配置
- always 对所有用户暴露详细信息
metrics端点
metrics端点用来返回当前应用的各类重要度量指标,比如:内存信息、线程信息、垃圾回收信息、tomcat、数据库连接池等。
调用:"http://localhost:8080/actuator/metrics/{requiredMetricName}"
获得各个指标。如:http://localhost:8080/actuator/metrics/jvm.memory.max
loggers端点
loggers 端点暴露了我们程序内部配置的所有logger的信息。
调用:http://localhost:8080/actuator/loggers
获得所有的logger信息。
可以调用对应的POST接口,修改日志级别等。
info端点
info端点可以用来展示你程序的信息。我理解过来就是一些程序的基础信息。并且你可以按照自己的需求在配置文件 application.properties中个性化配置。
beans端点
beans端点会返回Spring 容器中所有bean的别名、类型、是否单例、依赖等信息。
heapdump端点
访问:http://localhost:8080/actuator/heapdump
会自动生成一个 Jvm 的堆文件 heapdump。我们可以使用 JDK 自带的 Jvm监控工具,VisualVM 打开此文件查看内存快照。
threaddump 端点
主要展示了线程名、线程ID、线程的状态、是否等待锁资源、线程堆栈等信息。就是可能查看起来不太直观。访问:http://localhost:8080/actuator/threaddump
shutdown端点
这个端点属于操作控制类端点,可以优雅关闭 Spring Boot 应用。要使用这个功能首先需要在配置文件中开启:
由于 shutdown 接口默认只支持 POST 请求。
env端点
获取应用所有可用的环境属性报告
mappings端点
获取应用所有Spring Web的控制器映射关系报告
configprops端点
获取应用中配置的属性信息报告
SpringCloud Admin健康检查
Admin客户端
在要被监控的客户端添加pom引用:
|
|
在配置文件中如下配置:
|
|
Admin服务端
新建一个项目,引入:
|
|
然后添加注解@EnableAdminServer