Spring Boot Actuator详解

article/2025/11/9 18:40:51

Actuator简介

什么是Spring Boot Actuator?

  • Spring Boot Actuator 模块提供了生产级别的功能,比如健康检查审计指标收集HTTP跟踪等,帮助我们监控和管理Spring Boot应用。
  • 这个模块是一个采集应用内部信息暴露给外部的模块,上述的功能都可以通过HTTP和JMX访问。
  • 因为暴露内部信息的特性,Actuator也可以和一些外部的应用监控系统整合(Prometheus, Graphite, DataDog等)。这些监控系统提供了出色的仪表板,图形,分析和警报,可帮助你通过一个统一友好的界面,监视和管理你的应用程序。
  • Actuator使用Micrometer与这些外部应用程序监视系统集成。这样一来,只需很少的配置即可轻松集成外部的监控系统。

Micrometer为Java 平台上的性能数据收集提供了一个通用的API,应用程序只需要使用Micrometer的通用API来收集性能指标即可。Micrometer会负责完成与不同监控系统的适配工作,这就使得切换监控系统变得很容易。对比Slf4j之于Java Logger中的定位

Endpoints介绍

Endpoints简介

Spring Boot提供了所谓endpoints(下文翻译为端点)用于外部系统应用程序进行访问和交互。
例如,/health端点提供了关于应用健康情况的一些基础信息。/metrics端点提供了一些有用的应用程序指标(JVM 内存使用、系统CPU使用等)。

Endpoints类型

Actuator模块本来就有的端点我们称之为原生端点。根据端点的作用的话,我们大概可以分为三大类:

  • 应用配置类: 获取应用程序中加载的应用配置、环境变量、自动化配置报告等与Spring Boot应用密切相关的配置类信息。
  • 度量指标类: 获取应用程序运行过程中用于监控的度量指标,比如:内存信息、线程池信息、HTTP请求统计等。
  • 操作控制类: 提供了对应用的关闭等操作类功能。

需要注意的就是:

  • 每一个端点都可以通过配置来单独禁用或者启动
  • 不同于Actuator 1.x,Actuator 2.x 的大多数端点默认被禁掉。 Actuator 2.x中的默认端点增加了/actuator前缀。默认暴露的两个端点为/actuator/health/actuator/info

Endpoints清单

此处使用的是SpringBoot 2.2.8版本,详情请查看Spring官方文件

EndpointHTTP方法描述
/actuatorGET查看有哪些Actuator endpoint是开放的
/actuator/auditeventGET显示应用暴露的审计事件 (比如认证进入、订单失败),需要搭配Spring Security使用,示例代码
/actuator/beansGET查看当前上下文中配置的所有的Bean
/actuator/conditionsGET该端点用来获取应用的自动化配置报告,其中包括所有自动化配置的候选项。同时还列出了每个候选项自动化配置的各个先决条件是否满足。所以,该端点可以帮助我们方便的找到一些自动化配置为什么没有生效的具体原因。
/actuator/configpropsGET查看注入带有@ConfigurationProperties类的properties配置的属性和值,prefix代表前缀
/actuator/env (常用)GET该端点与/configprops不同,它用来获取应用所有可用的环境属性报告。包括:环境变量、JVM属性、应用的配置配置、命令行中的参数(但是会自动过滤掉带有key、password、secret等关键字的properties的值,保护信息安全)
/actuator/flywayGET显示已应用的所有Flyway数据库迁移
/actuator/health (常用)GET查看当前SpringBoot运行的健康指标,值由HealthIndicator的实现类提供(所以可以自定义一些健康指标信息)
/actuator/heapdumpGET会自动生成一个JVM的堆文件
/actuator/infoGET展示了关于应用的一般信息,这些信息从编译文件比如META-INF/build-info.properties或者Git文件比如git.properties或者任何环境的property中获取。
/actuator/mappingsGET查看全部的endpoint(包含 Actuator 的),即路径列表
/actuator/metrics(常用)GET查看有哪些指标可以看(ex: jvm.memory.max、system.cpu.usage),使用/actuator/metrics/{metric.name}可以查看各指标的详细信息
/actuator/scheduledtasksGET查看定時任务的信息
/actuator/shutdownPOST唯一一个需要POST请求的endpoint,使应用程序正常关闭

