SpringBoot实现项⽬健康检查与监控
Spring Boot 最主要的特性就是AutoConfig(⾃动配置),⽽对于我们这些使⽤者来说也就是各种starter,
Spring Boot-Actuator 也提供了starter,为我们⾃动配置,在使⽤上我们只需要添加starter到我们的依赖中,然后启动项⽬即可。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
常⽤Endpoint
Spring Boot-actuator,提供了许多有⽤的EndPoint,对Spring Boot应⽤提供各种监控,下⾯说⼀下我常⽤的
EndPoint:
/health 应⽤的健康状态
/configprops 获取应⽤的配置信息,因为Spring Boot 可能发布时是单独的Jar包,配置⽂件可能包含其中,当我们需要检查配置⽂件时可以使⽤ ConfigpropsEndPoint 进⾏查看⼀些配置是否正确。
/trace 最近⼏次的http请求信息
HealthEndPoint
{
"status": "UP",
"diskSpace": {
"status": "UP",
"total": 398458875904,
"free": 315106918400,
"threshold": 10485760
},
"db": {
"status": "UP",
"database": "MySQL",
"hello": 1
}
}
其实看 Spring Boot-actuator 源码,你会发现 HealthEndPoint 提供的信息不仅限于
此,org.springframework.boot.actuate.health 包下你会发现 ElasticsearchHealthIndicator、RedisHealthIndicator、RabbitHealthIndicator 等
也就是 HealthEndPoint 也提供 ES, Redis 等组件的健康信息。
⾃定义Indicator 扩展 HealthEndPoint
看源码其实磁盘和数据库健康信息就是 DiskSpaceHealthIndicator、DataSourceHealthIndicator 来实现的,当我们对⼀些我们⾃定义的组件进⾏监控时,我们也可以实现个Indicator :
@Component
public class User implements HealthIndicator {
/**
* user监控访问: localhost:8088/health
*
* @return ⾃定义Health监控
*/
@Override
public Health health() {
return new Health.Builder().withDetail("usercount", 10) //⾃定义监控内容
.withDetail("userstatus", "up").up().build();
}
}
{
"status": "UP",
"user": {
"status": "UP",
"usercount": 10,
"userstatus": "up"
},
"diskSpace": {
"status": "UP",
"total": 398458875904,
"free": 315097989120,
"threshold": 10485760
},
"db": {
"status": "UP",
"database": "MySQL",
"hello": 1
}
}
⾃定义EndPoint
其实除了扩展 HealthEndPoint 来添加⼀些健康检查,我们也可以⾃定定义⼀些EndPoint 来提供程序运⾏时⼀些信息的展⽰:
@Configuration
public class EndPointAutoConfig {
@Bean
public Endpoint<Map<String, Object>> customEndPoint() {
return new SystemEndPoint();
}
}
@ConfigurationProperties(prefix="endpoints.customsystem")
public class SystemEndPoint extends AbstractEndpoint<Map<String, Object>> {
public SystemEndPoint(){
super("customsystem");
}
@Override
public Map<String, Object> invoke() {
Map<String,Object> result= new HashMap<>();
Map<String, String> map = v();
result.put("username",("USERNAME"));
result.put("computername",("COMPUTERNAME"));
result.put("userdomain",("USERDOMAIN"));
return result;
}
}
{
"username": "xxx",
"userdomain": "DESKTOP-6EAN1H4",
"computername": "DESKTOP-6EAN1H4"
}
我们在为Spring Boot应⽤添加actuator后,期望的health接⼝返回结果应该是类似下⾯的结果:
{
status: "UP",
diskSpace:
{
status: "UP",
total: 250182889472,
free: 31169568768,
threshold: 10485760
},
db:
{
status: "UP",
database: "H2",
hello: 1
}
}
如果只是返回了status
{
spring framework组件status: "UP"
}
则需要为应⽤新增配置,以yml配置⽂件为例,需要添加如下配置:
management:
security:
enabled: false
endpoints:
health:
sensitive: false
总结
以上所述是⼩编给⼤家介绍的SpringBoot实现项⽬健康检查与监控,希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。在此也⾮常感谢⼤家对⽹站的⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。