一文搞懂并学会使用SpringBoot的Actuator运行状态监控组件的详细教程

作者:夸夸可爱猪 时间:2022-01-31 10:28:23 

目录闲言碎语:背景Actuator介绍Rest方法来查看Actuatorpom.xml引入Actuator依赖配置application.yml运行项目Actuator配合SpringBootSecurity配置application.xml运行项目配置关闭项目API端口配置application.yml命令行执行post关闭指令附:Actuator端口信息附:SpringBoot自带的健康指示器赠言

闲言碎语:

  最近刷抖音,看到了星爷的很多电影,感叹星爷给后世留下了很多的经典作品,我就在想,作为一名程序员,如何留下影响后人的经典传世之作呢,不经意间看到了一篇大佬的文章,已经近百万人浏览,这就是对后人的一种影响,然后就有了写这篇博客的冲动,结合最近在学习的SpringCloud,对每一个组件的原理和使用都进行深度的学习和理解,然后将心得写在博客里,如果有不对的地方还请大佬进行指正,小弟不胜感激

背景

  微服务之后,系统结构拆分随着业务发展越来越微型化,也意味着节点会呈现几何数量级增长。每个一个节点都是系统组成部分,如何保持如此多节点的可用性是一件非常有挑战的工作。
  全方位监控变得越来越重要,当我们遇到bug时,总是希望可以看到更多信息,因此一般我们选用的服务开发框架都需要有方便又强大的监控功能支持。
  Spring Boot Actuator便可以帮助我们全方面监控应用节点.
  比如健康检查、审计、统计、HTTP追踪等。我们可以通过JMX或者HTTP endpoints来获得。spring Boot Admin配合下可以进行页面展示,也和可以与其它外部应用系统系统整合。

Actuator介绍

  Actuator是SpringBoot的一个非常重要的功能,Actuator 为开发人员提供了SpringBoot运行状态信息,通过Actuator可以查看程序的运行状态的信息。同时它提供了运行状态的监控功能,Actuator的监控功能可以通过Rest、远程shell、JMX方式获得,首先我们介绍Rest方法来查看Actuator的节点方法,这种是十分简单的方法。
  Spring Boot Actuator 的关键特性是在应用程序里提供众多的Web节点,通过这些节点可以实时地了解应用程序的运行状况。有了Actuator,你可以知道Bean在Spring应用程序上下文里是如何组装在一 起的,并且可以获取环境属性的信息和运行时度量信息等。

Rest方法来查看Actuator

pom.xml引入Actuator依赖

首先在pom.xml种引入spring-boot-starter-actuator依赖,代码如下:


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

配置application.yml

  在application.yml中配置management.port和management.security.enabled,这俩是向外暴露actuator的端口和actuator的非安全验证方式。
  在这里指定actuator对外暴露的RestApi端口为9091,Spring1.5x默认采用了Actuator安全验证,为了能够在浏览器上展示效果,不做安全验证,将其设置为false。


management:
server:
port: 9091 # 对外暴露API接口端口为9001
servlet:
 context-path: /sys
security:
enabled: false # 这是为了在浏览器上展示效果 所以设置为false
endpoints:
web:
 exposure:
 include: "*" # include表示需要暴露的endpoint,配置时使用“,”隔开,你也可以用*让所有endpoint暴露出来
endpoint:
 health:
 enabled: true
 show-details: always # health endpoint只展示了简单的UP和DOWN状态。为了获得健康检查中所有指标的详细信息,可以设置其展示详细信息。
 shutdown:
 enabled: true

  management.endpoint.health.show-details默认值为never,除了always之外还有when-authorized。
  exclude表示在暴露endpoint时,排除掉哪些,同样使用“,”隔开,例如
management.endpoints.web.exposure.exclude=info # 排除info

  注意:如果不指定会默认采用程序的启动端口,这样做的目的就是将监控端口与项目端口进行区分。
  不配置监控端口:localhost:8080/actuator/
  配置监控端口:localhost:9091/sys/actuator/
  特别注意:在2.0之后的版本访问地址必须要加上/actuator/才可以

运行项目

  就可以看到详细的信息了,以health为例:


请求路径:http://localhost:9091/sys/actuator/health

{
status: "UP",
components: {
diskSpace: {
status: "UP",
details: {
total: 161062318080,
free: 103786217472,
threshold: 10485760,
exists: true
}
},
ping: {
status: "UP"
}
}
}

Actuator配合SpringBootSecurity

  actuator可以配合security进行权限控制,从而保护endpint。
  首先在pom.xml中引入SpringBootSecurity依赖:


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

配置application.xml

  添加:


spring.security.user.name = admin
spring.security.user.password = admin


  这样在我们访问localhost:9091/sys/actuator/的时候就会自动跳转到安全登录页面,提示我们输入用户名和密码。




security:
user:
 name: admin
 password: admin

