Spring Boot 最主要的特性就是AutoConfig(自动配置),而对于我们这些使用者来说也就是各种starter,
Spring Boot-Actuator 也提供了starter,为我们自动配置,在使用上我们只需要添加starter到我们的依赖中,然后启动项目即可。
1
2
3
4
|
<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 给我们提供默认的监控结果,包含 磁盘检测和数据库检测。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
{
"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 :
1
2
3
4
5
6
7
8
9
10
11
12
13
|
@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 健康信息。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
{
"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 来提供程序运行时一些信息的展示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
@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 ,返回结果如下:
1
2
3
4
5
|
{
"username" : "xxx" ,
"userdomain" : "DESKTOP-6EAN1H4" ,
"computername" : "DESKTOP-6EAN1H4"
}
|
我们在为Spring Boot应用添加actuator后,期望的health接口返回结果应该是类似下面的结果:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
{
status: "UP" ,
diskSpace:
{
status: "UP" ,
total: 250182889472 ,
free: 31169568768 ,
threshold: 10485760
},
db:
{
status: "UP" ,
database: "H2" ,
hello: 1
}
}
|
如果只是返回了status
1
2
3
|
{
status: "UP"
}
|
则需要为应用新增配置,以yml配置文件为例,需要添加如下配置:
1
2
3
4
5
6
|
management:
security:
enabled: false
endpoints:
health:
sensitive: false
|
1
|
management.endpoint.health.show-details=always
|
总结
以上所述是小编给大家介绍的SpringBoot实现项目健康检查与监控,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
原文链接:https://www.jianshu.com/p/30d3521fbc28