更多详细的EndPoint可以查看:Spring Boot Actuator [监控与管理]

集成 Actuator

创建示例项目

我们先创建一个demo应用,可以通过Spring Initializr创建:
在这里插入图片描述

引入依赖

Maven

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

Gradle

dependencies {compile("org.springframework.boot:spring-boot-starter-actuator")
}

端点配置

默认暴露端点

我们可以通过以下配置,来配置通过JMX 和 HTTP 暴露的端点。

PropertyDefault
management.endpoints.jmx.exposure.exclude
management.endpoints.jmx.exposure.include*
management.endpoints.web.exposure.exclude
management.endpoints.web.exposure.includeinfo, health

考虑到安全因素,Actuator默认只开放了/actuator/health/actuator/info这两个endpoint,如果要开放其他endpoint,需要额外在application.properties中进行设置。

暴露配置

① 打开所有的监控点

management:endpoints:enabled-by-default: true #暴露所有端点信息web:exposure:include: '*'  #以web方式暴露(不包含shutdown)

② 开放指定的endpoint

management:endpoints:enabled-by-default: true #暴露所有端点信息web:exposure:include: beans,mappings  # 如果指定多个端点,用","分开

③ 关闭指定的endpoint

management:endpoints:web:exposure:exclude: beans# 如果指定多个端点,用","分开include: *

exclude通常会跟include一起用,就是先include了全部,然后再exclude/actuator/beans这个endpoint。
④ 开放shutdown,需额外配置

management:endpoints:shutdown:enabled: true

路径配置

① 默认情况下所有端点都暴露在/actuator路径下,也可以改变/actuator的路径,可以自定义:

management:endpoints:web:base-path: /monitor

设置完重启后,原本內建的/actuator/xxx路径,都会变成/monitor/xxx,可以用来防止被其他人猜到。
② 支持单个endpoint路径定义,比如将health修改成healthcheck

management:endpoints:web:path-mapping:health: healthcheck

管理端口调整

management:server:port: 11011

自定义端口,默认跟server.port一样,可以防止被其他人猜到

端点响应缓存

对于一些不带参数的端点请求会自动进行缓存,我们可以通过如下方式配置缓存时间,下面配置表示 beans端点的缓存时间为100s

management:endpoint:beans:cache:time-to-live: 100s

端点保护

如果开启了Actuator默认不开放的endpoints,建议一定要加上Spring Security用于endpoint保护,避免重要信息泄露,必须防止未经授权的外部访问。

这里我们使用Spring Security保护,首先添加相关依赖:

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

添加之后,我们需要定义安全校验规则,来覆盖Spring Security的默认配置。
这里给出两个版本的模板配置:

import org.springframework.boot.actuate.autoconfigure.security.servlet.EndpointRequest;
import org.springframework.boot.actuate.context.ShutdownEndpoint;
import org.springframework.boot.autoconfigure.security.servlet.PathRequest;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;@Configuration
public class ActuatorSecurityConfig extends WebSecurityConfigurerAdapter {/** version1:* 1. 限制 '/shutdown'端点的访问,只允许ACTUATOR访问* 2. 允许外部访问其他的端点* 3. 允许外部访问静态资源* 4. 允许外部访问 '/'* 5. 其他的访问需要被校验* version2:* 1. 限制所有端点的访问,只允许ACTUATOR访问* 2. 允许外部访问静态资源* 3. 允许外部访问 '/'* 4. 其他的访问需要被校验*/@Overrideprotected void configure(HttpSecurity http) throws Exception {// version1
//        http
//                .authorizeRequests()
//                    .requestMatchers(EndpointRequest.to(ShutdownEndpoint.class))
//                        .hasRole("ADMIN")
//                .requestMatchers(EndpointRequest.toAnyEndpoint())
//                    .permitAll()
//                .requestMatchers(PathRequest.toStaticResources().atCommonLocations())
//                    .permitAll()
//                .antMatchers("/")
//                    .permitAll()
//                .antMatchers("/**")
//                    .authenticated()
//                .and()
//                .httpBasic();// version2http.authorizeRequests().requestMatchers(EndpointRequest.toAnyEndpoint()).hasRole("ADMIN").requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll().antMatchers("/").permitAll().antMatchers("/**").authenticated().and().httpBasic();}
}

application.properties的相关配置如下:

# Spring Security Default user name and password
spring.security.user.name=actuator
spring.security.user.password=actuator
spring.security.user.roles=ADMIN

我们使用浏览器访问http://localhost:8080/actuator/health端点接口,会先弹出个登录框,只有登录后才能访问。

定制Endpoint

定制化health信息

① 配置Health显示情况,详细界面显示配置

management:health:enabled: trueshow-details: always #总是显示详细信息。可显示每个模块的状态信息

② 定制Health Endpoint
添加信息:
1)继承 AbstractHealthIndicator 类
2)定义参数 Health.Builder builder
3)向参数 builder 中添加状态及相关信息

