当前位置: 首页 > article >正文

SpringBoot-指标监控

指标监控

1、SpringBoot Actuator

1、简介

未来每一个微服务在云上部署以后,我们都需要对其进行监控、追踪、审计、控制等。SpringBoot就抽取了Actuator场景,使得我们每个微服务快速引用即可获得生产级别的应用监控、审计等功能。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

2、使用

  • 引入场景
  • 访问 http://localhost:8080/actuator

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gCEr0pjN-1653029896841)(C:\Users\周畅\AppData\Roaming\Typora\typora-user-images\image-20220518165357258.png)]

  • 暴露所有监控信息为HTTP
management:endpoints:enabled-by-default: true #暴露所有端点信息web:exposure:include: '*'  #以web方式暴露
  • 测试

http://localhost:8080/actuator/beans

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PZfGxFGR-1653029896842)(C:\Users\周畅\AppData\Roaming\Typora\typora-user-images\image-20220518165411510.png)]

查看某个属性的监控信息:http://localhost:8080/actuator/属性名/具体路径

2、Actuator Endpoint

1、最常使用的端点

ID描述
auditevents暴露当前应用程序的审核事件信息。需要一个AuditEventRepository组件
bean显示应用程序中所有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执行线程转储。

如果您的应用程序是Web应用程序(Spring MVC,Spring WebFlux或Jersey),则可以使用以下附加端点:

ID描述
heapdump返回hprof堆转储文件。
jolokia通过HTTP暴露JMX bean(需要引入Jolokia,不适用于WebFlux)。需要引入依赖jolokia-core
logfile返回日志文件的内容(如果已设置logging.file.name或logging.file.path属性)。支持使用HTTPRange标头来检索部分日志文件的内容。
prometheus以Prometheus服务器可以抓取的格式公开指标。需要依赖micrometer-registry-prometheus

最常用的Endpoint

  • Health:监控状况
  • Metrics:运行时指标
  • Loggers:日志记录,方便我们追踪错误

2、Health Endpoint

健康检查端点,我们一般用于在云平台,平台会定时的检查应用的健康状况,我们就需要Health Endpoint可以为平台返回当前应用的一系列组件健康状况的集合。

重要的几点:

  • health endpoint返回的结果,应该是一系列健康检查后的一个汇总报告
  • 很多的健康检查默认已经自动配置好了,比如:数据库、redis等
  • 可以很容易的添加自定义的健康检查机制
  • 如果觉得显示的状态信息过于简单,可以在配置文件中对health endpoint进行配置

查看当前应用的健康状况: localhost:8080/actuator/health

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VZoOWY31-1653029896843)(C:\Users\周畅\AppData\Roaming\Typora\typora-user-images\image-20220518165901875.png)]

#management.endpoints       -> 配置所有的endpoint
#management.endpoint.xxx    -> 配置指定的endpoint端点management:endpoints:                        enabled-by-default: true        #默认开启所有的监控端点web:exposure:include: '*'                #以web方式暴露端点endpoint:                         health:show-details: always          #总是显示详细信息

配置完成后,再次查看应用健康状况:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DDNxdpCU-1653029896843)(C:\Users\周畅\AppData\Roaming\Typora\typora-user-images\image-20220518170954438.png)]

3、Metrics Endpoint

提供详细的、层级的、空间指标信息,这些信息可以被pull(主动推送)或者push(被动获取)方式得到;

  • 通过Metrics对接多种监控系统
  • 简化核心Metrics开发
  • 添加自定义Metrics或者扩展已有Metrics
management:endpoints:enabled-by-default: true        #默认开启所有的监控端点web:exposure:include: '*'                #以web方式暴露端点endpoint:health:show-details: always          #总是显示详细信息enable: truebeans:enabled: trueinfo:enable: truemetrics:enable: true

访问:localhost:8080/actuator/metrics

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aUPKnmsE-1653029896844)(C:\Users\周畅\AppData\Roaming\Typora\typora-user-images\image-20220518194957542.png)]

3、管理Endpoints

1、开启与禁用Endpoints

  • 默认所有的Endpoint除过shutdown都是开启的。
  • 需要开启或者禁用某个Endpoint。配置模式为 management.endpoint.${endpointName}.enabled = true
  endpoint:health:show-details: always          #总是显示详细信息enable: truebeans:enabled: trueinfo:enable: truemetrics:enable: true
  • 或者禁用所有的Endpoint然后手动开启指定的Endpoint
management:endpoints:enabled-by-default: false        #默认关闭所有的监控端点web:exposure:include: '*'                #以web方式暴露端点endpoint:health:show-details: always          #总是显示详细信息enable: truebeans:enabled: trueinfo:enable: truemetrics:enable: true

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KpfdD5ZS-1653029896844)(C:\Users\周畅\AppData\Roaming\Typora\typora-user-images\image-20220518172552765.png)]

2、暴露Endpoints

支持的暴露方式

  • HTTP:默认只暴露healthinfo Endpoint
  • JMX:默认暴露所有Endpoint
  • 除过health和info,剩下的Endpoint都应该进行保护访问。如果引入SpringSecurity,则会默认配置安全访问规则
IDJMXWeb
auditeventsYesNo
beansYesNo
cachesYesNo
conditionsYesNo
configpropsYesNo
envYesNo
flywayYesNo
healthYesYes
heapdumpN/ANo
httptraceYesNo
infoYesYes
integrationgraphYesNo
jolokiaN/ANo
logfileN/ANo
loggersYesNo
liquibaseYesNo
metricsYesNo
mappingsYesNo
prometheusN/ANo
scheduledtasksYesNo
sessionsYesNo
shutdownYesNo
startupYesNo
threaddumpYesNo

