SpringBoot实战(十二)集成Actuator
目录
- 一、简介
- 二、Maven依赖
- 三、使用入门
- 1.HTTP 方式访问端点
- 2.JMX 方式访问端点
- 3.端点信息整理
- 4.端点的启用与禁用
- 5.端点的公开
- 6.保护 HTTP 端点
- 7.配置 CORS 跨域
官方文档: https://docs.spring.io/spring-boot/docs/2.4.5/reference/htmlsingle/#production-ready
(2.4.5
为 SpringBoot 版本号,查看其他的 SpringBoot 版本对应的 Spring Actuator 文档可以直接在地址栏替换后访问。)
一、简介
Spring Actuator: 是
Spring Boot
提供的一组用于监控和管理 Spring Boot 应用
的组件,可以通过HTTP
、JMX
或远程 Shell 访问应用的运行时信息和统计数据。Actuator
提供了一些常用的端点(endpoint),可以用来获取应用的健康状况
、环境信息
、配置信息
、日志
等。
端点
:指的是用于监控应用服务的指标,比如应用服务的健康状况等,一般是 HTTP
或 JMX
接口形式。
常用的端点包括:
-
/health
:用于获取应用的健康状况
,返回的结果包含应用的状态信息、健康检查结果、数据库连接状态等; -
/info
:用于获取应用的基本信息
,返回的结果包含应用的版本信息、构建时间、Git 提交 ID 等。 -
/metrics
:用于获取应用的统计信息
,返回的结果包含应用的请求数、响应时间、错误数等。 -
/env
:用于获取应用的环境信息
,返回的结果包含应用的配置属性、系统属性等。 -
/loggers
:用于获取或修改应用的日志记录器,可以查看日志的级别、修改日志的级别等。(更多端点的详细信息在文章的后面具体介绍)
Actuator
还提供了一些扩展的端点和功能,如审计(Audit)、远程 Shell 访问、线程 Dump 等。通过 Actuator
,开发者可以更方便地了解应用地运行状况和性能,同时可以通过暴露地端点和功能来对应用进行管理和调优。可以通过在 pom.xml
文件中引入 spring-boot-starter-actuator
依赖来使用 Actuator
组件。
二、Maven依赖
<!-- Spring Actuator -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
三、使用入门
1.HTTP 方式访问端点
查看服务开启的 HTTP
端点,浏览器访问地址:http://localhost:8080/actuator
查看不同服务的端点,只需要在端口后拼接 /actuator
+ /
+ 端点
即可,例如:http://localhost:8080/actuator/health
2.JMX 方式访问端点
JMX(Java Management Extensions)
接口需要通过 Java Console(jconsole)
来进行访问。
Java Console(jconsole)
是 Java 平台自带的一款监控工具,可以用于监控 Java 应用程序的性能和资源使用情况。jconsole 可以监控本地或远程的 Java 进程,并提供了可视化界面(GUI
)展示 Java 进程的运行状态和性能指标。
注意:因为 jconsole
使用 GUI
进行可视化界面的展示,所以没有可视化界面的 Linux 服务器是无法使用的。
jconsole
与 JMX
服务一起使用,通过 JMX
服务暴露的 MBean(Managed Bean)
对象来获取和管理 Java 应用程序的状态和属性信息。开发者可以在 Java 应用程序中使用 JMX API 来暴露自定义的 MBean 对象,并在 jconsole 中查看和管理这些 MBean
对象。
jconsole 使用方式:
- 方式一:命令行直接输入
jconsole
回车; - 方式二:Windows 系统下可以使用 Ctrl + R,输入
jconsole
回车。
选择好自己的 Java 项目后,可以双击连接。
会提示 无法使用 SSL 连接到 ***
,这个不影响,我们点击 不安全的连接
即可。
然后就可以看到我们的可视化界面了,这里我们可以查看 概览
、内存
、线程
、类
、VM
、概要
、MBean
等信息。
我们把标签切换到 MBean
,点击 org.springframework.boot
,再点击 Endpoint
,就可以看到 Spring Actuator
在 JMX
中默认暴露出来的端点了。(这里可以发现:JMX 暴露的端点比 HTTP 暴露的端点更多)
3.端点信息整理
以下是与技术无关的可用端点:
(HTTP 方式默认只开启 health
和 info
,JMX 方式默认全部开启)
端点ID | 说明 | 默认HTTP | 默认JMX |
---|---|---|---|
auditevents | 展示当前应用程序的审核事件信息。需要一个 AuditEventRepository bean。 | N | Y |
beans | 展示应用中所有 Spring bean 的完整列表。 | N | Y |
caches | 展示所有可用的缓存。 | N | Y |
conditions | 显示在配置和自动配置类上评估的条件以及它们匹配或不匹配的原因。 | N | Y |
configprops | 显示所有 @ConfigurationProperties 的信息。 | N | Y |
env | 显示 ConfigurableEnvironment 中的属性。 | N | Y |
flyway | 显示已应用的任何 Flyway 数据库迁移。需要一个或多个 Flyway bean。 | N | Y |
health | 显示应用程序健康信息。 | Y | Y |
httptrace | 显示 HTTP 跟踪信息(默认情况下,最近 100 次 HTTP 请求-响应交换)。需要一个 HttpTraceRepository bean。 | N | Y |
info | 显示任意应用程序信息。 | Y | Y |
integrationgraph | 显示 Spring Integration 图。需要对 spring-integration-core 。 | N | Y |
loggers | 显示和修改应用程序中 loggers 的配置。 | N | Y |
liquibase | 显示已应用的任何 Liquibase 数据库迁移。需要一个或多个 Liquibase bean。 | N | Y |
metrics | 显示当前应用程序的“指标”信息。 | N | Y |
mappings | 显示所有路径的整理列表 @RequestMapping 。 | N | Y |
scheduledtasks | 显示应用程序中的计划任务。 | N | Y |
sessions | 允许从 Spring Session 支持的会话存储中检索和删除用户会话。需要使用 Spring Session 的基于Servlet 的 Web 应用程序。 | N | Y |
shutdown | 让应用程序正常关闭。默认情况下禁用。 | N | Y |
startup | 显示收集的启动步骤数据 ApplicationStartup 。需要 SpringApplication 配欸只一个 BufferingApplicationStartup 。 | N | Y |
threaddump | 执行线程转储。 | N | Y |
如果您的应用程序是 Web 应用程序(Spring MVC、Spring WebFlux 或 Jersey),可以使用以下附加端点:
端点ID | 说明 | 默认HTTP | 默认JMX |
---|---|---|---|
heapdump | 返回 hprof 堆转储文件。 | N | 不适用 |
jolokia | 通过 HTTP 展示 JMX bean(当 Jolokia 在类路径上时,不适用于 WebFlux)。需要 jolokia-core 依赖。 | N | 不适用 |
logfile | 返回日志文件的内容(如果 logging.file.name 或 logging.file.path 属性已设置)。支持使用 HTTP Range 标头检索日志文件的部分内容。 | N | 不适用 |
prometheus | 以 Prometheus 服务器可以抓取的格式展示指标。需要 micrometer-registry-prometheus 依赖。 | N | 不适用 |
4.端点的启用与禁用
默认情况下,除 shutdown
之外的所有端点都是开启的。如果需要配置一个端点的启用状态,可以使用 management.endpoint.<id>.enabled
属性。例如启用 shutdown
端口:
management.endpoint.shutdown.enabled=true
如果你希望端点是指定哪些启用而不是指定哪些禁用,可以将 management.endpoints.enabled-by-default
属性设置为 false
并想要启用端点的 enabled
属性设置为 true
。例如启用 info
端点并禁用其他所有端点:
management.endpoints.enabled-by-default=false
management.endpoint.info.enabled=true
注意:禁用的端点会完全从应用程序的上下文中删除。如果指向更改公开的端点,可以使用 include
和 exclude
属性。
5.端点的公开
要更改公开的端点,可以使用以下方式指定 HTTP 或 JMX 的 include
和 exclude
属性。
属性 | 默认 |
---|---|
management.endpoints.jmx.exposure.exclude | |
management.endpoints.jmx.exposure.include | * |
management.endpoints.web.exposure.exclude | |
management.endpoints.web.exposure.include | info, health |
include
属性列出了公开的端点 ID;exclude
属性列出不应公开的端点 ID。- 属性
exclude
优于include
属性。
例如:要停止公开通过 JMX 的所有端点并仅公开 health
和 info
端点,请使用以下属性:
management.endpoints.jmx.exposure.include=info,health
符号 *
可用于选择所有的端点。例如:公开通过 HTTP 除 env
和 beans
端点之外的所有内容,请使用以下属性:
management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.exclude=env,beans
注意: 符号 *
在 YAML 中具有特殊函数,因此如果要包含(或排除)所有端点,请务必添加引号:
management:endpoints:web:exposure:include: "*"exclude: "env,beans"
补充: 如果想在暴露端点时实时自己的策略,可以自己注册一个 EndpointFilter
bean。
6.保护 HTTP 端点
我们需要像保护任何其他敏感 URL
一样注意保护 HTTP
端点。如果存在 Spring Security
,则默认情况下使用 Spring Security 的内容协商策略
保护端点。如果希望为 HTTP 端点配置自定义安全性,例如,只允许具有特定角色的用户访问它们,Spring Boot 提供了一些 RequestMatcher
可以与 Spring Security 结合使用的方便对象。
典型的 Spring Security 配置可能类似于以下示例:
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {http.requestMatcher(EndpointRequest.toAnyEndpoint()).authorizeRequests((requests) -> requests.anyRequest().hasRole("ENDPOINT_ADMIN"));http.httpBasic();return http.build();
}
前面的示例使用 EndpointRequest.toAnyEndpoint()
将请求匹配到任何端点,然后确保所有端点都具有该 ENDPOINT_ADMIN
角色。EndpointRequest
上还提供了其他几种匹配器方法。相关的 API 文档地址:https://docs.spring.io/spring-boot/docs/2.4.5/actuator-api/htmlsingle/
如果是在防火墙后部署应用程序,你可能希望无需身份验证即可访问所有执行器端点。可以通过更改 management.endpoints.web.exposure.include
属性来实现,如下所示:
management:endpoints:web:exposure:include: "*"
此外,如果存在 Spring Security,将需要添加自定义安全配置,以允许对端点进行未经身份验证的访问,如下所示:
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throw Exception {http.requestMatcher(EndpointRequest.toAnyEndpoint()).authorizeRequest((requests) ->requests.anyRequest().permitAll());return http.build();
}
注意: 在上面的两个示例中,配置仅适用于执行器断电。由于 Spring Boot 的安全配置在任何 bean 存在的情况下都需要完全退出 SecurityFilterChain
,因此您需要使用 SecurityFilterChain
适用于应用程序其余部分的规则配置额外的 bean。
7.配置 CORS 跨域
可以进行如下配置:
managements:endpoints:web:cors:allowed-origins: "https://example.com"allowed-methos: "GET,POST"
整理完毕,完结撒花~ 🌻
相关文章:

