Spring Boot Actuator详解与深入应用(一):Actuator 1.x

news2025/1/16 20:13:57

《Spring Boot Actuator详解与深入应用》预计包括三篇,第一篇重点讲Spring Boot Actuator 1.x的应用与定制端点;第二篇将会对比Spring Boot Actuator 2.x 与1.x的区别,以及应用和定制2.x的端点;第三篇将会介绍Actuator metric指标与Prometheus和Grafana的使用结合。这部分内容很常用,且较为入门,欢迎大家的关注。

Actuator是什么

Spring Boot Actuator提供了生产上经常用到的功能(如健康检查,审计,指标收集,HTTP跟踪等),帮助我们监控和管理Spring Boot应用程序。这些功能都可以通过JMX或HTTP端点访问。

通过引入相关的依赖,即可监控我们的应用程序,收集指标、了解流量或数据库的状态变得很简单。该库的主要好处是我们可以获得生产级工具,而无需自己实际实现这些功能。与大多数Spring模块一样,我们可以通过多种方式轻松配置或扩展它。

Actuator还可以与外部应用监控系统集成,如Prometheus,Graphite,DataDog,Influx,Wavefront,New Relic等等。 这些系统为您提供出色的仪表板,图形,分析和警报,以帮助我们在一个统一界面监控和管理应用服务。

本文将会介绍Spring Boot Actuator 1.x 包括其中的端点(HTTP端点)、配置管理以及扩展和自定义端点。

快速开始

引入如下的依赖:

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

Spring Boot Actuator 1.x

在1.x中,Actuator遵循读写模型,这意味着我们可以从中读取信息或写入信息。我们可以检索指标或我们的应用程序的健康状况,当然我们也可以优雅地终止我们的应用程序或更改我们的日志配置。Actuator通过Spring MVC暴露其HTTP端点。

端点

当引入的Actuator的版本为1.x时,启动应用服务,可以控制台输出如下的端点信息:

我们介绍一下常用的endpoints:

  • /health:显示应用程序运行状况信息(通过未经身份验证的连接访问时的简单“状态”或经过身份验证时的完整消息详细信息),它默认不敏感
  • /info:显示应用程序信息,默认情况下不敏感
  • /metrics:显示当前应用程序的“指标”信息,它默认也很敏感
  • /trace:显示跟踪信息(默认情况下是最后几个HTTP请求)

有些端点默认并不会被开启,如/shutdown。

配置端点

我们可以自定义每个端点的属性,按照如下的格式:

endpoints.[endpoint name].[property to customize] 

可以自定义的属性有如下三个:

  • id,暴露的http端点地址
  • enabled,是否开启
  • sensitive,当为true时,需要认证之后才会通过http获取到敏感信息

我们在配置文件中增加如下的配置,将会定制/beans端点。

endpoints.beans.id=springbeans
endpoints.beans.sensitive=false
endpoints.beans.enabled=true 

/health端点

/health端点用于监控运行的服务实例状态,当服务实例下线或者因为其他的原因变得异常(如DB连接不上,磁盘缺少空间)时,将会及时通知运维人员。

在默认未授权的情况下,通过HTTP的方式仅会返回如下的简单信息:

{
	"status": "UP"
} 

获取详细的health信息

我们进行如下的配置:

endpoints:health:id: chealthsensitive: false

management.security.enabled: false 

如上一小节所述,我们更改了/health端点的访问路径为/chealth,并将安全授权关闭。访问http://localhost:8005/chealth将会得到如下的结果。

{
	"status": "UP",
	"healthCheck": {
		"status": "UP"
	},
	"diskSpace": {
		"status": "UP",
		"total": 999995129856,
		"free": 762513104896,
		"threshold": 10485760
	}
} 

自定义health的信息

我们还可以定制实现health指示器。它可以收集特定于应用程序的任何类型的自定义运行状况数据,并通过/health端点访问到定义的信息。

