如何使用 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引入依赖即可使用;//需要注意一些配置 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 org.springframework.boot spring-boot-starter-actuator
//访问查看所有功能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