SpringBoot实战(十二)集成Actuator
目录一、简介二、Maven依赖三、使用入门1.HTTP 方式访问端点2.JMX 方式访问端点3.端点信息整理4.端点的启用与禁用5.端点的公开6.保护 HTTP 端点7.配置 CORS 跨域官方文档: https://docs.spring.io/spring-boot/docs/2.4.5/reference/htmlsingle/#production-ready …...

学习系统编程No.7【进程替换】
引言: 北京时间:2023/3/21/7:17,这篇博客本来昨天晚上就能开始写的,但是由于笔试强训的原因,导致时间用在了做题上,通过快2个小时的垂死挣扎,我充分意识到了自己做题能力的缺陷和运用新知识的缺…...

【3.22】操作系统内存管理(整理)、Java并发
3. 内存管理 为什么要有虚拟内存? 我们想要同时在内存中运行多个程序,就需要把进程所使用的地址隔离,所以使用了虚拟内存。简单来说,虚拟内存地址是程序使用的内存地址。物理内存地址是实际存在硬件里面的地址。 操作系统为每个…...

电脑文件丢失怎么找回来
电脑文件丢失怎么找回来?最近打开电脑时,它启动得很慢。刚刚开始我没有没在意,就重启了当我再次打开电脑时,发现桌面上的文件消失了,面对这种意外情况,有什么办法可以快速找到呢? 电脑文件丢失后,想要找回…...