@Component
//类名截去HealthIndicator后,为显示时的组件名
public class MyComHealthIndicator extends AbstractHealthIndicator {//真实的检查方法@Overrideprotected void doHealthCheck(Health.Builder builder) throws Exception {// 获取链接进行测试Map<String, Object> map = new HashMap<>();//检查完成if (1 == 1) {//健康builder.status(Status.UP);map.put("count", 1);} else {//不健康builder.status(Status.OUT_OF_SERVICE);map.put("err", "连接超时");map.put("time", 3000);}builder.withDetail("code", 100).withDetails(map);}
}

定制info信息

编写InfoContributor
1)继承 public class ExampleInfoContributor implements InfoContributor
2)定义 Info.Builder builder 参数
3)向builder中添加参数信息

@Component
public class ExampleInfoContributor implements InfoContributor {@Overridepublic void contribute(Info.Builder builder) {builder.withDetail("msg", "你好").withDetail("hello", "uclass").withDetails(Collections.singletonMap("key", "value"));}
}

定制Metrics信息

① 利用service层构造器,在注册中心中添加cityService.saveCity.count指标

@Service
public class CityServiceImpl implements CityServices {@AutowiredCityMapper cityMapper;Counter counter;//利用构造器,在注册中心中添加cityService.saveCity.count指标public CityServiceImpl(MeterRegistry meterRegistry) {//指标中心注册新的指标项counter = meterRegistry.counter("cityService.saveCity.count");}public void saveCity(City city) {counter.increment();cityMapper.insertCity(city);}
}

② 在配置类中新建配置,添加指标

@ServletComponentScan(basePackages = "com.uclass.thymeleaf")
@Configuration
public class AdminWebConfig implements WebMvcConfigurer {@BeanMeterBinder queueSize(Queue queue) {return (registry) -> Gauge.builder("queueSize", queue::size).register(registry);}
}
    //利用构造器,在注册中心中添加cityService.saveCity.count指标public CityServiceImpl(MeterRegistry meterRegistry) {//指标中心注册新的指标项counter = meterRegistry.counter("cityService.saveCity.count");}

自定义新端点

利用 @Endpoint(id = “myservice”) 注解

  • id属性代表新增的端点名称
  • 利用@ReadOperation、@WritOperation注解,在端点中添加信息
