SpringBoot 版本为2.6.1
官网文档地址
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-actuatorartifactId>
dependency>
默认情况下通过http不能访问全部的端点,只有healthy是开放的,通过jconsole我们可以看到所有的端点信息
这里特别提一下在 2.6.1 版本中 info 端点已经不是默认开放了,官方文档截图如下
http://localhost:8080/actuator/**
**代表端点的名称如 health等
打开cmd 输入 jconsole
选择你当前启动的SpringBoot应用,直接找你项目启动类的类名即可,然后按照下图的步骤就可以看到所有端点的信息
# 表示开放http访问所有端点,然后去除env和beans
management:
endpoints:
web:
exposure:
include: "*"
exclude: "env,beans"
management:
endpoints:
enabled-by-default: false # 表示禁用所有端点,端点被禁用代表着在applicationContent中没有了这个端点,并不只是单纯的无法访问
endpoint:
info:
enabled: true # 开启info端点,
这是较为常用的一个端点,我们可以自己重写健康检查的机制,例如系统中可以对接了一些第三方的应用或服务,我们可以自己写一些方法去判断第三方服务是否正常(例如调取第三方的一个接口判断网络通信是否正常以及接口服务是否正常),最终得到一个当前系统健康状态的指标
配置文件开启查看health详细信息
management:
endpoint:
health:
enabled: true
show-details: always # 需要设置为always
继承 AbstractHealthIndicator 并重写 doHealthCheck 方法,记得要加 @Component 注解
@Component
public class ThirdServiceHealthIndicator extends AbstractHealthIndicator {
@Override
protected void doHealthCheck(Health.Builder builder) throws Exception {
// 这里省略具体判断的细节,直接返回一些信息
builder.up();
builder.status(Status.UP);
builder.withDetail("网络状态", "正常");
builder.withDetail("接口调用时长", "100ms");
}
}
访问 health 端点 http://localhost:8080/actuator/health
可以看到查询出来的信息丰富了很多之前只有 status 一项,我们自定义的health信息也有了
这里注意如果我们的类名是以 HealthIndicator 为后缀,那么展示时的名称就会去掉 HealthIndicator。否则就按照完整的类名展示
实现 InfoContributor 接口并实现 contribute 方法
记得要加 @Component 注解
@Component
public class ThirdServiceInfoContributor implements InfoContributor {
@Override
public void contribute(Info.Builder builder) {
builder.withDetail("服务名称", "阿里云")
.withDetail("版本", "1.0.0");
}
}
访问 info 端点 http://localhost:8080/actuator/info
# info 下的节点名称都是自定义的
info:
app:
encoding: "@project.build.sourceEncoding@"
java:
source: "@java.version@"
target: "@java.version@"
username: zhangsan
age: 18
注意这里的 info 和上面的 info 端点不同,访问 /actuator/info 是查询不到的,需要访问 env 端点 http://localhost:8080/actuator/env
访问 http://localhost:8080/actuator/metrics 可以看到默认就提供了很多的指标信息
我们如果想要查看某一个指标的信息,只要在路径后加上指标的名称即可
例如 http://localhost:8080/actuator/metrics/application.started.time
创建一个类,使用 @Configuration 注解标记为配置类
@Configuration(proxyBeanMethods = false)
public class MyMeterRegistryConfiguration {
@Bean
public MeterRegistryCustomizer<MeterRegistry> metricsCommonTags() {
// 添加一个名为my.visit.count的计数指标,调用 increment 就会加1
return (registry) -> registry.counter("my.visit.count", "tag1", "a", "tag2", "b")
.increment();
}
}
访问 http://localhost:8080/actuator/metrics/my.visit.count 可以看到我们定义的value 和 tags