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 …...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...

python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...