@Component
@Endpoint(id = "myservice")
public class MyServiceEndPoint {@ReadOperationpublic Map getDockerInfo () {//端点的读操作return Collections.singletonMap("dockerInfo", "docker start...");}@WriteOperationprivate void restartDocker(){System.out.println("docker restarted....");}
}

参考资料

SpringBoot 指标监控——Actuator
Spring boot——Actuator 详解


http://chatgpt.dhexx.cn/article/iLPuR9LT.shtml

相关文章

C# 反射之Activator用法举例

概述 程序运行时&#xff0c;通过反射可以得到其它程序集或者自己程序集代码的各种信息&#xff0c;包括类、函数、变量等来实例化它们&#xff0c;执行它们&#xff0c;操作它们&#xff0c;实际上就是获取程序在内存中的映像&#xff0c;然后基于这个映像进行各种操作。 Acti…

将IPA放到服务器提供下载

2015年12月15日 09:45:16 LC_畅 阅读数&#xff1a;3696 &#xff0a; 上传到服务器我们需要两个文件&#xff0c;一个ipa和一个 plist文件 &#xff0a; 注意plist文件和ipa包的名字必须要相同&#xff08;最好取名英文&#xff09; 第一步&#xff1a;把ipa文件放到你们服务…

ipa文件包获取服务器地址,iOS获取App ipa包以及资源文件

要获得线上APP的ipa文件&#xff0c;现在有以下几种方案 1.通过PP助手下载安装到手机的应用 2.通过iTools助手下载安装到手机的应用 3.通过Apple Configurator 2(Mac商店)获取 前两种方案网上的教程很多&#xff0c;这里只介绍第三种方案 首先 去Mac上的App Store下载Apple Con…

AppleStore 原始ipa文件提取

//TODO Apple Configurator 2提取ipa文件_饿到饱的博客-CSDN博客安装Apple Configurator 2从Mac AppStore安装Apple Configurator 2下载ipa打开后连接设备&#xff0c;选中设备点击添加&#xff0c;如果没登录就登录Apple ID&#xff0c;登录后会把你在AppStore下过的应用都列…

获取ipa文件下载链接(appstore下载链接)

获取apptore下载链接 所需工具: 一台越狱的iphone 抓包工具(fiddler或burp等) 步骤 1、ios10以下的版本,越狱之后下载插件ssl kill就可对appstore进行抓包 2、ios11以后的版本,越狱后要想访问appstore还需appstore++插件 3、打开appstore,找到要下载的软件,点击下…

Mac 电脑下载 AppStore 中的 ipa 软件包详细流程

附&#xff1a;iPhone 移除描述文件详细步骤&#xff08;Apple Configurator 2&#xff09; 1、Mac 电脑中安装 Apple Configurator 2 软件。 2、电脑连接手机&#xff0c;并信任&#xff0c;在所有设备中&#xff0c;选中设备&#xff0c;然后点击顶部的加号&#xff0c;选…

关于直接下载第三方IPA应用分发平台之蒲公英的研究

目前基于第三方应用分发的平台比较常用的就属蒲公英、fir等&#xff0c;在我们提交到平台后&#xff0c;我们可以通过扫描应用二维码来下载&#xff0c;比如蒲公英平台如下&#xff1a; 那么以上是非常普通的一个操作过程&#xff0c;问题来了&#xff1a;如何直接在电脑端下载…

ipa在线安装搭建_GBox:一款ipa签名安装下载神器

(主要功能:ipa签名安装、ipa安装包下载) 最新版使用教程点这里,并免费附送有效的企业证书: Alex.Leung:GBox免越狱签名安装IPA教程​zhuanlan.zhihu.com 一、推荐理由 让我们对市面上主流ipa安装工具作个对比: Shu: 付费应用,并且得配合捷径脚本使用JSBox:付费应用,…

苹果iPA游戏软件资源下载网站

苹果iPA游戏软件资源下载网站推荐&#xff0c;这篇文章我以比较公平的方式整理一下目前一些苹果iPA资源下载网站&#xff0c;每个网站的内容可以参考对应的截图&#xff0c;从而快速选择适合自己的资源站点。 1.iPA商店&#xff1a;https://ipa.store/ 2.Decrypt IPA Store&…

【已解决】ipa降级教学 苹果旧版APP下载

ipa降级教学 苹果旧版APP下载 平板有个软件新版本不好用&#xff0c;需要降级&#xff0c;所以出一个教学。教程基于一个旧版本下载的软件。 下载链接会放在这里&#xff0c;自行下载。使用前注册并登录. 安装包下载&#xff1a; 旧版APP下载软件: https://pan.baidu.com/s…

自建ipa下载服务器的方法(最简单,使用在线工具)

自建ipa下载服务非常复杂&#xff0c;首先要拥有域名&#xff0c;其实要用https&#xff0c;然后还要写plist那些&#xff0c;plist的语法还非常复杂&#xff0c;对于普通的ios开发者来说&#xff0c;自建下载服务非常麻烦&#xff0c;也没有必要。 因此&#xff0c;我们测试i…

输入下载页面链接自动获取ipa下载地址,支持本地下载,支持蒲公英和fir及绝大多数自定义下载页

IpaDownloadTool github地址 项目中使用的第三方:ALToastView、SGQRCode、BackButtonHandler Release版本 点击此处直接下载IpaDownloadTool安装包(ipa) 功能 此工具用来快捷下载/储存第三方来源的ipa支持蒲公英、fir下载页面拦截ipa地址、ipa下载支持其他网站自定义h5页…

下载应用 ipa 包,不妨试试这款开源工具

&#x1f447;&#x1f447;关注后回复 “进群” &#xff0c;拉你进程序员交流群&#x1f447;&#x1f447; 来源丨小集 https://mp.weixin.qq.com/s/89BXRtejOJbhuzt7xbIOAg 开发人员经常有这样一个需求&#xff0c;将目前应用的 ipa 包下载下来&#xff0c;做一些研究性工作…

无需越狱手机,下载越狱版本IPA的方法

这两天在看一些逆向反编译的知识&#xff0c;很多工具的使用都是针对砸壳的ipa包&#xff0c;所以在了解这一部分的前提就需要&#xff1a; 越狱手机&#xff0c;下载越狱的IPA文件。学会对正版IPA进行脱壳。 没有越狱手机又不会脱壳技术的我&#xff0c;找到了一种简单的方法…

VMware 虚拟机安装 xp 蓝屏解决方法

我们在创建虚拟机的时候&#xff0c;选择的是去创建一个默认的虚拟机&#xff0c;然后创建完成直接将系统装在了这个虚拟机中 而这&#xff0c;就是这个问题的所在&#xff0c;对于网上下载的 sp3_iso 系统来讲&#xff0c;是需要一个 ida 的硬盘&#xff0c;就是要将虚拟机的硬…

VMware软件虚拟机不能全屏的问题

VMware装上Ubuntu系统后&#xff0c;发现虚拟机不是全屏的&#xff0c;如下&#xff1a; 解决办法&#xff1a;要么手动调整分辨率&#xff0c;要么安装vmware tools&#xff0c;下面介绍的后者。 ①先关闭虚拟件&#xff0c;右键&#xff0c;选择“设置” ②在硬件中选择&…

vmware16虚拟机如何查看宿主机文件

vmware-hgfsclient vmhgfs-fuse .host:/ /mnt/hgfs -o nonempty -o allow_other ls /mnt/hgfs 使用VMware虚拟机时&#xff0c;共享主机的文件夹可以方便的在虚拟机和主机之间传递文件&#xff0c;本文以vmware16为例给大家分享共享本机的文件夹的详细过程&#xff0c;感兴趣的…

VMWare Fusion虚拟机安装与配置教程

很多时候&#xff0c;我们都有用虚拟机的需求&#xff1a;比如用着Mac突然有一个软件只支持Windows&#xff0c;并且还需要与macOS上的软件搭配使用&#xff0c;况且你没有Windows电脑&#xff0c;这个时候虚拟机就能帮上大忙。在macOS上&#xff08;笔者用的是MacBook Air&…

VMware创建虚拟机方法(已WindowsXP为例)

前言&#xff1a; 所需工具&#xff1a; VMware16或任意一个VMware的版本&#xff08;博主已VMware16为例&#xff09; ISO&#xff08;博主已WindowsXP为例&#xff09; ISO下载位置&#xff08;如已有请忽略&#xff09;&#xff1a; csdn下载 msdn下载 步骤&#xff…

xp虚拟机安装方法

首先&#xff0c;去msdn下载xp镜像文件MSDN, 我告诉你 - 做一个安静的工具站 用迅雷下载 之后打开vmware&#xff0c;下载链接VMware - Delivering a Digital Foundation For Businesses 点击添加虚拟机-->选择典型 按照要求一步步完成 建议xp内存&#xff1a;4096mb 建…