目录
前言
任何一个服务如果没有监控,那就是两眼一抹黑,无法知道当前服务的运行情况,也就无法对可能出现的异常状况进行很好的处理,所以对任意一个服务来说,监控都是必不可少的。
就目前而言,大部分微服务应用都是基于 SpringBoot 来构建,所以了解 SpringBoot 的监控特性是非常有必要的,而 SpringBoot 也提供了一些特性来帮助我们监控应用。
本文基于 SpringBoot 2.3.1.RELEASE 版本演示。
SpringBoot 监控
SpringBoot 中的监控可以分为 HTTP 端点和 JMX 两种方式来监控当前应用的运行状况和指标收集
HTTP Endpoints 监控
执行器端点允许您监视应用程序并与之交互。SpringBoot 包括许多内置的端点,并允许我们添加自己的端点。可以通过 HTTP 或 JMX 启用或禁用每个端点,并公开(使其可以远程访问)。每个端点都有一个唯一的 id,访问时可以通过如下地址进行访问:http:ip:port/{id}(SpringBoot 1.x ),而在 SpringBoot 2.x 版本中,默认新增了一个 /actuator 作为基本路,访问地址则对应为 :http:ip:port/actuator/{id}。
使用 HTTP 监控非常简单,在 SpringBoot 项目中,引入如下依赖:
org.springframework.boot
spring-boot-starter-actuator
默认就可以通过地址 http:localhost:8080/actuator/health,访问之后得到如下结果:
SpringBoot 中提供了非常多的默认端点监控,但是出于安全考虑,默认情况下有些端点并不是开启状态,如 shutdown 端点就是默认关闭的。
内置端点
SpringBoot 中默认提供的常用内置端点如下:
端点 id
描述
auditevents
公开当前应用程序的审计事件信息,需要 AuditEventRepository Bean。
beans
展示程序中所有的 Bean。
caches
公开可用的缓存。
conditions
展示配置类或者自动装配类中的条件,以及它们匹配或者不匹配的原因。
configprops
显示所有 @ConfigurationProperties 中的配置属性。
env
显示 ConfigurableEnvironment 中的所有环境。
health
显示应用程序运行状况信息。
httptrace
显示 HTTP 跟踪信息(默认情况下统计最近 100 次请求),需要 HttpTraceRepository Bean。
info
显示任意程序信息。
integrationgraph
显示 Spring 集成图,需要依赖 spring-integration-core。
loggers
展示和修改应用中的 loggers 配置。
metrics
展示当前应用监控指标的度量。
mappings
展示所有 @RequestMapping 路径。
scheduledtasks
展示应用中的所有定时任务信息。
sessions
允许从 Spring 会话支持的会话存储中检索和删除用户会话。需要使用基于 Spring Session web应用程序。
shutdown
优雅的关闭程序,默认禁止了该端点的访问。
虽然说这里的大部分端点都是默认开启的,但是默认暴露(允许对外访问)的只有 health 和 info 端点,所以如果需要允许端点对外暴露,可以通过如下配置(如果想要暴露所有的端点,则可以直接配置 "*" ):
management:
endpoints:
web:
exposure:
include: [health,info,mappings] //或者直接配置 "*"
另外,开启或禁用某一个端点,也可以通过通过如下配置进行动态控制:
management.endpoint..enabled=true
接下来我们挑选几个重点的端点来介绍一下。
health 端点
health 断点默认只是展示当前应用健康信息,但是我