目录
指标监控
1、SpringBoot Actuator
1、简介
2、Actuator Endpoint
1、最常使用的端点
总结:使用流程
3、最常用的端点
1、Health Endpoint
2、Metrics Endpoint
编辑
4、管理Endpoints
1、开启与禁用Endpoints
5、定制 Endpoint
1、定制 Health 信息
2、定制info信息
3、定制Metrics信息
4、定制Endpoint
未来每一个微服务在云上部署以后,我们都需要对其进行监控、追踪、审计、控制等。如果没有这个,那么每个微服务都需要开发自己的Actuator场景,SpringBoot就抽取了Actuator场景,使得我们每个微服务快速引用即可获得生产级别的应用监控、审计等功能。
操作流程
1.引入场景
org.springframework.boot
spring-boot-starter-actuator
2.只要访问 http://localhost:8080/actuator/**这个都是我们线上应用的监控指标功能
访问http://localhost:8080/actuator/可以显示你目前可以用的监控指标http://localhost:8080/actuator/health
health:用来监控目前的健康状况
http://localhost:8080/actuator/info
info:用来显示当前应用的详细信息
http://localhost:8080/actuator/
actuator/它后面的东西叫做Endponit
下面的Endponit都是可监控的端点
ID |
描述 |
|
暴露当前应用程序的审核事件信息。需要一个 |
|
显示应用程序中所有Spring Bean的完整列表。 |
|
暴露可用的缓存。 |
|
显示自动配置的所有条件信息,包括匹配或不匹配的原因。 |
|
显示所有 |
|
暴露Spring的属性 |
|
显示已应用的所有Flyway数据库迁移。 |
|
显示应用程序运行状况信息。 |
|
显示HTTP跟踪信息(默认情况下,最近100个HTTP请求-响应)。需要一个 |
|
显示应用程序信息。 |
|
显示Spring |
|
显示和修改应用程序中日志的配置。 |
|
显示已应用的所有Liquibase数据库迁移。需要一个或多个 |
|
显示当前应用程序的“指标”信息。 |
|
显示所有 |
|
显示应用程序中的计划任务。 |
|
允许从Spring Session支持的会话存储中检索和删除用户会话。需要使用Spring Session的基于Servlet的Web应用程序。 |
|
使应用程序正常关闭。默认禁用。 |
|
显示由 |
|
执行线程转储。 |
springboot下面有非常多的监控端点,但是这些端点不是默认全都开启的,除了shutdown是禁用的,剩下的端点是默认开启的,但是剩下的这些端点只开启的是HTTP模式
springboot底层有两种监控模式
但是我们往往使用HTTP模式来查看监控指标.
#management 是所有actuator的配置 management: auditevents: enabled: true #默认开启所有监控端点 endpoints: web: exposure: include: '*' #以web方式暴漏所有端点这样就可以查看所有相关端点的所有信息
metrics:指标监控(经常使用)
http://localhost:8080/actuator/metrics
如果想要看详细信息需要在metrics后面加上具体某一项的名字
http://localhost:8080/actuator/metrics/http.server.requests
1.引入依赖
org.springframework.boot spring-boot-starter-actuator 2.在配置文件中开启
#management 是所有actuator的配置 management: auditevents: enabled: true #默认开启所有监控端点 endpoints: web: exposure: include: '*' #以web方式暴漏所有端点
3.接下来访问具体的路径就可以
http://localhost:8080/actuator/endpoint
http://localhost:8080/actuator/beans
http://localhost:8080/actuator/configprops
http://localhost:8080/actuator/metrics
http://localhost:8080/actuator/metrics/jvm.gc.pause
比如说metrics
http://localhost:8080/actuator/endpointName/详细信息
健康检查端点,我们一般用于在云平台,平台会定时的检查应用的健康状况,我们就需要Health Endpoint可以为平台返回当前应用的一系列组件健康状况的集合。
重要的几点:
http://localhost:8080/actuator/health
显示结果为 {"status":"UP"}就是健康的
#management 是所有actuator的配置
management:
auditevents:
enabled: true #默认开启所有监控端点
endpoints:
web:
exposure:
include: '*' #以web方式暴漏所有端点
# management.endponit.端点名.xxx 对某一个端点具体的配置
endpoint: #开启具体某一个端点 开启health端点的详细信息
health:
show-details: always
所有的组件全健康才健康,有一个不健康就是 down
提供详细的、层级的、空间指标信息,这些信息可以被pull(主动推送)或者push(被动获取)方式得到;
#management 是所有actuator的配置
management:
auditevents:
enabled: false #默认开启所有监控端点 如果全都开启有些敏感端点会有危险 默认是true
#一旦关闭所有的端点都无法使用,我们可以开启某一个具体的端点
endpoints:
web:
exposure:
include: '*' #以web方式暴漏所有端点
endpoint: #开启具体某一个端点 开启health端点的详细信息
health:
show-details: always
enabled: true #开启这个端点
info: #开启info端点
enabled: true
metrics: #开启metrics端点
enabled: true
操作流程:
1.创建一个自定义类后缀必须是HealthIndicator 比如MyComHealthIndicator 这个组件名叫myCom
2.让它实现HealthIndicator这个接口,或者继承AbstractHealthIndicator这个类
3.重写doHealthCheck(Health.Builder builder)这个方法
4.把这个组件加入到容器中 @Componment
@Component 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",11); map.put("hlq","wll"); }else { builder.status(Status.DOWN); map.put("error","出错了"); map.put("message",47880); } //显示具体的详细信息 builder.withDetail("wll",290) .withDetail("hlq",666) .withDetails(map); } }
方法一 : 在配置文件里编写
#编写info里面的信息
info:
webName: boot-admin
webVision: hlq1.0
mavenProjectName: @project.artifactId@ #使用@@可以获取maven的pom文件值
mavenProjectVersion: @project.version@
方法二:
1.编写一个自定义类MyInfoInfoContributor(这个类的后缀不做要求)
2.实现InfoContributor这个接口
3.重写里面的contribute(Info.Builder builder)方法
4.把我们自定义这个类注册到容器中
@Component
public class MyInfoInfoContributor implements InfoContributor {
@Override
public void contribute(Info.Builder builder) {
builder.withDetail("hhhh","word");
}
}
1、SpringBoot支持自动适配的Metrics
server.tomcat.mbeanregistry.enabled
must be set to true
for all Tomcat metrics to be registered)2、增加定制Metrics
1.首先我们可以找我们业务逻辑的其中一个类,
2.我们在这个类的构造器传入一个MeterRegistry meterRegistry这种类型的参数
3. counter = meterRegistry.counter("myservice.method.running.counter");通过这个我们可以这个指标起一个名字
4.找到我们要监控的方法 在里面调用counter.increment();
@Controller
public class PeopleController {
Counter counter;
public PeopleController(MeterRegistry meterRegistry){
//这个是统计这个指标监控的次数
counter = meterRegistry.counter("people.controller.mybatis.request");
//meterRegistry.xxx 还有很多方法可以使用,使用流程一样
}
@Autowired
PeopleService peopleService;
@ResponseBody
@GetMapping("/mybatis")
public People people(@RequestParam ("id") Integer id){
counter.increment();
return peopleService.getPeople(id);
}
}
定制端口:
1.在我们的类上标注@Endpoint(id = "container")
然后在我们的方法上标注 @ReadOperation或者@WriteOperation
@Component
@Endpoint(id = "container")
public class DockerEndpoint {
@ReadOperation
public Map getDockerInfo(){
return Collections.singletonMap("info","docker started...");
}
@WriteOperation
private void restartDocker(){
System.out.println("docker restarted....");
}
}
6、指标监控-Boot-Admin-Server页面
1.我们新建一个web项目,名字叫springboot05-admin-server
然后导入依赖
de.codecentric spring-boot-admin-starter-server 2.7.2 注意这个版本要与应用的springboot版本保持一致
2.修改 springboot05-admin-server这个项目的端口,不要和我们应用的端口一样就行
# 应用名称 spring.application.name=springboot05-admin-server # 应用服务 WEB 访问端口 server.port=8888
3.还要在springboot05-admin-server这个项目的主配置类里面加上@EnableAdminServer注解
4.在我们boot-05-web-admin这个应用里引入依赖
de.codecentric spring-boot-admin-starter-client 2.7.2 5.在配置文件加上
#management 是所有actuator的配置 management: auditevents: enabled: true #默认开启所有监控端点 如果全都开启有些敏感端点会有危险 默认是true #一旦关闭所有的端点都无法使用,我们可以开启某一个具体的端点 endpoints: web: exposure: include: '*' #以web方式暴漏所有端点 spring boot: admin: client: url: http://localhost:8888