网站首页 > 编程文章 正文
1. 概念
Spring Boot Actuator 是 Spring Boot 提供的一个强大功能模块,用于监控和管理 Spring Boot 应用程序的状态。Actuator 提供了丰富的内置端点,开发者可以通过这些端点实时查看应用的健康状态、指标数据、环境配置、内存使用等信息,帮助开发者轻松进行应用的监控和管理。
Actuator 是通过 spring-boot-starter-actuator 这个起步依赖引入到 Spring Boot 项目中的,它可以与常见的监控工具(如 Prometheus、Grafana)集成,实现应用的可视化监控和管理。
2. 设计
Actuator 的设计基于几个核心概念:
- 端点(Endpoint):Actuator 通过端点提供应用的各种运行时信息。每个端点都代表着一种操作或信息暴露,比如 /actuator/health 显示应用健康状况,/actuator/metrics 提供应用的性能指标。
- 暴露方式:Actuator 端点可以通过 HTTP 或 JMX 暴露,默认通过 HTTP 暴露。
- 安全性:为了防止未授权访问敏感信息,Spring Boot 提供了对 Actuator 端点的安全控制,开发者可以通过 Spring Security 控制访问权限。
3. 使用
3.1 引入依赖
要在 Spring Boot 项目中使用 Actuator,首先需要在项目的 pom.xml 中添加 spring-boot-starter-actuator 依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
3.2 端点访问
引入依赖后,Actuator 提供了一些默认的端点用于监控和管理。常见的端点包括:
- /actuator/health:查看应用程序的健康状态。
- /actuator/metrics:查看应用程序的性能指标。
- /actuator/info:展示应用程序的基本信息(可以通过配置提供)。
- /actuator/env:查看应用程序的环境属性和配置信息。
- /actuator/beans:显示 Spring 容器中的 Bean 列表。
示例:访问健康检查端点 /actuator/health,可以获取类似以下的信息:
{
"status": "UP",
"components": {
"diskSpace": {
"status": "UP",
"details": {
"total": 499963174912,
"free": 123456789012,
"threshold": 10485760
}
},
"db": {
"status": "UP",
"details": {
"database": "MySQL",
"result": 1
}
}
}
}
3.3 激活端点
默认情况下,只有少数端点(如 /actuator/health 和 /actuator/info)是激活且暴露的。如果要启用其他端点,需要在 application.properties 或 application.yml 中进行配置。
management:
endpoints:
web:
exposure:
include: "*"
上述配置将暴露所有的端点。如果只想暴露特定的端点,例如 health 和 metrics,可以使用如下配置:
management:
endpoints:
web:
exposure:
include: health,metrics
4. 常用配置
Actuator 提供了很多可以自定义的配置选项,以下是一些常见的配置:
4.1 更改端点的基础路径
默认情况下,所有的 Actuator 端点都暴露在 /actuator 路径下。你可以通过配置自定义路径:
management:
endpoints:
web:
base-path: /manage
这样所有的 Actuator 端点将暴露在 /manage 下,比如健康检查端点将变为 /manage/health。
4.2 安全性配置
如果你不希望所有用户都能访问 Actuator 端点,可以通过 Spring Security 对其进行保护。例如,以下配置要求访问 Actuator 端点时必须经过身份验证:
management:
endpoint:
health:
show-details: when_authorized
security:
roles: ACTUATOR
你可以结合 Spring Security 实现基于角色的访问控制。
4.3 自定义健康检查
Actuator 允许你通过实现 HealthIndicator 接口来自定义健康检查逻辑:
import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.stereotype.Component;
@Component
public class CustomHealthIndicator implements HealthIndicator {
@Override
public Health health() {
int errorCode = check(); // 执行一些自定义检查
if (errorCode != 0) {
return Health.down().withDetail("Error Code", errorCode).build();
}
return Health.up().build();
}
private int check() {
// 你的健康检查逻辑
return 0;
}
}
这样,你的自定义健康检查逻辑将会被集成到 /actuator/health 端点中。
4.4 日志管理
Actuator 提供了日志管理功能,允许你动态调整日志级别:
- /actuator/loggers:查看应用程序中所有的日志记录器和它们的级别。
- /actuator/loggers/{logger.name}:查看或修改某个特定日志记录器的日志级别。
通过 POST 请求可以动态修改日志级别。例如,以下请求将某个日志记录器的日志级别设为 DEBUG:
curl -X POST -d '{"configuredLevel":"DEBUG"}' \
-H "Content-Type: application/json" \
http://localhost:8080/actuator/loggers/com.example.MyClass
5. 示例代码
5.1 完整示例
接下来是一个集成 Actuator 的简单 Spring Boot 项目:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
public class ActuatorDemoApplication {
public static void main(String[] args) {
SpringApplication.run(ActuatorDemoApplication.class, args);
}
}
@RestController
class MyController {
@GetMapping("/hello")
public String hello() {
return "Hello, World!";
}
}
application.yml 文件:
spring:
application:
name: actuator-demo
management:
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: always
metrics:
export:
simple:
enabled: true
health:
diskspace:
enabled: true
path: /
threshold: 10MB
运行应用程序后,你可以访问以下 Actuator 端点:
- /actuator/health:查看应用的健康状态。
- /actuator/metrics:查看应用的性能指标。
- /actuator/env:查看应用的环境配置。
性能指标
访问 /actuator/metrics,你将看到类似以下输出,其中列出了所有可用的指标名称:
{
"names": [
"jvm.memory.used",
"jvm.memory.max",
"jvm.threads.live",
"system.cpu.usage",
"http.server.requests",
...
]
}
选择你想要查看的某个指标名称,例如 jvm.memory.used,然后在浏览器中或通过命令行请求具体的指标:
- 浏览器中访问:/actuator/metrics/jvm.memory.used
- 或使用 curl 命令:
curl http://localhost:8080/actuator/metrics/jvm.memory.used
你将看到具体的值,例如:
{
"name": "jvm.memory.used",
"description": "The amount of used memory",
"baseUnit": "bytes",
"measurements": [
{
"statistic": "VALUE",
"value": 123456789
}
],
"availableTags": [
{
"tag": "area",
"values": ["heap", "nonheap"]
},
{
"tag": "id",
"values": ["PS Eden Space", "PS Old Gen", "PS Survivor Space"]
}
]
}
在这个例子中:
- "value": 123456789 表示当前 JVM 已用内存为 123456789 字节。
- "availableTags" 表示可以进一步按内存区域(堆或非堆)或内存池细分数据。
如果你想要过滤或获取特定区域的数据,可以通过指定标签来获取。例如,查询堆内存的使用情况:
curl http://localhost:8080/actuator/metrics/jvm.memory.used?tag=area:heap
这样,你就可以查看指标的具体值,而不仅仅是名称了。
常见指标:
- jvm.memory.used:JVM 使用的内存。
- system.cpu.usage:系统的 CPU 使用率。
- http.server.requests:HTTP 请求的统计信息。
你可以根据你的应用需要获取不同的性能指标,并结合 Prometheus 或 Grafana 进行监控与展示。
6. Actuator 常用端点列表
端点 | 描述 |
/actuator/health | 查看应用程序的健康状态 |
/actuator/info | 展示应用的基本信息(可以通过 info 配置提供) |
/actuator/metrics | 提供应用的性能指标,例如内存、CPU 使用等 |
/actuator/env | 查看应用的环境配置 |
/actuator/beans | 显示 Spring 容器中的 Bean 列表 |
/actuator/loggers | 查看和修改日志记录器的级别 |
/actuator/threaddump | 显示应用的线程转储信息 |
/actuator/heapdump | 下载堆转储文件 |
/actuator/shutdown | 关闭应用程序(需要手动启用) |
/actuator/httptrace | 显示应用程序的 HTTP 请求追踪信息 |
7. 结论
Spring Boot Actuator 是一个功能强大的监控和管理工具,它为开发者提供了丰富的监控端点,可以帮助你快速掌握应用程序的运行状态和性能指标。通过 Actuator,你可以轻松地对应用程序进行监控、调试,并在必要时执行管理任务。结合自定义健康检查、日志管理和安全控制,Actuator 提供了极大的灵活性和可扩展性,是企业级 Spring Boot 应用中不可或缺的部分。
猜你喜欢
- 2024-10-24 SpringBoot 集成 MyBatisPlus | 实战基础系列
- 2024-10-24 真香,GitLab 和 Docker自动化部署SpringBoot应用
- 2024-10-24 使用IDEA教你搭建Spring Boot简单项目
- 2024-10-24 Spring boot 自定义starter(springboot自定义starter步骤封装nacos)
- 2024-10-24 Spring Boot介绍及快速入门案例(spring boot.)
- 2024-10-24 跟武哥一起学习Spring Boot,一份全面详细的学习教程
- 2024-10-24 Spring Boot | 一种优雅的参数校验方案(个人总结)
- 2024-10-24 Spring Boot 统一接口响应格式的正确姿势!
- 2024-10-24 深入SpringBoot可执行Jar包:从Maven生命周期到自定义类加载器
- 2024-10-24 浅析一个较完整的SpringBoot项目(springboot项目运行原理)
你 发表评论:
欢迎- 06-24一个老爸画了超级有爱的365幅画 | 父亲节献礼
- 06-24产品小白看魏则西事件——用产品思维审视百度推广
- 06-24某教程学习笔记(一):13、脚本木马原理
- 06-24十大常见web漏洞——命令执行漏洞
- 06-24初涉内网,提权那些事(内网渗透提权)
- 06-24黑客命令第16集:47种最常见的**网站方法2/2
- 06-24铭说 | 一句话木马的多种变形方式
- 06-24Java隐藏的10倍效率技巧!90%程序员不知道的魔法方法(附代码)
- 最近发表
- 标签列表
-
- spire.doc (70)
- instanceclient (62)
- solidworks (78)
- system.data.oracleclient (61)
- 按键小精灵源码提取 (66)
- pyqt5designer教程 (65)
- 联想刷bios工具 (66)
- c#源码 (64)
- graphics.h头文件 (62)
- mysqldump下载 (66)
- libmp3lame (60)
- maven3.3.9 (63)
- 二调符号库 (57)
- git.exe下载 (68)
- diskgenius_winpe (72)
- pythoncrc16 (57)
- solidworks宏文件下载 (59)
- qt帮助文档中文版 (73)
- satacontroller (66)
- hgcad (64)
- bootimg.exe (69)
- android-gif-drawable (62)
- axure9元件库免费下载 (57)
- libmysqlclient.so.18 (58)
- springbootdemo (64)
本文暂时没有评论,来添加一个吧(●'◡'●)