Python(白银时代)——面向对象
基本概念 面向过程 是早期的一个编程概念,类似函数,但是没有返回值 具体做法: 把完成某个需求的所有步骤,从头到尾 逐步实现 将某些功能独立的代码 封装成一个又一个 函数 然后顺序调用不同的函数 特点: 注重 步骤…...

Python流星雨代码
前言 用Python画场流星雨看看,源码见文末公众号哈。 流星类 def __init__(self): self.r ra.randint(50,100) self.t ra.randint(1,3) self.x ra.randint(-2000,1000) #流星的横坐标 self.y ra.randint(0,500) #流星…...

Java语言-----类与对象的秘密
目录 前言 一、类与对象的介绍 二、类的实例化 三.类与对象的使用方法 3.1对象的初始化 3.2内存显示图 四.this的使用方法 总结 😽个人主页: tq02的博客_CSDN博客-C语言,Java领域博主 🌈理想目标:努力学习,向Java进…...

大数据处理学习笔记2.1 初识Spark
文章目录零、本节学习目标一、Spark的概述(一)Spark的组件1、Spark Core2、Spark SQL3、Spark Streaming4、MLlib5、Graph X6、独立调度器、Yarn、Mesos(二)Spark的发展史1、发展简史2、目前最新版本二、Spark的特点(一…...

太强了,英伟达面对ChatGPT还有这一招...
大家好,我是 Jack。 今年可谓是 AI 元年,ChatGPT、AIGC、VITS 都火了一波。 我也先后发布了这几期视频: 这是一个大模型的时代,AI 能在文本、图像、音频等领域大放异彩,得益于大模型。而想要预训练大模型,…...

【微服务】—— Nacos注册中心
文章目录一、Nacos 注册中心的设计原理1、数据模型2、数据⼀致性3、负载均衡4、健康检查二、Nacos 注册中心服务数据模型1、服务(Service)和服务实例(Instance)1)定义服务2)服务元数据3)定义实例…...

