Spring Boot Actuator使用
Spring Boot Actuator 是一个非常强大的模块,它为 Spring Boot 应用程序提供了生产级别的监控和管理功能。以下是对 Spring Boot Actuator 的详细解析:
1. **什么是 Actuator**:
- Spring Boot Actuator 是一个扩展模块,用于增强 Spring Boot 应用程序的管理和监控能力。它提供了一系列的 "endpoint"(端点),这些端点暴露了应用程序的各种信息和操作,如健康检查、审计、指标收集、HTTP 跟踪等。
2. **启用 Actuator**:
- 在 Spring Boot 应用中启用 Actuator 非常简单,只需要在项目的 `pom.xml` 或者 `build.gradle` 文件中添加 `spring-boot-starter-actuator` 依赖即可。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
3. **配置 Actuator**:
- Actuator 的配置主要在 `application.yml` 或 `application.properties` 文件中进行。通过 `management` 命名空间下的选项可以控制 Actuator 端点的行为,包括是否启用、公开以及通过何种方式(如 HTTP 或 JMX)访问。
在 Spring Boot 2.x 中为了安全期间,Actuator 只开放了两个端点 /actuator/health
和 /actuator/info
。可以在配置文件中设置打开。
可以打开所有的监控点
management:
endpoints:
web:
exposure:
include: "*"
“*”号代表启用所有的监控端点,可以单独启用,例如,health
,info
,metrics
等
4. **端点(Endpoints)**:
- Actuator 提供了许多内置的端点,每个端点都提供了特定的信息或操作。一些常见的端点包括:
- `/health`: 提供应用程序的基本健康状态信息。
- `/info`: 提供关于应用程序的元数据信息,如版本号、构建日期等。
- `/metrics`: 提供各种度量指标,如内存使用情况、CPU 使用率等。
- `/trace`: 提供最近的 HTTP 请求跟踪信息。
- `/dump`: (仅在 Web 环境下可用)提供线程 dump 信息。
- `/shutdown`: (默认禁用)允许通过 HTTP 关闭应用程序。
5. **安全性考虑**:
- 由于 Actuator 端点可能暴露敏感信息,因此需要对它们进行适当的安全控制。可以通过配置 Spring Security 或其他安全机制来限制对端点的访问。
6. **定制和扩展**:
- Actuator 允许开发者自定义端点或者扩展内置端点的功能。可以通过实现 `Endpoint` 接口或者使用 `@Endpoint`、`@ReadOperation`、`@WriteOperation` 等注解来创建自定义端点。
7. **与技术无关性**:
- 在 Spring Boot 2.x 中,Actuator 变得更加与技术无关,这意味着它能够更好地适应不同的环境和技术栈。
8. **Service Mesh 支持**:
- 在 Service Mesh 架构中,Actuator 的功能同样重要,因为它可以帮助监控和管理运行在分布式环境中的微服务。
总的来说,Spring Boot Actuator 是一个强大而灵活的工具,它极大地增强了 Spring Boot 应用程序的可观测性和可管理性,是生产环境中不可或缺的一部分。通过合理配置和使用 Actuator,开发者可以更好地监控和调试应用程序,及时发现并解决问题,从而提高系统的稳定性和可靠性。
浏览器打开链接http://localhost:8080/actuator/
可以看到所有支持的连接,默认只有
/actuator /actuator/health /actuator/health/{component} /actuator/health/{component}/{instance} /actuator/info
使用场景:
Actuator 几乎监控了应用涉及的方方面面,我们重点讲述一些经常在项目中常用的命令。
health
health 主要用来检查应用的运行状态,这是我们使用最高频的一个监控点。通常使用此接口提醒我们应用实例的运行状态,以及应用不”健康“的原因,比如数据库连接、磁盘空间不够等。
默认情况下 health 的状态是开放的,添加依赖后启动项目,访问:http://localhost:8080/actuator/health即可看到应用的状态。
{ "status" : "UP" }
举个例子,如果你的应用使用 Redis,RedisHealthindicator
将被当作检查的一部分;如果使用 MongoDB,那么MongoHealthIndicator
将被当作检查的一部分。
可以在配置文件中关闭特定的健康检查指标,比如关闭 redis 的健康检查:
management: health: redise: enabled: false
shutdown
开启接口优雅关闭 Spring Boot 应用,要使用这个功能首先需要在配置文件中开启:
management: endpoint: shutdown: enabled: true
metrics 端点
metrics 是一个非常重要的监控端点,其监控内容覆盖了 JVM 内存、堆、类加载、处理器和 tomcat 容器等一些重要指标:
http://localhost:11360/actuator/metrics
可以看到这里面包含了非常多的指标,任意访问一个指标就可以查看对应的指标信息:
http://localhost:11360/actuator/metrics/hikaricp.connections.acquire
除了使用 metrics 端点默认的这些统计指标外,我们还可以实现自定义统计指标。Metrics 提供 4 种基本的度量类型:Gauge、Counter、Timer、Summary。下面分别进行介绍。
1,Gauge(计量器)
Gauge(计量器)是最简单的度量类型,只有一个简单的返回值,他用来记录一些对象或者事物的瞬时值。
(1)假设我们在一个 Contoller 使用一个类型为 Gauge 的计数器来记录一个数值:
@RestControllerpublic class HelloController { @GetMapping("/hello") public void hello() { Metrics.gauge("user.test.gauge", 3); }}
(2)通过 /actuator/metrics 接口可以看到我们自定义的这个指标:
(3)假设我们访问了 /hello 接口后,再次通过 /actuator/metrics/user.test.gauge 这个自定义度量的消息信息,显示如下:
2,Counter(计数器)
Counter(计数器)简单理解就是一种只增不减的计数器。它通常用于记录服务的请求数量、完成的任务数量、错误的发生数量等等。
(1)为方便使用首先我们自定义一个计数器服务:
@Servicepublic class MyCounterService { static final Counter userCounter = Metrics.counter("user.counter.total", "services", "demo"); public void processCollectResult() { userCounter.increment(1D); }}
(2)然后增加一个 controller,触发这个服务:
@RestControllerpublic class HelloController { @Autowired MyCounterService myCounterService; @GetMapping("/hello") public void hello() { myCounterService.processCollectResult(); }}
(3)通过 /actuator/metrics 接口可以看到我们自定义的这个指标:
(4)假设我们访问了 3 次 /hello 接口,再次通过 /actuator/metrics/user.counter.total 这个自定义度量的消息信息,显示如下:
3,Timer(计时器)
Timer(计时器)可以同时测量一个特定的代码逻辑块的调用(执行)速度和它的时间分布。
简单来说,就是在调用结束的时间点记录整个调用块执行的总时间,适用于测量短时间执行的事件的耗时分布,例如消息队列消息的消费速率。
(1)假设我们在一个 Contoller 使用 Timer 来记录某个方法的执行时长:
注意:在实际生产环境中,可以通过 spring-aop 把记录方法耗时的逻辑抽象到一个切面中,这样就能减少不必要的冗余的模板代码。
@RestControllerpublic class HelloController { private Timer timer = Metrics.timer("user.test.timer","timer", "timersample"); @GetMapping("/hello") public void hello() { // 执行createOrder方法并记录执行时间 timer.record(() -> createOrder()); } //模拟方法耗时 private void createOrder() { try { TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) { } }}
(2)假设我们访问了 3 次 /hello 接口,再次通过 /actuator/metrics/user.test.timer 这个自定义度量的消息信息,显示如下:
4,Summary(摘要)
Summary(摘要)用于跟踪事件的分布。它类似于一个计时器,但更一般的情况是,它的大小并不一定是一段时间的测量值。
在 micrometer 中,对应的类是 DistributionSummary,它的用法有点像 Timer,但是记录的值是需要直接指定,而不是通过测量一个任务的执行时间。
(1)假设我们在一个 Contoller 使用 Summary 来连续记录三次值:
@RestControllerpublic class HelloController { private DistributionSummary summary = Metrics.summary("user.test.summary","summary", "summarysample"); @GetMapping("/hello") public void hello() { summary.record(2D); summary.record(3D); summary.record(4D); }}
(2)假设我们访问 /hello 接口后,再次通过 /actuator/metrics/user.test.summary 这个自定义度量的消息信息,显示如下:
/loggers 端点
-
查看日志等级
/loggers
端点暴露了我们程序内部配置的所有logger的信息。我们访问
/actuator/loggers
可以看到:
你也可以通过下述方式访问单独一个logger:
http://localhost:8080/actuator/loggers/{name}
比如我现在访问
root
logger,
http://localhost:8080/actuator/loggers/root:
{ "configuredLevel": "INFO", "effectiveLevel": "INFO"}
-
改变运行时日志等级
/loggers
端点能够动态修改你的日志等级。
比如,我们可以通过以下几种方式来修改
root
logger的日志等级。我们只需要发起一个URL 为
http://localhost:8080/actuator/loggers/root
的
POST
请求,POST报文如下:
{ "configuredLevel": "DEBUG"}
1、使用工具修改:
2、使用浏览器修改:
先在chrome浏览器中,按F12打开console(控制台);然后执行以下脚本(url参数根据自己需求进行修改),回车执行。
fetch(new Request('http://localhost:8080/masl/actuator/loggers/ROOT',{method:'POST',headers: {'Content-Type': 'application/json;charset=UTF-8'},body:"{"configuredLevel": "DEBUG"}"})).then((resp)=>{console.log(resp)})
3、使用shell脚本修改:
curl -X "POST" "http://localhost:8080/masl/actuator/loggers/ROOT" -H "Content-Type: application/json;charset=UTF-8" -d '{"configuredLevel": "DEBUG"}'
仔细想想,这个功能是不是非常有用。还可以只修改某个类的日志级别(把上面的ROOT替换成类的全路径,如:com.zat.asl.MaslApplication)
如果在生产环境中,你想要你的应用输出一些Debug信息以便于你诊断一些异常情况,你只需要按照上述方式就可以修改,而不需要重启应用。
参考:https://www.shangyexinzhi.com/article/8551753.html
Spring Boot Monitor做监控页面
<dependency> <groupId>cn.pomit</groupId> <artifactId>spring-boot-monitor</artifactId> <version>0.0.1</version> </dependency>
Spring Boot Monitor是一个对Spring boot admin监控工具做修改并适配单机的监控工具,完美继承了Spring boot admin的风格,直接使用actuator的指标进行显示。
前面maven依赖中,已经说明依赖spring-boot-monitor,这时,无需其他配置.
访问http://127.0.0.1:8080/monitor
, 自动跳转到Spring Boot Monitor的监控页面。
可以对Spring boot的各项指标一目了然,还可以进行简单的操作。
当然,如果Spring boot actuator的指标被限制了,它也拿不到相应的指标了,因为它是直接请求actuator接口的。
参考:https://blog.csdn.net/qq_45635347/article/details/131443687
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?