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

当我们访问 http://localhost:8088/health 时,可以看到 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监控 访问: http://localhost:8088/health

*

* @return 自定义Health监控

*/

@Override

public Health health() {

return new Health.Builder().withDetail("usercount", 10) //自定义监控内容

.withDetail("userstatus", "up").up().build();

}

}

这时我们再次访问: http://localhost:8088/health 这时返回的结果如下,包含了我们自定义的 User 健康信息。

{

"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 = System.getenv();

result.put("username",map.get("USERNAME"));

result.put("computername",map.get("COMPUTERNAME"));

result.put("userdomain",map.get("USERDOMAIN"));

return result;

}

}

访问 http://localhost:8088/customsystem 来查看我们自定义的EndPoint ,返回结果如下:

{

"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

{

status: "UP"

}

则需要为应用新增配置,以yml配置文件为例,需要添加如下配置:

management:

security:

enabled: false

endpoints:

health:

sensitive: false

management.endpoint.health.show-details=always

总结

以上所述是小编给大家介绍的SpringBoot实现项目健康检查与监控,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

以上是 SpringBoot实现项目健康检查与监控 的全部内容, 来源链接: utcz.com/z/319098.html

回到顶部