一文搞懂并学会使用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 运行状态监控内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringBoot四大神器之Actuator的使用小结

    序 Spring Boot有四大神器,分别是auto-configuration.starters.cli.actuator,本文主要讲actuator.actuator是spring boot提供的对应用系统的自省和监控的集成功能,可以对应用系统进行配置查看.相关功能统计等. spring-boot-starter-actuator模块的实现对于实施微服务的中小团队来说,可以有效地减少监控系统在采集应用指标时的开发量.当然,它也并不是万能的,有时候我们也需要对其做一些简单的扩展来帮助我们实现自

  • springboot 使用Spring Boot Actuator监控应用小结

    微服务的特点决定了功能模块的部署是分布式的,大部分功能模块都是运行在不同的机器上,彼此通过服务调用进行交互,前后台的业务流会经过很多个微服务的处理和传递,出现了异常如何快速定位是哪个环节出现了问题? 在这种框架下,微服务的监控显得尤为重要.本文主要结合Spring Boot Actuator,跟大家一起分享微服务Spring Boot Actuator的常见用法,方便我们在日常中对我们的微服务进行监控治理. Actuator监控 Spring Boot使用"习惯优于配置的理念",采用包

  • SpringBoot 监控管理模块actuator没有权限的问题解决方法

    SpringBoot 1.5.9 版本加入actuator依赖后,访问/beans 等敏感的信息时候报错,如下 Tue Mar 07 21:18:57 GMT+08:00 2017 There was an unexpected error (type=Unauthorized, status=401). Full authentication is required to access this resource. 肯定是权限问题了.有两种方式: 1.关闭权限:application.prop

  • 详解配置spring-boot-actuator时候遇到的一些小问题

    前言 spring-boot-actuator是一个spring-boot提供的用于监控组件,只需要在代码中加入依赖就可以了 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> 遇到的一些小问题 1.可以加入依赖 <dependenc

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

    目录闲言碎语:背景Actuator介绍Rest方法来查看Actuatorpom.xml引入Actuator依赖配置application.yml运行项目Actuator配合SpringBootSecurity配置application.xml运行项目配置关闭项目API端口配置application.yml命令行执行post关闭指令附:Actuator端口信息附:SpringBoot自带的健康指示器赠言 闲言碎语:   最近刷抖音,看到了星爷的很多电影,感叹星爷给后世留下了很多的经典作品,我就在想

  • 一文搞懂如何部署启动多个tomcat并移植项目

    目录 部署tomcat 一.下载解压 二.修改配置文件 移植项目 一.打包原项目 二.复制到tomcat 三.访问试试 有时候我们在编写web项目时,有好几个项目需要同时运行,但直接放置war包总会出各种问题,比如说同一个Tomcat 同一个端口 部署多个项目,或者同一个Tomcat 多个端口 部署多个项目,经过几番测试决定分享给大家,jdk的安装就不多讲了,配好环境变量就可以,下面给大家介绍详细操作流程: 部署tomcat 一.下载解压 官网下载tomcat,并解压 二.修改配置文件 打开co

  • 一文搞懂JMeter engine中HashTree的配置问题

    目录 一.前言 二.HashTree的用法 三.JMeter源码导出jmx脚本文件介绍 四.自定义HashTree生成JMeter脚本 一.前言 之前介绍了JMeter engine启动原理,但是里面涉及到HashTree这个类结构没有给大家详细介绍,这边文章就详细介绍JMeter engine里面的HashTree结构具体用来做什么 大家看到下面是JMeter控制台配置截图,是一个标准的菜单形式:菜单形式其实就类似于"树型"的数据结构,而HashTree其实就是一个树型数据结构 我们

  • 一文搞懂Java的SPI机制(推荐)

    目录 1 简介 缺点 源码 使用 适用场景 插件扩展 案例 1 简介 SPI,Service Provider Interface,一种服务发现机制. 有了SPI,即可实现服务接口与服务实现的解耦: 服务提供者(如 springboot starter)提供出 SPI 接口.身为服务提供者,在你无法形成绝对规范强制时,适度"放权" 比较明智,适当让客户端去自定义实现 客户端(普通的 springboot 项目)即可通过本地注册的形式,将实现类注册到服务端,轻松实现可插拔 缺点 不能按需

  • 一文搞懂Python读取text,CSV,JSON文件的方法

    目录 前言 打开文件 Python 中的文件读取模式 读取文本文件 读取 CSV 文件 读取 JSON 文件 总结 前言 文件是无处不在的,无论我们使用哪种编程语言,处理文件对于每个程序员都是必不可少的 文件处理是一种用于创建文件.写入数据和从中读取数据的过程,Python 拥有丰富的用于处理不同文件类型的包,从而使得我们可以更加轻松方便的完成文件处理的工作 本文大纲: 使用上下文管理器打开文件 Python 中的文件读取模式 读取 text 文件 读取 CSV 文件 读取 JSON 文件 打开

  • 一文搞懂Map与Set的用法和区别解析

    目录 前言 1.基本概念 1.1 Map(字典) 1.2 Set(集合) 2.基本使用 2.1 Map 基本使用 2.2 Set 基本使用 3.Map和Set区别 4.使用场景介绍 4.1 Set对象使用场景 4.2 Map对象使用场景 5.思考点 总结 前言 作为前端开发人员,我们最常用的一些数据结构就是 Object.Array 之类的,毕竟它们使用起来非常的方便.往往有些刚入门的同学都会忽视 Set 和 Map 这两种数据结构的存在,因为能用 set 和 map 实现的,基本上也可以使用对

  • 一文搞懂Mybatis-plus的分页查询操作

    目录 1. 简单说明 2. 介绍说明 3. 完整配置类代码 4. 示例代码 5. 最后总结 1. 简单说明 嗨,大家好!今天给大家分享的是Mybatis-plus 插件的分页机制,说起分页机制,相信我们程序员都不陌生,今天,我就给大家分享一下Mybatis-plus的分页机制,供大家学习和Copy. 2. 介绍说明 如果你想看代码,可以直接跳到代码区域,这里只是一些简单的说明,如果你想学习,建议可以看看这一块的任容. 本章节将介绍 BaseMapper 中的分页查询,BaseMapper 接口提

  • 一文搞懂JavaScript中bind,apply,call的实现

    目录 bind.call和apply的用法 bind call&apply 实现bind 实现call和apply 总结 bind.call和apply都是Function原型链上面的方法,因此不管是使用function声明的函数,还是箭头函数都可以直接调用.这三个函数在使用时都可以改变this指向,本文就带你看看如何实现bind.call和apply. bind.call和apply的用法 bind bind()方法可以被函数对象调用,并返回一个新创建的函数. 语法: function.bin

  • 一文搞懂ES6中的Map和Set

    Map Map对象保存键值对.任何值(对象或者原始值) 都可以作为一个键或一个值.构造函数Map可以接受一个数组作为参数. Map和Object的区别 •一个Object 的键只能是字符串或者 Symbols,但一个Map 的键可以是任意值. •Map中的键值是有序的(FIFO 原则),而添加到对象中的键则不是. •Map的键值对个数可以从 size 属性获取,而 Object 的键值对个数只能手动计算. •Object 都有自己的原型,原型链上的键名有可能和你自己在对象上的设置的键名产生冲突.

  • 一文搞懂hashCode()和equals()方法的原理

    Java中的超类java.lang.Object 有两个非常重要的方法: public boolean equals(Object obj) public int hashCode() 这两个方法最开发者来说是十分重要的,必须清楚的理解,但实际上,甚至很多经验丰富的Java开发者有时候也没有真正搞清楚这两个方法的使用和原理.当我们自定义了对象,并且想要将自定义的对象加到Map中时,我们就必须对自定义的对象重写这两个方法,才能正确使用Map.我们接下来将用这篇文章指出在使用hashcode和equ

随机推荐