使用Actuator通过HTTP监控Spring Boot应用(附源码)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 使用Actuator通过HTTP监控Spring Boot应用(附源码)

Spring Boot提供了Actuator功能,完成运行时的应用监控和管理功能。可以通过HTTP,JMX(Java管理扩展)以及SSH(远程脚本)来进行Spring Boot的应用监控和管理功能。

通过HTTP使用Actuator的监控和管理功能,那么要在pom.xml文件中引入以下依赖

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

一、端点的分类与测试

Spring  Boot提供了许多监控和管理功能的端点。根据端点的作用,可以将Spring Boot提供 的原生端点分为三大类。应用配置端点、度量指标端点、操作控制端点

1:端点的开启与暴露

新建一个Spring Boot Web应用 运行主程序 然后通过访问http://localhost:8080/acutator来查看默认暴露的端点

发现Spring Boot默认暴露了health和info两个端点

在配置文件application.properties中添加以下代码可以查看所有暴露的端点

management.endpoints.web.exposure.include=*

二、应用配置端点的测试

1:conditions

用于获取应用的自动化配置报告,其中包括所有自动化配置的候选项,同时还列出了每个候选项自动化配置的各个先决条件是否满足

访问http://localhost:8080/acutator/conditions即可测试

2:beans

该端点用来获取应用上下文中创建的所有Bean,启动并暴露该端点后。可通过http://localhost:8080/beans访问

3:configprops

该端点用来获取应用中配置的属性信息报告,prefix属性代表属性的配置前缀,properties代表各个属性的名称和值 通过http://localhost:8080/acutator/configprops测试访问

4:env

该端点用于获取应用所有可用的环境属性报告。

通过http://localhost:8080/acutato/env访问

5:mappings

该端点用来返回所有Spring MVC的控制器映射关系报告 可通过

http://localhost:8080/acutator/mappings访问

6:info

该端点用来返回一些自定义的信息,在默认情况下,该端点只会返回一个空的json内容

通过http://localhost:8080/acutator/info测试访问

三、度量指标端点的测试

通过度量指标端点可获取应用程序运行过程中用于监控的度量指标

1:metrics

该端点用来返回当前应用的各类重要度量指标

通过http://localhost:8080/acutator/metrics访问

2:health

该端点哦你过来获取应用的各类健康指标信息。通过

http://localhost:8080/acutator/health访问 up表示健康 down表示异常

3:threaddump

该端点用来暴露程序运行中的线程信息。 通过

http://localhost:8080/acutator/threaddump测试访问

4:httptrace

该端点用来返回基本的HTTP跟踪信息。可通过

http://localhost:8080/acutator/httptrace访问 保留最近的100条请求信息

5:scheduledtasks

该端点统计应用程序中调度的任务 可通过

http://localhost:8080/acutator/scheduledtasks访问测试

四、操作控制端点的测试

操作控制类端点拥有更强大的控制能力,如果使用它们,需要通过属性来配置开启,在原生端点中,只提供了一个用来关闭应用的端点:shutdown 可以通过如下配置开启它

management.endpoint.shutdown.enabled=true

五、自定义端点

当Spring Boot提供的端点不能满足我们的需求时,就需要自定义 一个端点对应用进行监控

Spring Boot提供了注解@Endpoint定义一个端点类,并在端点类的方法上使用@ReadOperation注解来显示监控信息,使用@WriteOperation来动态更新监控信息

下面通过实战讲解如何自定义一个端点,并且显示数据源相关信息

1:创建Spring Boot Web应用

2:修改pom.xml

<?xml version="1.0" encoding="UTF-8"?>
-<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
-<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.8.RELEASE</version>
<relativePath/>
<!-- lookup parent from repository -->
</parent>
<groupId>com.ch</groupId>
<artifactId>ch10_2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>ch10_2</name>
<description>Demo project for Spring Boot</description>
-<properties>
<java.version>11</java.version>
</properties>
-<dependencies>
-<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
-<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
-<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>
-<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
-<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
-<build>
-<plugins>
-<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

3:配置数据源

修改application.properties文件

###
##数据源信息配置
###
#数据库地址
spring.datasource.url=jdbc:mysql://localhost:3306/springbootjpa?characterEncoding=utf8
#数据库用户名
spring.datasource.username=root
#数据库密码
spring.datasource.password=root
#数据库驱动
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#输出的JSON字符串格式更美观
spring.jackson.serialization.indent-output=true
#暴露所有端点,当然包括data-source,我们也可以只暴露data-source端点
management.endpoints.web.exposure.include=*
#将详细健康信息显示给所有用户
management.endpoint.health.show-details=always