4、定制 Endpoint

1、定制 Health 信息

@Component
public class MyHealthIndicator extends AbstractHealthIndicator {@Overrideprotected void doHealthCheck(Health.Builder builder) throws Exception {Map<String,Object> msg = new HashMap<>();if(1 == 1){ //通过判断来设置应用进程的健康状态
//            builder.up();msg.put("msg","该应用进程无错误");builder.status(Status.UP);}else{msg.put("msg","应用进程出错");builder.status(Status.DOWN);}builder.withDetail("code",100).withDetails(msg);}
}

访问:localhost:8080/actuator/health

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WIa1Qqdq-1653029896845)(C:\Users\周畅\AppData\Roaming\Typora\typora-user-images\image-20220518173455004.png)]

@Component
public class MyHealthIndicator extends AbstractHealthIndicator {@Overrideprotected void doHealthCheck(Health.Builder builder) throws Exception {Map<String,Object> msg = new HashMap<>();if(1 == 2){ //通过判断来设置应用进程的健康状态
//            builder.up();msg.put("msg","该应用进程无错误");builder.status(Status.UP);}else{msg.put("msg","应用进程出错");builder.status(Status.DOWN);}builder.withDetail("code",100).withDetails(msg);}
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v6xehbZU-1653029896846)(C:\Users\周畅\AppData\Roaming\Typora\typora-user-images\image-20220518173539389.png)]

2、定制info信息

常用两种方式

1、编写配置文件
management:endpoints:enabled-by-default: true        #默认开启所有的监控端点web:exposure:include: '*'                #以web方式暴露端点endpoint:health:show-details: always          #总是显示详细信息enable: truebeans:enabled: trueinfo:enable: truemetrics:enable: trueinfo:appName: testInfo                       #直接将信息写死currentTime: 19:37mavenProjectName: @project.name@        #通过@@获取动态pom文件中的信息mavenProjectVersion: @project.version@
2、编写InfoContributor
@Component
public class MyInfoContributor implements InfoContributor {@Overridepublic void contribute(Info.Builder builder) {builder.withDetail("AppName","SpringBoot-03").withDetail("example",Collections.singletonMap("Time","19:36"));}
}

访问:localhost:8080/actuator/info

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BJI0MWch-1653029896847)(C:\Users\周畅\AppData\Roaming\Typora\typora-user-images\image-20220518194825113.png)]

3、定制Metrics信息

1、SpringBoot支持自动适配的Metrics
  • JVM的指标监控

    • 各种内存和缓冲池
    • 垃圾回收相关统计
    • 线程利用率
    • 加载/卸载的类数
  • CPU指标

  • 磁盘空间指标

  • 第三方指标

  • 日志指标

  • Tomcat指标

2、增加定制Metrics
@Service
public class TeacherServiceImpl implements TeacherService {@AutowiredTeacherMapper teacherMapper;Counter counter;public TeacherServiceImpl(MeterRegistry meterRegistry){counter = meterRegistry.counter("TeacherService.addTeacher.count");}public Teacher getTeacherById(Integer id){return teacherMapper.getTeacher(id);}public int addTeacher(Teacher teacher){counter.increment();return teacherMapper.addTeacher(teacher);}
}

4、定制Endpoint

@Component
@Endpoint(id = "myService")
public class MyEndPoint {@ReadOperationpublic Map getDockerInfo(){return Collections.singletonMap("docker","docker start...");}@WriteOperationpublic void stopDocker(){System.out.println("Docker stopped");}
}

使用JMX进行测试:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5dnhNHgy-1653029896848)(C:\Users\周畅\AppData\Roaming\Typora\typora-user-images\image-20220518201348628.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DzKGIHjX-1653029896849)(C:\Users\周畅\AppData\Roaming\Typora\typora-user-images\image-20220518201409585.png)]

控制台输出:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zUzp2HGO-1653029896849)(C:\Users\周畅\AppData\Roaming\Typora\typora-user-images\image-20220518201441616.png)]

http://www.lryc.cn/news/2415479.html

相关文章:

  • spring-spel
  • E8.Net工作流开发架构
  • session、cookie和token的区别
  • Java之集合(最全集合相关知识)
  • 新手理解光猫和路由器
  • javaWeb项目-人事管理系统功能介绍
  • 计算机组成原理-检错码、纠错码
  • 联发科四核处理器MT6589详细芯片参数介绍
  • Python爬虫之QQ空间登陆获取信息!
  • 简单区分一级域名、二级域名、三级域名
  • 【PGSQL】数据类型和表操作
  • 给你8个接私活的网站,保证你月薪轻松上W
  • c# MessageBox 用法大全
  • 【技术分享】数据之大,云动未来 - 弹性云数据库技术解析
  • Linux 中主机名、域名以及IP地址的关系
  • 虚拟机软件(VMware Workstation)工作模式及网络功能介绍
  • MBR、主分区、扩展分区、逻辑分区、活动分区、系统分区、启动分区讲解
  • 2023 QQ自定义在线源码无需SVIP
  • 前端的UI设计与交互之布局篇
  • ERP项目的二次开发
  • 保姆级Java入门练习教程,附代码讲解,小白零基础入门必备(建议收藏)_java教程
  • MySQL数据库引擎有哪些
  • 【视频教程】MAME0.238配置分享
  • 性能测试-测试方法总结(压力/负载)超详细
  • 音视频之解析flv文件实战
  • 【计算机毕业设计】008房屋租赁系统
  • 中国基准、基本气象站列表2012版
  • 安装Quartus_II_9.0
  • C++ static_cast基本用法
  • 北斗形变监测系统_北斗高精度在桥梁监测上有怎样的实际应用?