如何使用 Spring Boot Actuaor 实现生产就绪


实现生产就绪的几个关键点

//健康检测、暴露应用信息和指标监控。
1. 健康检测可以帮我们实现负载均衡的联动;
2. 应用信息以及 Actuaor 提供的各种端点,可以帮我们查看应用内部情况,甚至对应用的一些参数进行调整;
3. 指标监控,则有助于我们整体观察应用运行情况,帮助我们快速发现和定位问题。
//完整的应用监控体系一般由三个方面构成,包括日志 Logging、指标 Metrics 和追踪 Tracing。

健康检测

1. 传统采用 ping 的方式对应用进行探活检测并不准确;
2. 应用的关键内部或外部依赖已经离线,导致其根本无法正常工作,但其对外的 Web 端口或管理端口是可以 ping 通的;
3. 应该提供一个专有的监控检测接口,并尽可能触达一些内部组件。

暴露应用内部信息

1. 应用内部诸如线程池、内存队列等组件,往往在应用内部扮演了重要的角色,
2. 如果应用或应用框架可以对外暴露这些重要信息,并加以监控,
3. 那么就有可能在诸如 OOM 等重大问题暴露之前发现蛛丝马迹,避免出现更大的问题。

建立应用指标 Metrics 监控

1. Metrics 可以翻译为度量或者指标,指的是对于一些关键信息以可聚合的、数值的形式做定期统计,并绘制出各种趋势图表。
2. 这里的指标监控,包括两个方面:
  一是,应用内部重要组件的指标监控,比如 JVM 的一些指标、接口的 QPS 等;
  二是,应用的业务数据的监控,比如电商订单量、游戏在线人数等。

配置Spring Boot Actuator

//Spring Boot有一个Actuator模块,封装了健康检测、应用内部信息、Metrics指标等生产就绪得功能,pom引入依赖即可使用;


    org.springframework.boot
    spring-boot-starter-actuator


//需要注意一些配置
1. 不希望 Web 应用的 Actuator 管理端口和应用端口重合的话,可以使用 management.server.port 设置独立的端口;
2. Actuator 自带了很多开箱即用提供信息的端点(Endpoint),可以通过 JMX 或 Web 两种方式进行暴露;
  --  有些信息比较民兵,内置端口默认不是完全开启,通过官网查看默认值
3. 默认情况下,Actuator 的 Web 访问方式的根地址为 /actuator,可以通过 management.endpoints.web.base-path 参数进行修改;

management.server.port=45679
management.endpoints.web.exposure.include=*
management.endpoints.web.base-path=/admin

//访问查看所有功能URL http://localhost:45679/admin

全链路追踪原理

//追踪有代表性得开源系统,SkyWalking和Pinpoint,使用提供得javaagent启动Java程序杰克动态修改字节码实现各种组件改写,以加入追踪代码(类似AOP)
1. 请求进入第一个组件时,先生成一个 TraceID,作为整个调用链(Trace)的唯一标识;
2. 对于每次操作,都记录耗时和相关信息形成一个 Span 挂载到调用链上,Span 和 Span 之间同样可以形成树状关联,出现远程调用、跨系统调用的时候,把 TraceID 进行透传(比如,HTTP 调用通过请求透传,MQ 消息则通过消息透传);
3. 把这些数据汇总提交到数据库中,通过一个 UI 界面查询整个树状调用链。

//一般会把 TraceID 记录到日志中,方便实现日志和追踪的关联。

日志、指标和追踪得区别和特点

 完善的监控体系三者缺一不可,它们还可以相互配合,比如通过指标发现性能问题,通过追踪定位性能问题所在的应用和操作,最后通过日志定位出具体请求的明细参数。

原文链接:https://time.geekbang.org/column/article/231568 

相关