SpringBoot:SpringBoot中如何实现对Http接口进行监控

一、前言

**  Spring Boot Actuator是Spring Boot提供的一个模块,用于监控和管理Spring Boot应用程序的运行时信息。它提供了一组监控端点(endpoints),用于获取应用程序的健康状态、性能指标、配置信息等,并支持通过 HTTP 或 JMX 进行访问。**

**  使用 Actuator 可以方便地了解应用程序的运行状况,监控等关键指标,并根据需要采取相应的措施。它为开发人员和运维人员提供了一种简单而有效的方式来监控和管理Spring Boot应用程序。例如:在项目中监控记录接口请求的相关信息,它对于提升系统稳定性、优化性能、快速定位问题以及保障数据安全等方面都起着至关重要的作用。**

**  本文将介绍一下Spring Boot Actuator以及代码示例,以及如何进行接口请求监控。**

二、Spring Boot Actuator主要特性和功能

**  1. 健康检查(Health Checks)**:通过 /actuator/health 端点暴露应用程序的健康状态。这可以包括数据库连接、外部服务可达性等多种健康指标。支持自定义健康检查指标。

①. 配置健康检查的详细程度(通过 management.endpoint.health.show-details 属性)。可配置的值有 never(默认,不显示详细信息)、when-authorized(详细信息将展示给通过认证的用户)和 always(对所有用户暴露详细信息)。

②. 可以通过 management.health.defaults.enabled 或针对特定组件的 management.health.xxxx.enabled 配置项来启用或禁用默认的健康指示器。

**  2. 信息端点**:通过 /actuator/info 端点展示应用程序的自定义信息,如版本号、构建信息等。允许在 application.properties 或 application.yml 文件中配置这些信息。

**  3. 度量指标(Metrics)**:提供应用程序的度量指标,如 JVM 内存使用情况、系统 CPU 负载、HTTP 请求统计等。可以通过 /actuator/metrics 端点获取度量指标信息。

**  4. 日志管理(Logging Management)**:通过 /actuator/loggers 端点动态调整日志级别。允许在运行时查看和修改日志配置,而无需重启应用程序。

**  5. 环境属性(Environment Properties)**:通过 /actuator/env 端点展示配置的属性来源,如系统属性、环境变量、配置文件等。

**  6. 线程转储(Thread Dump)**:通过 /actuator/threaddump 端点生成当前线程的转储快照,有助于诊断性能问题或死锁情况。

**  7. HTTP 跟踪(HTTP Trace)**:通过 /actuator/httptrace 端点展示最近的 HTTP 请求和响应的跟踪信息,有助于分析请求处理流程。

**  8. 审计事件(Audit Events)**:通过 /actuator/auditevents 端点访问应用程序的审计事件,如安全事件。

**  9. JMX Beans**:除了 HTTP 端点外,Actuator 还提供了 JMX Beans,允许通过 JMX 控制台来访问和管理应用程序。

**  10. 关机和重启(Shutdown and Restart)**:在某些配置下,可以通过 /actuator/shutdown 或 /actuator/restart 端点来安全地关闭或重启应用程序。但请注意,这些功能通常不推荐在生产环境中使用,因为它们可能带来安全风险。

**  11. 自定义端点(Custom Endpoints)**:允许开发者创建自定义的 Actuator 端点,以扩展监控和管理功能。

三、Actuator监控分类

Actuator 监控分成两类:原生端点和用户自定义端点

**  ①. 自定义端点主要是指扩展性,用户可以根据自己的实际应用,定义一些比较关心的指标,在运行期进行监控。**

**  ②. 原生端点是在应用程序里提供众多Web接口,通过它们了解应用程序运行时的内部状况**。

原生端点又可以分成三类

**  ①. 应用配置类** :可以查看应用在运行期的静态信息:例如自动配置信息、加载的 springbean 信息、yml 文件配置信息、环境信息、请求映射信息。

