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

 更新时间:2020年09月03日 09:25:21   作者:夸夸可爱猪  
这篇文章主要介绍了一文搞懂并学会使用SpringBoot的Actuator运行状态监控组件,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

目录闲言碎语:背景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端口信息。

在这里插入图片描述

配置关闭项目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端口 描述
get auditevents 显示应用暴露的审计事件 (比如认证进入、订单失败)
get info 显示应用的基本信息
get health 显示应用的健康状态
get metrics 显示应用多样的度量信息
get loggers 显示和修改配置的loggers
get logfile 返回log file中的内容(如果logging.file或者logging.path被设置)
get httptrace 显示Liquibase 数据库迁移的纤细信息
get env 显示当前的环境特性
get flyway 显示数据库迁移路径的详细信息
get liquidbase 显示数据库迁移路径的详细信息
post shutdown 让你逐步关闭应用
get mappings 显示所有的@RequestMapping路径
get scheduledtasks 显示应用中的调度任务
get threaddump 执行一个线程dump
get heapdump 返回一个GZip压缩的JVM堆dump

附:SpringBoot自带的健康指示器

指示器 内容
ApplicationHealthIndicator none 永远为UP
DataSourceHealthIndicator db 如果数据库能连上,则为up,否则为down
DiskSpaceHealthIndicator diskSpace 如果可用空间大于阈值,则为up和可用磁盘空间,如果空间不足,则为down
JmsHealthIndicator jms 如果能连上消息代理,则为up,否则为down
MailHealthIndicator mail 如果能连上邮件服务器,则为up和邮件主机和端口,否则为down
MangoHealthIndicator mongo 如果能连上MangoDB服务器,则为up和MongoDB服务器版本,否则为down
RabbitHealthIndicator rabbit 如果能连上RabbitMQ服务器,则为up和MongoDB服务器版本,否则为down
RedisHealthIndicator redis 如果能连上Redis服务器,则为up和服务器版本,否则为down
SolrHealthIndicator solr 如果能连上Solr服务器,则为up和服务器版本,否则为down

总结

到此这篇关于一文搞懂并学会使用SpringBoot的Actuator运行状态监控组件的文章就介绍到这了,更多相关spring boot 运行状态监控内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 利用maven deploy上传本地jar至私服的方法

    利用maven deploy上传本地jar至私服的方法

    这篇文章主要介绍了利用maven deploy上传本地jar至私服的方法,本文结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • 在SpringBoot中无缝整合Dubbo的实现过程

    在SpringBoot中无缝整合Dubbo的实现过程

    微服务架构已经成为现代应用开发的热门趋势,而Dubbo作为一款强大的分布式服务框架,与Spring Boot的结合是构建高性能微服务应用的理想选择,本文将详细介绍如何在SpringBoot中无缝整合Dubbo,需要的朋友可以参考下
    2024-01-01
  • Java编程实现直接插入排序代码示例

    Java编程实现直接插入排序代码示例

    这篇文章主要介绍了Java编程实现直接插入排序代码示例,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • try-cache-finally读取文件错误try-with-resources使用方法

    try-cache-finally读取文件错误try-with-resources使用方法

    这篇文章主要为大家介绍了try-cache-finally读取文件错误try-with-resources使用方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • 使用Spring Initializr方式如何快速构建Spring Boot项目

    使用Spring Initializr方式如何快速构建Spring Boot项目

    Spring lnitializr是一个Web应用,它提供了一个基本的项目结构,能够帮助我们快速构建一个基础的Spring Boot项目,本文分步骤讲解如何使用Spring Initializr方式构建Spring Boot项目,感兴趣的朋友跟随小编一起看看吧
    2023-08-08
  • java后台调用HttpURLConnection类模拟浏览器请求实例(可用于接口调用)

    java后台调用HttpURLConnection类模拟浏览器请求实例(可用于接口调用)

    这篇文章主要介绍了java后台调用HttpURLConnection类模拟浏览器请求实例,该实例可用于接口调用,具有一定的实用价值,需要的朋友可以参考下
    2014-10-10
  • 详解jvm对象的创建和分配

    详解jvm对象的创建和分配

    这篇文章主要介绍了jvm对象的创建和分配的相关资料,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下
    2021-03-03
  • J2SE基础之命令行中编写第一个 Hello World

    J2SE基础之命令行中编写第一个 Hello World

    “Hello World”程序指的是只在计算机屏幕上输出“Hello, World!”(意为“世界,你好!”)这行字符串的计算机程序。hello world作为所有编程语言的起始阶段,占据着无法改变的地位,所有的编程第一步就在于此了!经典之中的经典!hello world!
    2016-05-05
  • 详解SpringBoot如何优雅的处理免登录接口

    详解SpringBoot如何优雅的处理免登录接口

    在项目开发过程中,会有很多API接口不需要登录就能直接访问,比如公开数据查询之类的,常规处理方法基本是 使用拦截器或过滤器,拦截需要认证的请求路径,本文介绍一个更优雅的方法自定义注解的方式,文中通过代码示例介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • java 打印一字符串,并在main()方法内调用它

    java 打印一字符串,并在main()方法内调用它

    编写一个方法(名字自定,但要符合Java编码规范),方法内打印一字符串,并在main()方法内调用它。
    2017-02-02

最新评论