@Component
public class HealthCheck implements HealthIndicator {@Overridepublic Health health() {int errorCode = check(); // perform some specific health checkif (errorCode != 0) {return Health.down().withDetail("Error Code", errorCode).build();}return Health.up().build();}public int check() {// Our logic to check healthreturn 0;}
} 

实现HealthIndicator接口,并覆写其中的health()方法即可自定义我们的/health端点。

/info端点

通过/info端点,我们可以为应用服务定义一些基本信息:

info.app.name=Spring Sample Application
info.app.description=This is my first spring boot application
info.app.version=1.0.0 

我们在如上的配置中定义了服务名、描述和服务的版本号。

/metrics端点

/metrics端点展示了OS、JVM和应用级别的指标信息。当开启之后,我们可以获取内存、堆、线程、线程池、类加载和HTTP等信息。

{
	"mem": 417304,
	"mem.free": 231678,
	"processors": 4,
	"instance.uptime": 248325,
	"uptime": 250921,
	"systemload.average": 1.9541015625,
	"heap.committed": 375296,
	"heap.init": 393216,
	"heap.used": 143617,
	"heap": 5592576,
	"nonheap.committed": 43104,
	"nonheap.init": 2496,
	"nonheap.used": 42010,
	"nonheap": 0,
	"threads.peak": 30,
	"threads.daemon": 18,
	"threads.totalStarted": 46,
	"threads": 20,
	"classes": 6020,
	"classes.loaded": 6020,
	"classes.unloaded": 0,
	"gc.ps_scavenge.count": 3,
	"gc.ps_scavenge.time": 35,
	"gc.ps_marksweep.count": 1,
	"gc.ps_marksweep.time": 29,
	"httpsessions.max": -1,
	"httpsessions.active": 0,
	"gauge.response.info": 38.0,
	"counter.status.200.info": 1
} 

定制metrics端点

为了收集自定义的metrics,Actuator支持单数值记录的功能,简单的增加/减少计数功能。如下的实现,我们将登录成功和失败的次数作为自定义指标记录下来。

@Service
public class LoginServiceImpl implements LoginService {private final CounterService counterService;@Autowiredpublic LoginServiceImpl(CounterService counterService) {this.counterService = counterService;}@Overridepublic Boolean login(String userName, char[] password) {boolean success;if (userName.equals("admin") && "secret".toCharArray().equals(password)) {counterService.increment("counter.login.success");success = true;} else {counterService.increment("counter.login.failure");success = false;}return success;}
} 

再次访问/metrics,发现多了如下的指标信息。登录尝试和其他安全相关事件在Actuator中可用作审计事件。

{
	"gauge.response.metrics": 2.0,
	"gauge.response.test": 3.0,
	"gauge.response.star-star.favicon.ico": 1.0,
	"counter.status.200.star-star.favicon.ico": 10,
	"counter.status.200.test": 6,
	"counter.login.failure": 6,
	"counter.status.200.metrics": 4
} 

自定义端点

除了使用Spring Boot Actuator提供的端点,我们也可以定义一个全新的端点。

首先,我们需要实现Endpoint接口:

@Component
public class CustomEndpoint implements Endpoint<List<String>> {@Overridepublic String getId() {return "custom";}@Overridepublic boolean isEnabled() {return true;}@Overridepublic boolean isSensitive() {return false;}@Overridepublic List<String> invoke() {// Custom logic to build the outputList<String> messages = new ArrayList<String>();messages.add("This is message 1");messages.add("This is message 2");return messages;}
} 

getId()方法用于匹配访问这个端点,当我们访问/custom时,将会调用invoke()我们自定义的逻辑。 另外两个方法,用于设置是否开启和是否为敏感的端点。

[ "This is message 1", "This is message 2" ] 

进一步定制

出于安全考虑,我们可能选择通过非标准端口暴露Actuator端点。通过management.port属性来配置它。

另外,正如我们已经提到的那样,在1.x. Actuator基于Spring Security配置自己的安全模型,但独立于应用程序的其余部分。

因此,我们可以更改management.address属性以限制可以通过网络访问端点的位置:

#port used to expose actuator
management.port=8081 
 
#CIDR allowed to hit actuator
management.address=127.0.0.1 

此外,除了/info端点,其他所有的端点默认都是敏感的,如果引入了Spring Security,我们通过在配置文件中定义这些安全的属性(username, password, role)来确保内置端点的安全。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/162143.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AWVS扫描报告分析

系列文章 AWVS安装与激活 AWVS扫描Web应用程序 扫描报告分析 生成报告 1.选则我们已经扫描好的网站&#xff0c;点击它 2.点击后&#xff0c;右上角选择生成报告 3.选择生成报告的类型 4.点击生成报告 如下我们分别选择了三种规格生成了三份不同类型的报告 5.点击HTML&…

Vivado

Vivado设计套件&#xff0c;是Xilinx公司最新的为其产品定制的集成开发环境&#xff0c;支持Block Design、Verilog、VHDL等多种设计输入方式&#xff0c;内嵌综合器以及仿真器&#xff0c;可以完成从设计输入、综合适配、仿真到下载的完整FPGA设计流程。 Vivado集成了HLS&…

与机器人chatGPT聊聊软件测试的热门话题

之前我和chatGPT有过一次对话&#xff0c; 那只是问一些有趣的、时髦的大众话题。上周末在家&#xff0c;想考一考chatGPT的软件测试专业水平&#xff0c;确定它是否算得上一名测试专家&#xff1f;通过一系列有难度的提问&#xff0c;感觉有时它答的精妙与全面&#xff0c;但有…

SAP ABAP——SAP包(一)【包概要简述及创建】

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读&#xff0c;同时任汉硕云&#xff08;广东&#xff09;科技有限公司ABAP开发顾问。在学习工作中&#xff0c;我通常使用偏后…

jsp 实验室管理系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

一、源码特点 jsp 实验室管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql&#xff0c;使用…

Node 异步I/O 实现

Node 异步I/O 实现 文章目录Node 异步I/O 实现理想的非阻塞异步 I/O现实的异步I/O实现方案重磅来了 Node 的异步 I/O的实现整个异步 I/O 的过程Node 实现异步 I/O 的总结PS&#xff1a;&#x1f330;理想的非阻塞异步 I/O 但是现实是骨感的&#xff0c;现实的异步I/O实现方案有…

Apache Doris 系列: 基础篇-使用BitMap函数精准去重(1)

1. 简述 精准去重的常用方式是使用SQL函数COUNT(DISTINCT)&#xff0c;这种方法最简单&#xff0c;但是要求所有数据都汇聚在一个节点上计算&#xff0c;在数据量大的情况下&#xff0c;需要等待比较常的时间。 例如一个6000000行数据的表&#xff0c;执行以下SQL&#xff0c;…

模板技术详解

目录 一、概念介绍 二、函数模板 2.1 概念 2.2 函数模板格式 2.3 函数模板原理 2.4 函数模板实例化 2.5 函数模板的匹配原则 三、类模板 3.1 类模板格式 3.2 类模板实例化 四、非类型模板参数 五、模板特化 5.1 概念 5.2 函数模板特化 5.3 类模板特化 六、模板…

如何使用mybatis处理数据库关系中的一对多关系呢?

测试环境的搭建&#xff1a; 本篇文章的测试环境搭建和上篇文章基本相似&#xff0c;这里在上篇文章传送门测试环境的基础上进行对比和修改&#xff01; 上篇文章所提到的多对一是多个学生对应一个老师&#xff0c;是在学生的角度去获取老师的信息&#xff0c;而本篇文章的一…

关于MySQL中的数据类型

一、常见的数据类型有&#xff1a; varchar&#xff08;最长255&#xff09;&#xff1a;【每个长度可以保存一个英文字符或一个汉字】 可变长度字符串 比较智能 节省空间 会根据实际的数据长度动态分配空间 优点&#xff1a;节省空间 缺点&#xff1a;需要动态分配空间&am…

phy-MDC时钟修改

问题分析:我们这边更换一种电平转换芯片&#xff0c;还是没调通。可能一个原因是这个芯片在开漏模式下速速最高到2M有关&#xff0c;您那边能帮忙协调一下&#xff0c;把内核PHY的MDC时钟改为2M以下&#xff0c;另把PHY的复位时间由现在的13MS左右调整到30MS左右我们试一下 在…

数据库知识学习

关系型数据库学习 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录关系型数据库学习一 数据库介绍1 相关定义数据&#xf…

基于卷积神经网络识别金融票据中的文字信息(计算机毕设完整代码可直接运行)

结果展示&#xff1a;用户首先通过”浏览文件”按钮选择扫描获得的金融票据图片. 程序就能够提取出金融票据图片中的日期, 金额等信息和图片路径信息显示在屏幕上. 程序还设置了帮助按键,使用者通过帮助按钮获得帮助.由图可见票据的日期为 19 年 06 月 22 日(062219), 程序可以…

CMMI之需求管理

需求管理&#xff08;Requirement Management, RM&#xff09;的目的在客户与开发方之间建立对需求的共同理解&#xff0c;维护需求与其他工作成果的一致性&#xff0c;并控制需求的变更。需求管理过程域是SPP模型的重要组成部分。本规范阐述了需求管理过程域的三个主要规程&am…

低代码平台是技术开发的未来主流吗?

2022年9月27日16:49:21 这个事情我想了很久&#xff0c;最终的结论是&#xff1a;低代码平台只会一些领域平台的部分功能模块的标配&#xff0c;不会成为技术主流。 部分代表性例子&#xff1a; 1&#xff0c;低代码平台很早就有了&#xff0c;比如Visual Basic 6.0 ,delphi这些…

电脑重装系统后每次都要选择系统怎么办

电脑重装系统是件非十分平常的事情&#xff0c;当电脑出现故障或卡顿不能解决&#xff0c;即可采取重装系统来修复。不过&#xff0c;有些用户遇到系统重装后每次开机都要选择系统&#xff0c;影响到电脑正常使用&#xff0c;想要解决这个问题&#xff0c;只要关闭引导配置就可…

【pandas】15 pandas数据结构

【pandas】15 pandas数据结构 2023.1.13 总结来自https://mofanpy.com/tutorials/data-manipulation/pandas/ 包括pandas数据结构Series/DataFrame;数据选取分类查询等内容15.1 为什么需要pandas 前面讲了numpy,我们发现&#xff0c;numpy主要用途就是对同一类数据进行处理&a…

多节点Linux环境打造

目录 一、环境准备 1. CentOS镜像下载 2. VMware下载 二、 安装操作系统 1. 配置虚拟机 2. 安装CentOS操作系统 3. 网络配置 4. 多节点打造 5. 节点网络互通 6. 关闭防火墙服务 7. 修改默认主机名 8. 关闭 SELinux 服务 9. 安装常用软件 一、环境准备 1. CentOS镜…

电脑重装系统后键盘失灵解决方法步骤

手提电脑重装系统后键盘失灵怎么办呢?众所周知,联想小新Air 13 Pro保持经典的黑色外观,凭借坚固和可靠的特性得到了很多用户的认可。有网友发现联想小新Air 13 Pro手提电脑重装系统后键盘会失灵&#xff0c;那么小编把手提电脑重装系统后键盘失灵解决方法分享给大家。 工具/原…

Vue声明式导航 编程式导航、导航守卫、axios拦截器

一、声明式导航 & 编程式导航 1. 声明式导航&#xff1a;以超链接方式实现的页面跳转&#xff0c;就是声明式导航 < a href‘url’> 链接文本或图像 < /a >< router-link to‘url’ > 链接文本或图像 < /router-link >2. 编程式导航&#xff1a;通…