**  ②. 度量指标类** :主要是运行期的动态信息,例如堆栈、请求连、一些健康指标、metrics 信息等。

**  ③. 操作控制类** :主要是指 shutdown,用户可以发送一个请求将应用的监控功能关闭。

Actuator 提供了13 个接口,具体如下表所示

四、代码示例

1. 引入依赖

java 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

2. 添加application.properties配置

java 复制代码
打开所有的监控点
management.endpoints.web.exposure.include=*

3. 定义一些请求接口

java 复制代码
@GetMapping("/v1/test")
 public Object Test1() {
     String name = "hello";
     return name;
 }

 // 异常情况下
 @GetMapping("/v2/test2")
 public Object Test2() {
     String name = "hello new";
     System.out.println(1 / 0) ;
     return name;
 }

4. 浏览器访问

访问http://localhost:8027/actuator

①查看项目运行情况,通过访问 /actuator/health

health 主要用来检查应用的运行状态,这是我们使用最高频的一个监控点。通常使用此接口提醒我们应用实例的运行状态,以及应用不"健康"的原因,比如数据库连接、磁盘空间不够等。

②.查看日志级别情况


**  比如我们生产环境日志级别一般都是 info,但是现在有一个bug通过info级别无法排查,那么我们就可以临时修改 log 级别。**

五、http接口监控

  1. 要使用Actuator的http接口监控功能,需要注册一个HttpTraceRepository类型的Bean
java 复制代码
package com.example.yddemo.actuator;

import org.springframework.boot.actuate.trace.http.InMemoryHttpTraceRepository;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class HttpActuatorConfig {

    @Bean
    InMemoryHttpTraceRepository inMemoryHttpTraceRepository() {
        return new InMemoryHttpTraceRepository() ;
    }

}
  1. 添加application.properties配置
java 复制代码
management.endpoints.web.exposure.include=httptrace
  1. 访问http://localhost:8027/actuator

**  出现下面链接,表示配置成功**

  1. 访问http://localhost:8027/actuator/httptrace

请求一些上面我们定义的接口,然后访问/actuator/httptrace,展示如下信息

列如:timeTaken属性记录的是该接口请求的耗时情况(单位:毫秒)

  1. 自定义记录的信息,可以通过如下配置

访问/actuator/httptrace,展示的信息,也可以自定义展示需要的信息。

java 复制代码
management.trace.http.include=

六、安全管理

1.在application.properties禁用接口

java 复制代码
management.endpoint.health.enabled=false

2. 配置访问权限验证,这时再访问actuator功能时就会弹出登录窗口,需要输入账号密码验证后才允许访问。例如Spring Security,shiro等

3. 使用Filter对访问actuator做限制

以上就是对SpringBoot中Actuator的介绍以及代码示例,了解了如何查看健康检查,如何使用Actuator来实现对Http接口进行监控。

相关推荐
【D'accumulation】19 分钟前
典型的MVC设计模式:使用JSP和JavaBean相结合的方式来动态生成网页内容典型的MVC设计模式
java·设计模式·mvc
wn53129 分钟前
【Go - 类型断言】
服务器·开发语言·后端·golang
试行34 分钟前
Android实现自定义下拉列表绑定数据
android·java
茜茜西西CeCe40 分钟前
移动技术开发:简单计算器界面
java·gitee·安卓·android-studio·移动技术开发·原生安卓开发
bjzhang7540 分钟前
SpringBoot开发——集成Tess4j实现OCR图像文字识别
spring boot·ocr·tess4j
救救孩子把44 分钟前
Java基础之IO流
java·开发语言
flying jiang1 小时前
Spring Boot 入门面试五道题
spring boot
小菜yh1 小时前
关于Redis
java·数据库·spring boot·redis·spring·缓存
宇卿.1 小时前
Java键盘输入语句
java·开发语言
浅念同学1 小时前
算法.图论-并查集上
java·算法·图论