4:自定义端点

package com.ch.ch10_2.endPoint;
import java.util.HashMap;
import java.util.Map;
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
import org.springframework.boot.actuate.endpoint.annotation.WriteOperation;
import org.springframework.stereotype.Component;
import com.zaxxer.hikari.HikariConfigMXBean;
import com.zaxxer.hikari.HikariDataSource;
import com.zaxxer.hikari.HikariPoolMXBean;
//注册为端点,id不能使用驼峰法(dataSource),需要以-分割
@Endpoint(id = "data-source")
@Component
public class DataSourceEndpoint {
  //HikariDataSource提供多个监控信息
  HikariDataSource ds;
    public DataSourceEndpoint(HikariDataSource ds) {
      this.ds = ds;
    }
    @ReadOperation
    public Map<String, Object> info() {
      Map<String, Object> map = new HashMap<String, Object>();
      //连接池配置
      HikariConfigMXBean configBean = ds.getHikariConfigMXBean();
      map.put("max", configBean.getMaximumPoolSize());
      //连接池运行状态
      HikariPoolMXBean mxBean = ds.getHikariPoolMXBean();
      map.put("active", mxBean.getActiveConnections());
      map.put("idle", mxBean.getIdleConnections());
      //连接池无连接时,等待获取连接的线程个数
      map.put("wait", mxBean.getThreadsAwaitingConnection());
        return map;
    }
    @WriteOperation
    public void setMax(int max) {
      ds.getHikariConfigMXBean().setMaximumPoolSize(max);
    }
}

5:暴露端点

在application.properties中添加以下代码

management.endpoints.web.exposure.include=*

6:测试端点

运行主类 然后访问http://localhost:8080/actuator/date-source即可

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
13天前
|
前端开发 JavaScript 安全
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第27天】本文介绍了HTTP/2和HTTPS在前端性能调优中的应用。通过多路复用、服务器推送和头部压缩等特性,HTTP/2显著提升了Web性能。同时,HTTPS确保了数据传输的安全性。文章提供了示例代码,展示了如何使用Node.js创建一个HTTP/2服务器。
27 3
|
17天前
|
数据采集 监控 前端开发
二级公立医院绩效考核系统源码,B/S架构,前后端分别基于Spring Boot和Avue框架
医院绩效管理系统通过与HIS系统的无缝对接,实现数据网络化采集、评价结果透明化管理及奖金分配自动化生成。系统涵盖科室和个人绩效考核、医疗质量考核、数据采集、绩效工资核算、收支核算、工作量统计、单项奖惩等功能,提升绩效评估的全面性、准确性和公正性。技术栈采用B/S架构,前后端分别基于Spring Boot和Avue框架。
|
1月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
137 1
|
15天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,创建并配置 Spring Boot 项目,实现后端 API;然后,使用 Ant Design Pro Vue 创建前端项目,配置动态路由和菜单。通过具体案例,展示了如何快速搭建高效、易维护的项目框架。
94 62
|
1天前
|
缓存 安全 网络安全
HTTP/2与HTTPS在Web加速中的应用
HTTP/2与HTTPS在Web加速中的应用
|
13天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
31 2
|
14天前
|
前端开发 安全 应用服务中间件
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第26天】随着互联网的快速发展,前端性能调优成为开发者的重要任务。本文探讨了HTTP/2与HTTPS在前端性能优化中的应用,介绍了二进制分帧、多路复用和服务器推送等特性,并通过Nginx配置示例展示了如何启用HTTP/2和HTTPS,以提升Web应用的性能和安全性。
16 3
|
16天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
1月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用
【10月更文挑战第8天】本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,通过 Spring Initializr 创建并配置 Spring Boot 项目,实现后端 API 和安全配置。接着,使用 Ant Design Pro Vue 脚手架创建前端项目,配置动态路由和菜单,并创建相应的页面组件。最后,通过具体实践心得,分享了版本兼容性、安全性、性能调优等注意事项,帮助读者快速搭建高效且易维护的应用框架。
39 3
|
21天前
|
存储 Java 数据管理
强大!用 @Audited 注解增强 Spring Boot 应用,打造健壮的数据审计功能
本文深入介绍了如何在Spring Boot应用中使用`@Audited`注解和`spring-data-envers`实现数据审计功能,涵盖从添加依赖、配置实体类到查询审计数据的具体步骤,助力开发人员构建更加透明、合规的应用系统。