当前位置: 首页 > news >正文

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 应用 的组件,可以通过 HTTPJMX 或远程 Shell 访问应用的运行时信息和统计数据。Actuator 提供了一些常用的端点(endpoint),可以用来获取应用的健康状况环境信息配置信息日志 等。

端点:指的是用于监控应用服务的指标,比如应用服务的健康状况等,一般是 HTTPJMX 接口形式。

常用的端点包括:

  • /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 服务器是无法使用的。

jconsoleJMX 服务一起使用,通过 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 ActuatorJMX 中默认暴露出来的端点了。(这里可以发现:JMX 暴露的端点比 HTTP 暴露的端点更多)

在这里插入图片描述

3.端点信息整理

以下是与技术无关的可用端点:

(HTTP 方式默认只开启 healthinfo,JMX 方式默认全部开启)

端点ID说明默认HTTP默认JMX
auditevents展示当前应用程序的审核事件信息。需要一个 AuditEventRepository bean。NY
beans展示应用中所有 Spring bean 的完整列表。NY
caches展示所有可用的缓存。NY
conditions显示在配置和自动配置类上评估的条件以及它们匹配或不匹配的原因。NY
configprops显示所有 @ConfigurationProperties 的信息。NY
env显示 ConfigurableEnvironment 中的属性。NY
flyway显示已应用的任何 Flyway 数据库迁移。需要一个或多个 Flyway bean。NY
health显示应用程序健康信息。YY
httptrace显示 HTTP 跟踪信息(默认情况下,最近 100 次 HTTP 请求-响应交换)。需要一个 HttpTraceRepository bean。NY
info显示任意应用程序信息。YY
integrationgraph显示 Spring Integration 图。需要对 spring-integration-coreNY
loggers显示和修改应用程序中 loggers 的配置。NY
liquibase显示已应用的任何 Liquibase 数据库迁移。需要一个或多个 Liquibase bean。NY
metrics显示当前应用程序的“指标”信息。NY
mappings显示所有路径的整理列表 @RequestMappingNY
scheduledtasks显示应用程序中的计划任务。NY
sessions允许从 Spring Session 支持的会话存储中检索和删除用户会话。需要使用 Spring Session 的基于Servlet 的 Web 应用程序。NY
shutdown让应用程序正常关闭。默认情况下禁用。NY
startup显示收集的启动步骤数据 ApplicationStartup。需要 SpringApplication 配欸只一个 BufferingApplicationStartupNY
threaddump执行线程转储。NY

如果您的应用程序是 Web 应用程序(Spring MVC、Spring WebFlux 或 Jersey),可以使用以下附加端点:

