在企业级的应用中,监控往往至关重要,监控可以帮助我们预防故障,预测变化趋势,在达到阈值的时候报警,为排查生产问题提供更多的信息。如果我们不知道我们程序的运行情况,当线上系统出现了事故再去排查就需要花费更多的时间,如果能提前监控,就能早做准备,以免出了事故之后乱了手脚,当然也避免不了系统不产生一点事故,但是能减少系统事故的产生。同时也能看到系统问题,早做优化,避免更大的事故发生。
1. Spring Boot Actuator
根据官网介绍,Spring Boot包含了很多附加功能帮助我们监控和管理我们的应用,可以使用HTTP或者JMX等方式通过端点(endpoint)获取应用的健康状态以及其他指标收集。
Spring Boot Actuator模块就是Spring Boot提供的集成了上面所述的监控和管理的功能。像Spring Boot其他模块一样开箱即用,非常方便,通过Actuator就可以使用HTTP或者JMX来监控我们的应用。
JMX(Java Management Extensions):Java平台的管理和监控接口,任何程序只要按JMX规范访问这个接口,就可以获取所有管理与监控信息。
下面简单介绍下Spring Boot Actuator是如何使用的,具体的使用方法见官方文档,官方的文档是永远值得相信的。
1.1 添加依赖
如果使用maven管理,则是:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
如果使用Gradle,则是下面这样的:
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-actuator'
}
1.2 开启端点
Spring Boot中监控应用或者与应用交互都是通过端点(endpoint
)进行的,Spring Boot提供了非常多的原生端点,比如health
,可以帮助我们监控应用的监控状态(是否可用),同时可以添加自定义的端点。每个端点都可以单独设置是否开启,并通过HTTP或者JMX暴露给外部系统。如果选择HTTP方式,则URL的前缀一般是/actuator
,比如health
的url地址就是/actuator/health
。
默认情况下,除了shutdown
(让系统优雅的关闭) ,其他端点默认是开启的。我们可以通过management.endpoint.<id>.enabled
设置某个端口的状态,比如开启shutdown端口。
management.endpoint.shutdown.enabled=true
1.3 暴露端点
开启端点后还必须暴露端点给HTTP或者JMX才能正常使用,但是端口可能包含一些敏感的数据,所以Spring Boot的原生端口默认只支持HTTP或者JMX,比如shutdown
端口默认只支持JMX,