SpringBoot教程-Spring Boot 微服务监控端点

Spring Boot Actuator
Spring Boot Actuator 是 Spring Boot 框架的一个子项目。它包含了许多额外的功能,帮助我们监视和管理 Spring Boot 应用程序。它包含了 actuator 端点(资源所在的位置)。我们可以使用 HTTP 和 JMX 端点来管理和监视 Spring Boot 应用程序。如果我们希望在应用程序中获得生产就绪的特性,我们应该使用 Spring Boot Actuator。
Spring Boot Actuator 特性
Spring Boot Actuator 有以下 三个 主要特性:
- Endpoints(端点)
- Metrics(指标)
- Audit(审计)
Endpoints(端点):Actuator 端点允许我们监视和与应用程序进行交互。Spring Boot 提供了许多内置的端点。我们还可以创建自己的端点。我们可以单独启用和禁用每个端点。大多数应用程序选择使用 HTTP,其中端点的 Id 与 /actuator 前缀映射到一个 URL。
例如,/health 端点提供应用程序的基本健康信息。Actuator 默认将其映射到 /actuator/health。
Metrics(指标):Spring Boot Actuator 通过集成 Micrometer 提供了维度指标。Micrometer 集成到 Spring Boot 中。它是提供 Spring 应用程序指标的仪表库。它为计时器、计量器、计数器、分布摘要和长任务计时器提供了与供应商无关的接口,具有维度数据模型。
Audit(审计):Spring Boot 提供了一个灵活的审计框架,将事件发布到 AuditEventRepository。如果 Spring Security 正在执行,它会自动发布身份验证事件。
启用 Spring Boot Actuator
我们可以通过在 pom.xml 文件中注入依赖项 spring-boot-starter-actuator 来启用 Actuator。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
Spring Boot Actuator 端点
Actuator 端点允许我们监视和与 Spring Boot 应用程序进行交互。Spring Boot 包含许多内置端点,我们还可以在 Spring Boot 应用程序中添加自定义端点。
以下是Spring Boot Actuator中常用的端点(Endpoint)及其用途和默认状态:
ID | 用途 | 默认状态 |
---|---|---|
actuator | 为其他端点提供基于超媒体的发现页面。需要在类路径中引入Spring HATEOAS。 | True |
auditevents | 公开当前应用程序的审核事件信息。 | True |
autoconfig | 显示自动配置报告,显示所有自动配置候选项以及是否应用它们的原因。 | True |
beans | 显示应用程序中所有Spring Bean的完整列表。 | True |
configprops | 显示所有@ConfigurationProperties的整理列表。 | True |
dump | 执行线程转储。 | True |
env | 公开Spring的ConfigurableEnvironment中的属性。 | True |
flyway | 显示已应用的任何Flyway数据库迁移。 | True |
health | 显示应用程序健康信息。 | False |
info | 显示任意应用程序信息。 | False |
loggers | 显示和修改应用程序中日志记录器的配置。 | True |
liquibase | 显示已应用的任何Liquibase数据库迁移。 | True |
metrics | 显示当前应用程序的指标信息。 | True |
mappings | 显示所有@RequestMapping路径的整理列表。 | True |
shutdown | 允许优雅地关闭应用程序。 | True |
trace | 显示跟踪信息。 | True |
通过这些端点,我们可以监视和管理Spring Boot应用程序,了解应用程序的状态和性能指标,并根据需要添加自定义端点来公开特定信息。
Id | 描述 | 默认值 |
---|---|---|
docs | 显示文档,包括 Actuator 端点的示例请求和响应。 | False |
heapdump | 返回 GZip 压缩的 hprof 堆转储文件。 | True |
jolokia | 在类路径上存在 Jolokia 时,通过 HTTP 公开 JMX bean。 | True |
logfile | 返回日志文件的内容。 | True |
prometheus | 以 Prometheus 服务器可抓取的格式公开指标。需要 micrometer-registry-prometheus 依赖项。 | True |
Spring Boot Actuator 属性
Spring Boot 对所有 Actuator 端点启用了安全性。它使用基于表单的身份验证,提供用户 Id 作为用户名和随机生成的密码。我们也可以通过自定义基本身份验证来访问受限的 actuator 端点。我们需要通过 management.security.roles 属性来覆盖此配置。例如:
management.security.enabled=true
management.security.roles=ADMIN
security.basic.enabled=true
security.user.name=admin
security.user.password=admin
Spring Boot Actuator 示例
让我们通过一个示例来理解 Actuator 的概念。
步骤 1: 打开 Spring Initializr https://start.spring.io/ 并创建一个 Maven 项目。
步骤 2: 提供 Group 名称。我们提供了 cn.javatiku。
步骤 3: 提供 Artifact Id。我们提供了 spring-boot-actuator-example。
步骤 4: 添加以下依赖项:Spring Web, Spring Boot Starter Actuator 和 Spring Data Rest HAL Browser。
步骤 5: 点击 Generate 按钮。点击 Generate 按钮后,它将所有与项目相关的规格包装成一个 Jar 文件,并将其下载到我们的本地系统。
步骤 6: 解压 Jar 文件并将其粘贴到 STS 工作区。
步骤 7: 导入项目文件夹。
File -> Import -> Existing Maven Projects -> Browse -> 选择文件夹 spring-boot-actuator-example -> 完成
导入需要一些时间。导入项目后,我们可以在包资源管理器部分看到项目目录。
步骤 8: 创建一个 Controller 类。我们创建了名为 DemoRestController 的控制器类。
DemoRestController.java
package cn.javatiku;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DemoRestController {
@GetMapping("/hello")
public String hello() {
return "Hello User!";
}
}
步骤 9: 打开 application.properties 文件,并通过添加以下语句来禁用 Actuator 的安全特性。
application.properties
management.security.enabled=false
步骤 10: 运行 SpringBootActuatorExampleApplication.java 文件。
步骤 11: 在浏览器中打开 http://localhost:8080/actuator URL。它返回以下页面:
{
"_links": {
"self": {
"href": "http://localhost:8080/actuator",
"templated": false
},
"health": {
"href": "http://localhost:8080/actuator/health",
"templated": false
},
"health-path": {
"href": "http://localhost:8080/actuator/health/{*path}",
"templated": true
},
"info": {
"href": "http://localhost:8080/actuator/info",
"templated": false
}
}
}
应用程序默认运行在端口 8080 上。一旦 Actuator 启动,我们可以看到所有通过 HTTP 公开的端点列表。
让我们通过调用 http://localhost:8080/actuator/health
URL 来调用 health 端点。它显示状态为 UP。这意味着应用程序正常运行且没有中断。
同样地,我们可以调用其他端点来监视和管理 Spring Boot 应用程序。