1、SpringBoot Actuator
1.1、简介
- 每一个微服务在云上部署以后,我们都需要对其进行监控、追踪、审计、控制等
- Actuator场景,对每个微服务快速引用即可获得生产级别的应用监控、审计等
1.2、导入 Actuator 开发场景
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
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数据库迁移。
需要一个或多个
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配置
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.****<endpointName>.enabled = true**
** ** 配置示例:
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显示情况
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<String, Object> 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、 添加后的结果
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、新增监控端点效果
版权归原作者 我的眼里只有学习 所有, 如有侵权,请联系我们删除。