目录
1、SpringBoot Actuator
1.1、简介
1.2、导入 Actuator 开发场景
1.3、开发场景自动导入依赖
2、SpringBoot Actuator 使用
2.1、Actuator 访问权限
2.2、Web访问权限修改
2.3、查看端点状态
3、Actuator Endpoint
3.1、默认可监控端点
3.2、Health Endpoint
3.2.1、Health EndPoint作用
3.2.2、Health EndPoint配置
3.3、Metrics Endpoint
3.3.1、Metrics Endpoint功能
4、管理Endpoints
4.1、开启与禁用Endpoints
5、定制 Endpoint
5.1、定制化health信息
5.1.1、配置Health显示情况
5.1.2、定制Health Endpoint
5.2、定制info信息
5.2.1、编写配置文件
5.2.2、 编写InfoContributor
5.3、定制Metrics信息
5.3.1、利用service层构造器,在注册中心中添加cityService.saveCity.count指标
5.3.2、在配置类中新建配置,添加指标
5.3.3、 添加后的结果
5.4、自定义新端点
5.4.1、利用 @Endpoint(id = "myservice") 注解
5.4.2、新增监控端点效果
1、SpringBoot Actuator
1.1、简介
- 每一个微服务在云上部署以后,我们都需要对其进行监控、追踪、审计、控制等
- Actuator场景,对每个微服务快速引用即可获得生产级别的应用监控、审计等
1.2、导入 Actuator 开发场景
org.springframework.boot
spring-boot-starter-actuator
1.3、开发场景自动导入依赖
- 每一个微服务在云上部署以后,我们都需要对其进行监控、追踪、审计、控制等
- Actuator场景,对每个微服务快速引用即可获得生产级别的应用监控、审计等
1.2、导入 Actuator 开发场景
org.springframework.boot
spring-boot-starter-actuator
1.3、开发场景自动导入依赖
2、SpringBoot Actuator 使用
2.1、Actuator 访问权限
在默认状态下,Web方式只能访问Health和info端点
| ID | JMX | Web |
| auditevents | Yes | No |
| beans | Yes | No |
| caches | Yes | No |
| conditions | Yes | No |
| configprops | Yes | No |
| env | Yes | No |
| flyway | Yes | No |
| health | Yes | Yes |
| heapdump | N/A | No |
| httptrace | Yes | No |
| info | Yes | Yes |
| integrationgraph | Yes | No |
| jolokia | N/A | No |
| logfile | N/A | No |
| loggers | Yes | No |
| liquibase | Yes | No |
| metrics | Yes | No |
| mappings | Yes | No |
| prometheus | N/A | No |
| scheduledtasks | Yes | No |
| sessions | Yes | No |
| shutdown | Yes | No |
| startup | Yes | No |
| threaddump | Yes | No |
2.2、Web访问权限修改
management:
endpoints:
enabled-by-default: true #暴露所有端点信息
web:
exposure:
include: '*' #以web方式暴露
2.3、查看端点状态
访问:localhost:8000/actuator 及 localhost:8000/actuator/端点名称
1)访问 localhost:8000/actuator
2)访问 localhost:8000/actuator/health
3、Actuator Endpoint
3.1、默认可监控端点
其中常用端点为:Health监控状况、Metrics运行时指标、Loggers日志记录
| ID | 描述 |
| auditevents | 暴露当前应用程序的审核事件信息。需要一个AuditEventRepository组件。 |
| beans | 显示应用程序中所有Spring Bean的完整列表。 |
| caches | 暴露可用的缓存。 |
| conditions | 显示自动配置的所有条件信息,包括匹配或不匹配的原因。 |
| configprops | 显示所有@ConfigurationProperties。 |
| env | 暴露Spring的属性ConfigurableEnvironment |
| flyway | 显示已应用的所有Flyway数据库迁移。 |
| health | 显示应用程序运行状况信息。 |
| httptrace | 显示HTTP跟踪信息(默认情况下,最近100个HTTP请求-响应)。需要一个HttpTraceRepository组件。 |
| info | 显示应用程序信息。 |
| integrationgraph | 显示Spring integrationgraph 。需要依赖spring-integration-core。 |
| loggers | 显示和修改应用程序中日志的配置。 |
| liquibase | 显示已应用的所有Liquibase数据库迁移。需要一个或多个Liquibase组件。 |
| metrics | 显示当前应用程序的“指标”信息。 |
| mappings | 显示所有@RequestMapping路径列表。 |
| scheduledtasks | 显示应用程序中的计划任务。 |
| sessions | 允许从Spring Session支持的会话存储中检索和删除用户会话。需要使用Spring Session的基于Servlet的Web应用程序。 |
| shutdown | 使应用程序正常关闭。默认禁用。 |
| startup | 显示由ApplicationStartup收集的启动步骤数据。需要使用SpringApplication进行配置BufferingApplicationStartup。 |
| threaddump | 执行线程转储。 |
3.2、Health Endpoint
3.2.1、Health EndPoint作用
- 健康检查端点,常用于云平台,平台会定时的检查应用的健康状况。
- 需要Health Endpoint,为平台返回当前应用的一系列组件健康状况。
3.2.2、Health EndPoint配置
- 健康检查端点,常用于云平台,平台会定时的检查应用的健康状况。
- 需要Health Endpoint,为平台返回当前应用的一系列组件健康状况。
3.2.2、Health EndPoint配置
1)Health EndPoint默认显示较少的信息。
2)设置Health 显示情况
endpoint:
health:
#设置health节点显示详细信息,默认为不显示详细信息
show-details: always
3)修改后显示信息
3.3、Metrics Endpoint
3.3.1、Metrics Endpoint功能
- 提供详细的、层级的、空间指标信息
- 提供详细的、层级的、空间指标信息
4、管理Endpoints
4.1、开启与禁用Endpoints
1)默认所有的Endpoint除过shutdown都是开启的
2)需要开启或者禁用某个Endpoint:
配置模式: management.endpoint.
配置示例:
management:
endpoint:
beans:
enabled: true
3)禁用所有的Endpoint然后手动开启指定的Endpoint
management:
endpoints:
enabled-by-default: false
endpoint:
beans:
enabled: true
health:
enabled: true
5、定制 Endpoint
5.1、定制化health信息
5.1.1、配置Health显示情况
5.1.1、配置Health显示情况
Health Endpoint详细界面显示配置
management:
health:
enabled: true
show-details: always #总是显示详细信息。可显示每个模块的状态信息
5.1.2、定制Health Endpoint
添加信息:
1)继承 AbstractHealthIndicator 类
2)定义参数 Health.Builder builder
3)向参数 builder 中添加状态及相关信息
@Component
//类名截去HealthIndicator后,为显示时的组件名
public class MyComHealthIndicator extends AbstractHealthIndicator {
//真实的检查方法
@Override
protected void doHealthCheck(Health.Builder builder) throws Exception {
// 获取链接进行测试
Map map = new HashMap<>();
//检查完成
if (1 == 1) {
//健康
builder.status(Status.UP);
map.put("count", 1);
} else {
//不健康
builder.status(Status.OUT_OF_SERVICE);
map.put("err", "连接超时");
map.put("time", 3000);
}
builder.withDetail("code", 100)
.withDetails(map);
}
}
查看Health Endpoint信息:
成功信息:
失败信息:
5.2、定制info信息
两种定制方式
5.2.1、编写配置文件
(笔者springboot版本为2.6.6,使用配置文件未成功)
info: appName: boot-admin version: 2.0.1 mavenProjectName: @project.artifactId@ #使用@@可以获取maven的pom文件值 mavenProjectVersion: @project.version@
5.2.2、 编写InfoContributor
1)继承 public class ExampleInfoContributor implements InfoContributor
2)定义 Info.Builder builder 参数
3)向builder中添加参数信息
@Component
public class ExampleInfoContributor implements InfoContributor {
@Override
public void contribute(Info.Builder builder) {
builder.withDetail("msg", "你好")
.withDetail("hello", "uclass")
.withDetails(Collections.singletonMap("key", "value"));
}
}
5.3、定制Metrics信息
5.3.1、利用service层构造器,在注册中心中添加cityService.saveCity.count指标
@Service
public class CityServiceImpl implements CityServices {
@Autowired
CityMapper cityMapper;
Counter counter;
//利用构造器,在注册中心中添加cityService.saveCity.count指标
public CityServiceImpl(MeterRegistry meterRegistry) {
//指标中心注册新的指标项
counter = meterRegistry.counter("cityService.saveCity.count");
}
public void saveCity(City city) {
counter.increment();
cityMapper.insertCity(city);
}
}
5.3.2、在配置类中新建配置,添加指标
@ServletComponentScan(basePackages = "com.uclass.thymeleaf")
@Configuration
public class AdminWebConfig implements WebMvcConfigurer {
@Bean
MeterBinder queueSize(Queue queue) {
return (registry) -> Gauge.builder("queueSize", queue::size).register(registry);
}
}
//利用构造器,在注册中心中添加cityService.saveCity.count指标
public CityServiceImpl(MeterRegistry meterRegistry) {
//指标中心注册新的指标项
counter = meterRegistry.counter("cityService.saveCity.count");
}
5.3.3、 添加后的结果
@Service
public class CityServiceImpl implements CityServices {
@Autowired
CityMapper cityMapper;
Counter counter;
//利用构造器,在注册中心中添加cityService.saveCity.count指标
public CityServiceImpl(MeterRegistry meterRegistry) {
//指标中心注册新的指标项
counter = meterRegistry.counter("cityService.saveCity.count");
}
public void saveCity(City city) {
counter.increment();
cityMapper.insertCity(city);
}
}
5.3.2、在配置类中新建配置,添加指标
@ServletComponentScan(basePackages = "com.uclass.thymeleaf")
@Configuration
public class AdminWebConfig implements WebMvcConfigurer {
@Bean
MeterBinder queueSize(Queue queue) {
return (registry) -> Gauge.builder("queueSize", queue::size).register(registry);
}
}
//利用构造器,在注册中心中添加cityService.saveCity.count指标
public CityServiceImpl(MeterRegistry meterRegistry) {
//指标中心注册新的指标项
counter = meterRegistry.counter("cityService.saveCity.count");
}
5.3.3、 添加后的结果
5.4、自定义新端点
5.4.1、利用 @Endpoint(id = "myservice") 注解
- id属性代表新增的端点名称
- 利用@ReadOperation @WritOperation注解,在端点中添加信息
@Component
@Endpoint(id = "myservice")
public class MyServiceEndPoint {
@ReadOperation
public Map getDockerInfo () {
//端点的读操作
return Collections.singletonMap("dockerInfo", "docker start...");
}
@WriteOperation
private void restartDocker(){
System.out.println("docker restarted....");
}
}
5.4.2、新增监控端点效果
- id属性代表新增的端点名称
- 利用@ReadOperation @WritOperation注解,在端点中添加信息
@Component
@Endpoint(id = "myservice")
public class MyServiceEndPoint {
@ReadOperation
public Map getDockerInfo () {
//端点的读操作
return Collections.singletonMap("dockerInfo", "docker start...");
}
@WriteOperation
private void restartDocker(){
System.out.println("docker restarted....");
}
}



