您的位置:

深入解析Spring Cloud Actuator

Spring Cloud Actuator 是 Spring Boot Admin 与 Spring Cloud 项目的重要组件之一,提供了丰富的针对运行中的 Spring Boot 应用程序进行监控和管理的构件。

一、Actuator 的主要功能

1. Health Checks

Actuator 提供了 HealthCheckEndpoint 接口,以及默认的实现类 HealthIndicator,可以通过 SpringBoot 的自动配置功能自动对应上。健康检查是应用程序最基本的部分之一,检查应用程序是否正常启动。Actuator 提供了两种健康检查的接口:

public interface HealthIndicator {
    Health health();
}

HealthIndicator 会输出一个 Health 状态,代表应用程序是否处于健康态。为了方便使用,Spring Boot 还提供了类似于 Unix 系统下的“ping”的 Actuator 自动化检测功能。

2. Metrics

Metrics 的实现非常简单,只需要将 MetricsEndpoint 和 MetricsProperties 注入容器中即可。Metrics 可以用于对基础架构进行监控。包括了应用程序的响应时间、流量、吞吐量、并发量等,这些信息能够帮助我们了解应用程序的健康度,还能够为防御性编程提供有价值的数据。

3. Tracing

在微服务架构下,很多时候会出现链式调用,而且每个请求可能会涉及到多个服务。当一个请求出现问题时,需要跟踪整个请求所涉及到的服务,以便可以更快地定位问题。Actuator 提供了 TraceEndpoints 接口,并且在 Spring Boot 1.3 及以上版本的时候,提供了 HTTP Trace 功能。该功能允许我们详细跟踪 Spring Boot 应用程序在 HTTP 层面的所有调用细节,包括请求参数、响应状态码、响应内容等。

4. Environment

Actuator 提供了 EnvironmentalEndpoints 接口,并且默认实现类 EnvironmentEndpoint,用于对应用程序的运行环境进行监视和管理。在生产环境中,我们通常会将应用程序部署到不同的环境。通过环境变量和属性文件设置不同的值。这样可以让不同的环境使用不同的配置文件,从而更好地适应不同的生产环境。

二、使用 Actuator

1. 依赖项

在使用 Spring Cloud Actuator 前,需要先在 pom 文件中添加相关的依赖:

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

2. 配置 Actuator

在配置 Actuator 之前,需要先在 application 配置文件中添加以下内容:

management:
  endpoints:
    web:
      exposure:
        include: "*"
  endpoint:
    health:
      show-details: ALWAYS

这样 Actuator 会将所有的 Endpoint 暴露出来,并且将所有的 health 细节都添加到健康端点之中。通过访问 http://localhost:8080/actuator 可以获取所有暴露出来的服务端点。

3. 常用 Endpoint

接下来是一些常用的 Actuator Endpoint,他们在进行接口调用时,需要对的访问地址为 http://ip:port/actuator/endpoint

3.1、 /health

访问 /health 端点可以让应用程序报告本身的应用程序状态。该端点可用于运行基本健康检查,并检测应用程序的配置和所有的应用程序组件是否都在正确的状态下运行。如需了解更详细的信息,可以使用 Show Details 标志访问端点。示例代码如下:

$ curl -i localhost:8080/actuator/health

HTTP/1.1 200 
Content-Type: application/json;charset=UTF-8
status: UP
details: {其他的检查项、、、、}

3.2、 /info

访问 /info 端点可以掌握有关应用程序状态的更多信息,该端点可用于公开应用程序的相关元数据,比如:应用程序版本,构建信息等。

$ curl -i localhost:8080/actuator/info

HTTP/1.1 200 
Content-Type: application/json;charset=UTF-8
{
  "app": {
    "description": "AngularJS frontend for Sparklr Album Service",
    "name": "Sparklr",
    "version": "1.0.0"
  }
}

3.3、 /metrics

访问 /metrics 端点可以从运行中的 Spring Boot 应用程序中提取有关吞吐量,错误率,平均响应时间和其他类似指标的度量数据。

$ curl -s localhost:8080/actuator/metrics | python3 -m json.tool

{
  "mem": 65664,
  "mem.free": 13143,
  "processors": 2,
  "uptime": 2476
}

三、总结

作为 Spring Cloud 项目的重要组件之一,Actuator 提供了很多丰富的功能和接口,使得我们能够更快且更准确地定位问题,更好地了解应用程序的健康度,进一步加强了对微服务治理的支持。在使用 Actuator 时,请保持所有的 Endpoint 对外都是不可见的。由于 Actuator 的大部分功能都是依赖于 HTTP 端点实现的,因此我们需要格外小心,特别是对暴露出来的端点。这亦是本文作者提出的一个小建议。