运行项目

  我们的请求路径由http://localhost:9091/sys/actuator/自动变成了http://localhost:9091/sys/login,输入配置好的用户名和密码,就可以看到对应的各种Api端口信息。

一文搞懂并学会使用SpringBoot的Actuator运行状态监控组件的详细教程

配置关闭项目API端口

配置application.yml

  在endpoint后配置shutdown端口为true,默认情况下系统是关闭该端口,防止他人的恶意关闭项目,是出于对系统的一种保护行为。


endpoint:
 health:
 enabled: true
 show-details: always
 shutdown:
 enabled: true

注意:在这里我们利用cmd窗口以命令行的形式来模拟post请求,如果在浏览器直接请求的话会报错,后台会提示
Request method ‘GET' not supported。也就是说不支持get请求,我们需要用post。

命令行执行post关闭指令

  在命令行中输入:


$ curl -X POST localhost:9091/actuator/shutdown

  然后命令行提示:

{“message”:“Shutting down, bye…”}

  项目就处于关闭状态了!

附:Actuator端口信息

类型Api端口描述
getauditevents显示应用暴露的审计事件 (比如认证进入、订单失败)
getinfo显示应用的基本信息
gethealth显示应用的健康状态
getmetrics显示应用多样的度量信息
getloggers显示和修改配置的loggers
getlogfile返回log file中的内容(如果logging.file或者logging.path被设置)
gethttptrace显示Liquibase 数据库迁移的纤细信息
getenv显示当前的环境特性
getflyway显示数据库迁移路径的详细信息
getliquidbase显示数据库迁移路径的详细信息
postshutdown让你逐步关闭应用
getmappings显示所有的@RequestMapping路径
getscheduledtasks显示应用中的调度任务
getthreaddump执行一个线程dump
getheapdump返回一个GZip压缩的JVM堆dump

附:SpringBoot自带的健康指示器

指示器内容
ApplicationHealthIndicatornone永远为UP
DataSourceHealthIndicatordb如果数据库能连上,则为up,否则为down
DiskSpaceHealthIndicatordiskSpace如果可用空间大于阈值,则为up和可用磁盘空间,如果空间不足,则为down
JmsHealthIndicatorjms如果能连上消息代理,则为up,否则为down
MailHealthIndicatormail如果能连上邮件服务器,则为up和邮件主机和端口,否则为down
MangoHealthIndicatormongo如果能连上MangoDB服务器,则为up和MongoDB服务器版本,否则为down
RabbitHealthIndicatorrabbit如果能连上RabbitMQ服务器,则为up和MongoDB服务器版本,否则为down
RedisHealthIndicatorredis如果能连上Redis服务器,则为up和服务器版本,否则为down
SolrHealthIndicatorsolr如果能连上Solr服务器,则为up和服务器版本,否则为down

来源:https://blog.csdn.net/weixin_42103983/article/details/108371384

标签:spring,boot,Actuator,运行状态监控
0
投稿

猜你喜欢

  • Java中的回调

    2023-11-16 01:55:58
  • SpringBoot实现Mysql使用MD5进行密码加密的示例

    2022-11-24 23:14:16
  • JAVA JVM面试题总结

    2021-07-12 04:55:13
  • 浅谈Java消息队列总结篇(ActiveMQ、RabbitMQ、ZeroMQ、Kafka)

    2022-06-13 01:30:40
  • java底层JDK Logging日志模块处理细节深入分析

    2023-02-04 12:47:31
  • Swagger实现动态条件注入与全局拦截功能详细流程

    2023-11-23 13:41:05
  • Spring Security过滤器链体系的实例详解

    2023-08-25 03:24:15
  • Flutter WillPopScope拦截返回事件原理示例详解

    2023-07-19 12:53:35
  • C#正则表达式分解和转换IP地址实例(C#正则表达式大全 c#正则表达式语法)

    2023-07-17 07:11:25
  • 浅谈C#与Java两种语言的比较

    2023-09-26 13:05:19
  • Android View移动的六种方法小结

    2023-07-06 02:43:39
  • Java线程中sleep和wait的区别详细介绍

    2021-08-27 02:23:12
  • java实现word文档转pdf并添加水印的方法详解

    2023-05-26 02:59:18
  • Android RecyclerBarChart绘制使用教程

    2023-06-19 12:18:36
  • 利用spring的拦截器自定义缓存的实现实例代码

    2022-07-22 00:44:47
  • JAVA中的Token 基于Token的身份验证实例

    2023-11-09 18:05:09
  • spring定时任务执行两次及tomcat部署缓慢问题的解决方法

    2022-12-27 09:53:25
  • Java单例模式简单示例

    2022-04-24 03:46:20
  • java Long类型转为json后数据损失精度的处理方式

    2022-08-11 12:37:43
  • JavaWeb项目Servlet无法访问问题解决

    2022-10-10 03:33:52
  • asp之家 软件编程 m.aspxhome.com