GPT-4是个编程高手,真服了!
上周给大家发了一个GPT-4教数学的介绍,很多人都被震撼了,感觉有可能在教育行业引发革命。它在编程领域表现如何?先不说能否替代程序员,这个还有待更多的测试和反馈,我想先试试它能不能像教数学那样教编程。我找了个Jav…...

基于深度学习的车型识别系统(Python+清新界面+数据集)
摘要:基于深度学习的车型识别系统用于识别不同类型的车辆,应用YOLO V5算法根据不同尺寸大小区分和检测车辆,并统计各类型数量以辅助智能交通管理。本文详细介绍车型识别系统,在介绍算法原理的同时,给出Python的实现代码…...

【蓝桥杯C++】3月21日刷题集训ABC-附百分代码,一目了然
目录 刷题集训 A Day 1 成绩分析 Day 1 饮料换购 刷题集训 B Day 1 分巧克力 Day 1 递增三元组 Day 1 小明的衣服 刷题集训 C Day 1 数字三角形 Day 1 跳跃 Day 1 蓝太子序列 刷题集训 A Day 1 成绩分析 题目描述 小蓝给学生…...

HBase高手之路4-Shell操作
文章目录HBase高手之路3—HBase的shell操作一、hbase的shell命令汇总二、需求三、表的操作1.进入shell命令行2.创建表3.查看表的定义4.列出所有的表5.删除表1)禁用表2)启用表3)删除表四、数据的操作1.添加数…...

聊聊SQL审计功能
什么是sql审计SQL审计是指对SQL语句的执行情况进行记录和追踪,包括SQL语句的执行时间、执行次数、执行结果等信息。通过SQL审计,可以对数据库的使用情况进行监控和管理,包括对SQL注入、非法访问、数据泄露等安全问题的检测和防范,…...

Markdown常用语法(字体颜色)
一些不错的帖子 写CSDN博客时,调节字体大小、颜色及其他样式的常用操作方法 设置字体颜色 使用<font>标记: 这是红色字体:<font colorred>我是红色的字体</font>显示效果如下: 这是红色字体:我是…...

I2C模块理解
I2C模块理解 文章目录I2C模块理解1.配置I2C2.信号3.数据传输3.1主机发送3.2主机接收3.3从机发送3.4从机接收4.中断传输5.Aardvark1.配置I2C I2C的特征 只需要两条公共总线(线)即可控制I2C网络上的任何设备无需像UART通信那样事先约定数据传输速率。因此…...

