Actuator模块监控springboot信息

概要

Spring Boot包含许多其他功能,可在您将应用程序投入生产时帮助您监视和管理应用程序。您可以选择使用HTTP端点或JMX管理和监视应用程序。审核,运行状况和指标收集也可以自动应用于您的应用程序

maven依赖

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

查看监控

添加依赖后启动项目控制台看到如下信息

1
2020-04-25 13:35:12.836  INFO 748 --- [  restartedMain] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 2 endpoint(s) beneath base path '/actuator'

在《Spring Cloud 微服务 入门、实战、进阶》这本书里描述说控制台输出了一系列的监控 路径(url)。可能是不同版本差异造成的吧。


我们通过端口+/actuator 接口(端点)得到下面的响应。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
"_links": {
"self": {
"href": "http://localhost:8082/actuator",
"templated": false
},
"health-component": {
"href": "http://localhost:8082/actuator/health/{component}",
"templated": true
},
"health": {
"href": "http://localhost:8082/actuator/health",
"templated": false
},
"health-component-instance": {
"href": "http://localhost:8082/actuator/health/{component}/{instance}",
"templated": true
},
"info": {
"href": "http://localhost:8082/actuator/info",
"templated": false
}
}
}

我们再来访问下这个端点

1
http://localhost:8082/actuator/health

得到响应:

1
2
3
{
"status": "UP"
}

在actuator中,status状态 其中up表示健康,down表示不健康

可以通过如下配置展示更多信息:

1
2
#显示健康详情
management.endpoint.health.show-details=always

再次请求得到响应:

1
2
3
4
5
6
7
8
9
10
11
12
13
{
"status": "UP",
"details": {
"diskSpace": {
"status": "UP",
"details": {
"total": 127718649856,
"free": 43498004480,
"threshold": 10485760
}
}
}
}

actuator的默认配置有很多端点是不暴露的我们可通过如下配置来暴露指定端点和所有端点

1
2
3
4
#暴露 configprops,和beans  使用逗号分隔
management.endpoints.web.exposure.exclude=configprops,beans
#暴露所有端点
management.endpoints.web.exposure.include=*

在spring cloud ‘全家桶’里集成不同的模块会有不同的端点,具体得参考官方文档

springboot 2.2.6 RELEASE actuator 文档地址:

1
https://docs.spring.io/spring-boot/docs/2.2.6.RELEASE/actuator-api/html/#overview

自定义actuator端点

有时候这些默认的信息并不能满足我们的业务场景与需求,我们可通过自定义添加额外信息或自定义新的端点来进行扩展。

扩展健康端点添加额外信息

添加自定义类MyHealthIndicator继承自AbstractHealthIndicator

1
2
3
4
5
6
7
8
@Component
public class MyHealthIndicator extends AbstractHealthIndicator {
@Override
protected void doHealthCheck(Health.Builder builder) throws Exception {
builder.up().withDetail("my_status","success");
// builder.down().withDetail("my_status","err");
}
}

再次请求健康端点得到响应:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
"status": "UP",
"details": {
"my": { // 我们的类名MyHealthIndicator已my开头所以这里是my
"status": "UP",
"details": {
"my_status": "success"
}
},
"diskSpace": {
"status": "UP",
"details": {
"total": 127718649856,
"free": 43498000384,
"threshold": 10485760
}
}
}
}

自定义新的端点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Component
@Endpoint(id = "user")
public class UserEndpoint {

@ReadOperation
public List<Map<String,Object>> health(){
List<Map<String,Object>> list = new ArrayList<>();
Map m = new HashMap();
m.put("username","wuzhiyong");
m.put("pwd","123456");
m.put("age",88);
list.add(m);
return list;
}
}

访问:ip:+port+/actuator/user 响应:

1
2
3
4
5
6
7
[
{
"pwd": "123456",
"age": 88,
"username": "wuzhiyong"
}
]