端点ID说明默认HTTP默认JMX
heapdump返回 hprof 堆转储文件。N不适用
jolokia通过 HTTP 展示 JMX bean(当 Jolokia 在类路径上时,不适用于 WebFlux)。需要 jolokia-core 依赖。N不适用
logfile返回日志文件的内容(如果 logging.file.namelogging.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

注意:禁用的端点会完全从应用程序的上下文中删除。如果指向更改公开的端点,可以使用 includeexclude 属性。

5.端点的公开

要更改公开的端点,可以使用以下方式指定 HTTP 或 JMX 的 includeexclude 属性。

属性默认
management.endpoints.jmx.exposure.exclude
management.endpoints.jmx.exposure.include*
management.endpoints.web.exposure.exclude
management.endpoints.web.exposure.includeinfo, health
  • include 属性列出了公开的端点 ID;
  • exclude 属性列出不应公开的端点 ID。
  • 属性 exclude 优于 include 属性。

例如:要停止公开通过 JMX 的所有端点并仅公开 healthinfo 端点,请使用以下属性:

management.endpoints.jmx.exposure.include=info,health

符号 * 可用于选择所有的端点。例如:公开通过 HTTP 除 envbeans 端点之外的所有内容,请使用以下属性:

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 跨域官方文档&#xff1a; https://docs.spring.io/spring-boot/docs/2.4.5/reference/htmlsingle/#production-ready …...

学习系统编程No.7【进程替换】

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

【3.22】操作系统内存管理(整理)、Java并发

3. 内存管理 为什么要有虚拟内存&#xff1f; 我们想要同时在内存中运行多个程序&#xff0c;就需要把进程所使用的地址隔离&#xff0c;所以使用了虚拟内存。简单来说&#xff0c;虚拟内存地址是程序使用的内存地址。物理内存地址是实际存在硬件里面的地址。 操作系统为每个…...

电脑文件丢失怎么找回来

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

Python(白银时代)——面向对象

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

Python流星雨代码

前言 用Python画场流星雨看看&#xff0c;源码见文末公众号哈。 流星类 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的使用方法 总结 &#x1f63d;个人主页&#xff1a; tq02的博客_CSDN博客-C语言,Java领域博主 &#x1f308;理想目标&#xff1a;努力学习&#xff0c;向Java进…...

大数据处理学习笔记2.1 初识Spark

文章目录零、本节学习目标一、Spark的概述&#xff08;一&#xff09;Spark的组件1、Spark Core2、Spark SQL3、Spark Streaming4、MLlib5、Graph X6、独立调度器、Yarn、Mesos&#xff08;二&#xff09;Spark的发展史1、发展简史2、目前最新版本二、Spark的特点&#xff08;一…...

太强了,英伟达面对ChatGPT还有这一招...

大家好&#xff0c;我是 Jack。 今年可谓是 AI 元年&#xff0c;ChatGPT、AIGC、VITS 都火了一波。 我也先后发布了这几期视频&#xff1a; 这是一个大模型的时代&#xff0c;AI 能在文本、图像、音频等领域大放异彩&#xff0c;得益于大模型。而想要预训练大模型&#xff0c…...

【微服务】—— Nacos注册中心

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

GPT-4是个编程高手,真服了!

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

基于深度学习的车型识别系统(Python+清新界面+数据集)

摘要&#xff1a;基于深度学习的车型识别系统用于识别不同类型的车辆&#xff0c;应用YOLO V5算法根据不同尺寸大小区分和检测车辆&#xff0c;并统计各类型数量以辅助智能交通管理。本文详细介绍车型识别系统&#xff0c;在介绍算法原理的同时&#xff0c;给出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&#xff0e;进入shell命令行2&#xff0e;创建表3&#xff0e;查看表的定义4&#xff0e;列出所有的表5&#xff0e;删除表1)禁用表2)启用表3)删除表四、数据的操作1&#xff0e;添加数…...

聊聊SQL审计功能

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

Markdown常用语法(字体颜色)

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

I2C模块理解

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

手把手教你使用--常用模块--HC05蓝牙模块,无线蓝牙串口透传模块,(实例:手机蓝牙控制STM32单片机点亮LED灯)

最近在学STM32&#xff0c;基本的学完了&#xff0c;想学几个模块来巩固一下知识&#xff0c;就想到了蓝牙模块。玩啥好难过有很多博客教怎么连的&#xff0c;但自己看起来还是有点糊涂。模块的原理和知识点我就不讲解了&#xff0c;这里我主要手把手记录一下我是如何对蓝牙模块…...

MyBatis高频面试题

目录 1、Mybatis中#和$的区别 2、Mybatis的编程步骤是什么样的 3...

Redis基础篇

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

iStore软件中心:OpenWRT插件管理解决方案与实战指南

iStore软件中心&#xff1a;OpenWRT插件管理解决方案与实战指南 【免费下载链接】istore 一个 Openwrt 标准的软件中心&#xff0c;纯脚本实现&#xff0c;只依赖Openwrt标准组件。支持其它固件开发者集成到自己的固件里面。更方便入门用户搜索安装插件。The iStore is a app s…...

Apollo配置中心:从基础概念到实战应用全解析

1. Apollo配置中心初探&#xff1a;为什么我们需要它&#xff1f; 想象一下你正在开发一个电商系统&#xff0c;数据库连接地址、支付接口密钥、商品库存阈值等配置信息散落在20个不同的properties文件里。每次修改配置都需要重新打包部署&#xff0c;半夜三点被叫起来改生产环…...

OpenClaw技能扩展实战:基于Qwen3-32B-Chat实现公众号自动发布

OpenClaw技能扩展实战&#xff1a;基于Qwen3-32B-Chat实现公众号自动发布 1. 为什么需要自动化公众号发布 作为一个技术博主&#xff0c;我每周都要在公众号发布2-3篇技术文章。最让我头疼的不是写作本身&#xff0c;而是发布前的繁琐流程&#xff1a;手动调整Markdown格式、…...

模拟IC设计中的‘效率’权衡:深入理解gm/ID如何平衡增益、带宽与噪声

模拟IC设计中的‘效率’权衡&#xff1a;深入理解gm/ID如何平衡增益、带宽与噪声 在模拟电路设计的浩瀚海洋中&#xff0c;gm/ID参数犹如一座灯塔&#xff0c;指引着工程师们在增益、带宽与噪声的复杂权衡中寻找最优解。这个看似简单的比值背后&#xff0c;蕴含着晶体管工作的…...

一键部署体验:Nomic-Embed-Text-V2-MoE在星图GPU平台上的开箱即用Demo

一键部署体验&#xff1a;Nomic-Embed-Text-V2-MoE在星图GPU平台上的开箱即用Demo 你是不是也遇到过这种情况&#xff1f;看到一篇技术文章介绍某个很酷的开源模型&#xff0c;比如Nomic-Embed-Text-V2-MoE&#xff0c;心里痒痒的想立刻试试。结果一搜部署教程&#xff0c;又是…...

Token 中文定名词元,国产 AI 工具如何抢占词元红利?

3 月 23 日&#xff0c;中国发展高层论坛 2026 年年会上&#xff0c;国家数据局局长刘烈宏正式官宣&#xff1a;AI 领域核心术语 Token 的中文标准译名确定为“词元”。这一官方定名&#xff0c;结束了之前 “令牌”“代币”“词块” 等译法混用的行业乱象&#xff0c;为中国 A…...

国风美学模型与卷积神经网络(CNN)结合:风格迁移与质量增强

国风美学模型与卷积神经网络&#xff08;CNN&#xff09;结合&#xff1a;风格迁移与质量增强 最近在尝试用AI生成国风图像时&#xff0c;我遇到了两个挺实际的问题。一个是生成的图片虽然意境不错&#xff0c;但风格上总觉得少了点传统水墨丹青的韵味&#xff1b;另一个是&am…...

深入解析ACS SPiiPlus运动控制器的托管接口设计与实现

1. ACS SPiiPlus运动控制器托管接口概述 在工业自动化领域&#xff0c;运动控制器的性能直接影响着设备的精度和效率。ACS SPiiPlus系列作为业内知名的高性能运动控制器&#xff0c;其托管接口设计一直是工程师们关注的焦点。这套接口本质上是一套软件中间层&#xff0c;它架起…...

Release It! 终极自动化发布工具:5分钟配置完整版本管理流程

Release It! 终极自动化发布工具&#xff1a;5分钟配置完整版本管理流程 【免费下载链接】release-it &#x1f680; Automate versioning and package publishing 项目地址: https://gitcode.com/gh_mirrors/re/release-it Release It! 是一款强大的自动化发布工具&…...

vLLM-v0.17.1助力Java微服务:高并发下的模型推理集成方案

vLLM-v0.17.1助力Java微服务&#xff1a;高并发下的模型推理集成方案 1. 引言&#xff1a;当Java微服务遇见大模型推理 最近两年&#xff0c;大模型技术在企业应用中的落地速度远超预期。作为Java开发者&#xff0c;我们可能已经习惯了SpringBoot生态的舒适区&#xff0c;但当…...