手把手教你使用--常用模块--HC05蓝牙模块,无线蓝牙串口透传模块,(实例:手机蓝牙控制STM32单片机点亮LED灯)
最近在学STM32,基本的学完了,想学几个模块来巩固一下知识,就想到了蓝牙模块。玩啥好难过有很多博客教怎么连的,但自己看起来还是有点糊涂。模块的原理和知识点我就不讲解了,这里我主要手把手记录一下我是如何对蓝牙模块…...

MyBatis高频面试题
目录 1、Mybatis中#和$的区别 2、Mybatis的编程步骤是什么样的 3...

Redis基础篇
redis的三大特点: 支持多数据类型,支持持久化,单线程 多路IO复用 对键操作的命令: keys * 查看当前库所有key exists key 判断key是否存在 del key 删除 unlink key 非阻塞删除,异步删除 expire key …...

unity的C#学习——静态常量和动态常量的定义与使用
定义常量 在C#中,常量是一种不可改变的量,一旦被定义,其值就不能被修改。C#中有两种类型的常量,静态常量和动态常量。 1、静态常量的定义 静态常量是在编译时就已经确定其值的常量,使用const关键字定义。由于在编译…...

栈----数据结构
栈🔆栈的概念🔆栈的结构🔆栈的实现🔆括号匹配问题🔆结语🔆栈的概念 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。**进行数据插入和删除操作的一端称为栈顶&am…...

【人人都能读标准】11. 原理篇总结:一个程序的完整执行过程
本文为《人人都能读标准》—— ECMAScript篇的第11篇。我在这个仓库中系统地介绍了标准的阅读规则以及使用方式,并深入剖析了标准对JavaScript核心原理的描述。 我们一路走了很远很远,终于到了本书原理篇的最后一站。 在原理篇中,我们先讲了…...

sheng的学习笔记-IO多路复用,NIO,BIO,AIO
基础概念IO分为几种:同步阻塞的BIO,同步非阻塞的NIO,异步非阻塞AIO,IO多路复用,信号驱动IO(不常用)对于一个network IO,它会涉及到两个系统对象,一个是调用这个IO的proce…...

【Python入门第三十五天】Python丨文件打开
在服务器上打开文件 假设我们有以下文件,位于与 Python 相同的文件夹中。 demofile.txt Hello! Welcome to demofile.txt This file is for testing purposes. Good Luck!如需打开文件,请使用内建的 open() 函数。 open() 函数返回文件对象ÿ…...

jsoup 框架的使用指南
概述 参考: 官方文档jsoup的使用JSoup教程jsoup 在 GitHub 的开源代码 概念简介 jsoup 是一款基于 Java 的 HTML 解析器,它提供了一套非常省力的 API,不但能直接解析某个 URL 地址、HTML 文本内容,而且还能通过类似于 DOM、CS…...

web前端开发和后端开发哪个难度大?
前言 因为涉及到的具体的应用的领域不同,所以说不能简单地说哪一个难,对于前端而言你会感觉到入门会非常的简单,这也是会给许多人一种错觉,前端很简单,但是只能说是在入门理解上是有利于新手的,前端在主要…...

认证与认可之间有什么区别和联系?
认证与认可之间有什么区别和联系? 当今社会,认证与认可已经深入企业的生活,那么认证与认可之间到底有什么区别和联系呢? 认证,是指由认证机构证明产品、服务、管理体系符合相关技术规范、相关技术规范的强制性要求或者…...

【Java|golang】1626. 无矛盾的最佳球队---最长子序列,不连续,二维数组排序
假设你是球队的经理。对于即将到来的锦标赛,你想组合一支总体得分最高的球队。球队的得分是球队中所有球员的分数 总和 。 然而,球队中的矛盾会限制球员的发挥,所以必须选出一支 没有矛盾 的球队。如果一名年龄较小球员的分数 严格大于 一名…...

C++ 八股文(简单面试题)
1.左值 可寻址变量,持久性; 2.右值 没有变量名,不可寻址,短暂性; 3.指针 指向的内存地址,指针变量存储的就是指向的对象的首地址 4.引用 为一个变量起别名,定义引用的时候一定要初始化&a…...