Spring Boot 最主要的特性就是AutoConfig(自動(dòng)配置),而對(duì)于我們這些使用者來說也就是各種starter,
Spring Boot-Actuator 也提供了starter,為我們自動(dòng)配置,在使用上我們只需要添加starter到我們的依賴中,然后啟動(dòng)項(xiàng)目即可。
1
2
3
4
|
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> |
常用Endpoint
Spring Boot-actuator,提供了許多有用的EndPoint,對(duì)Spring Boot應(yīng)用提供各種監(jiān)控,下面說一下我常用的EndPoint:
/health 應(yīng)用的健康狀態(tài)
/configprops 獲取應(yīng)用的配置信息,因?yàn)镾pring Boot 可能發(fā)布時(shí)是單獨(dú)的Jar包,配置文件可能包含其中, 當(dāng)我們需要檢查配置文件時(shí)可以使用 ConfigpropsEndPoint 進(jìn)行查看一些配置是否正確。
/trace 最近幾次的http請(qǐng)求信息
HealthEndPoint
當(dāng)我們?cè)L問 http://localhost:8088/health 時(shí),可以看到 HealthEndPoint 給我們提供默認(rèn)的監(jiān)控結(jié)果,包含 磁盤檢測(cè)和數(shù)據(jù)庫(kù)檢測(cè)。
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 } } |
其實(shí)看 Spring Boot-actuator 源碼,你會(huì)發(fā)現(xiàn) HealthEndPoint 提供的信息不僅限于此,org.springframework.boot.actuate.health 包下 你會(huì)發(fā)現(xiàn) ElasticsearchHealthIndicator、RedisHealthIndicator、RabbitHealthIndicator 等
也就是 HealthEndPoint 也提供 ES, Redis 等組件的健康信息。
自定義Indicator 擴(kuò)展 HealthEndPoint
看源碼 其實(shí) 磁盤和數(shù)據(jù)庫(kù)健康信息就是 DiskSpaceHealthIndicator、DataSourceHealthIndicator 來實(shí)現(xiàn)的,當(dāng)我們對(duì)一些我們自定義的組件進(jìn)行監(jiān)控時(shí), 我們也可以實(shí)現(xiàn)個(gè)Indicator :
1
2
3
4
5
6
7
8
9
10
11
12
13
|
@Component public class User implements HealthIndicator { /** * user監(jiān)控 訪問: http://localhost:8088/health * * @return 自定義Health監(jiān)控 */ @Override public Health health() { return new Health.Builder().withDetail( "usercount" , 10 ) //自定義監(jiān)控內(nèi)容 .withDetail( "userstatus" , "up" ).up().build(); } } |
這時(shí)我們?cè)俅卧L問: http://localhost:8088/health 這時(shí)返回的結(jié)果如下,包含了我們自定義的 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
其實(shí)除了擴(kuò)展 HealthEndPoint 來添加一些健康檢查, 我們也可以自定定義一些EndPoint 來提供程序運(yùn)行時(shí)一些信息的展示:
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 ,返回結(jié)果如下:
1
2
3
4
5
|
{ "username" : "xxx" , "userdomain" : "DESKTOP-6EAN1H4" , "computername" : "DESKTOP-6EAN1H4" } |
我們?cè)跒镾pring Boot應(yīng)用添加actuator后,期望的health接口返回結(jié)果應(yīng)該是類似下面的結(jié)果:
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" } |
則需要為應(yīng)用新增配置,以yml配置文件為例,需要添加如下配置:
1
2
3
4
5
6
|
management: security: enabled: false endpoints: health: sensitive: false |
1
|
management.endpoint.health.show-details=always |
總結(jié)
以上所述是小編給大家介紹的SpringBoot實(shí)現(xiàn)項(xiàng)目健康檢查與監(jiān)控,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)服務(wù)器之家網(wǎng)站的支持!
原文鏈接:https://www.jianshu.com/p/30d3521fbc28