Spring Boot学习 之 Spring Boot Actuator(一)

简介: Spring Boot学习 之 Spring Boot Actuator(一)

Spring Boot版本:2.1.4.RELEASE

启用:

spring-boot-actuator模块提供了一系列的用于监控的端点。最简单的开启这个功能的方法就是,在pom文件中添加如下的依赖。

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

端点:


开启/禁用端点

Actuator 的端点让你能够监控你的应用并能跟你的引用进行交互,Spring Boot包含了大量的内置的端点,而且你也能添加定制的端点。例如:health端点提供了应用的健康指标信息。


每个独立的端点都能被禁用或启用。当一个端点被禁用时,同时也代表了对应的端点不会被创建,对应的bean不会存在容器中。为了能远程访问一个端点,我们也会通过JMX或者HTTP的方式将其暴露出去。大多数的应用选择HTTP,在选择HTTP的情况下,端点的ID会默认加一个/actuator的前缀。例如,默认的health端点会被映射到/actuator/health路径上


下面列举了通过浏览器访问(get方法)部分端点相关的信息:


有关端点的详细描述可参考官网:端点,相关博客

PATH(通过浏览器直接访问)

描述

是否启用

/actuator

端点信息汇总,严格意义上来说不算一个端点,我在这里把他归到端点中一起 

/actuator/caches

获取所有的 Cachemanager

/actuator/conditions 

展示了自动配置相关的信息,可以看到哪些类进行了自动配置,哪些类没有进行自动配置,并且会标明没有进行自动配置的原因

/actuator/beans

展示了容器中bean

/actuator/configprops

展示了应用中@ConfigurationProperties注解的相关信息

/actuator/info

获取应用程序定制信息

/actuator/health

展示应用的健康信息

/actuator/metrics

报告各种应用程序度量信息,如:内存用量、HTTP 请求计数

/actuator/mappings

描述全部的 URL 路径,以及它们和控制器(包含Actuator端点)的映射关系

/actuator/shutdown

关闭应用(此方法只能通过POST方法调用且默认为禁用状态)

上面说了,默认情况下,shutdown端点是关闭的,我们如何开启一个端点呢?

# 开启shutdown端点
management.endpoint.shutdown.enabled=true

在表格中我们可以知道,大部分端点默认情况下是开启的,那么我们如何只开启某个我们想要的端点呢?

# 关闭所有端点
management.endpoints.enabled-by-default=false
# 开启info端点
management.endpoint.info.enabled=true

经过上面的操作,我们就可以只开启info端点。


暴露端点:


默认情况下,只有health,info端点会暴露出来(采用http的情况下),默认的配置为:

暴露所有端点:

management:
  endpoints:
    web:
      exposure:
        include: "*"

暴露我们想要的指定的端点,也可以仿照端点的相关操作,这里有所不同的是,我们要先暴露所有端点,然后再排除我们不需要暴露的端点

# 暴露了除了health,beans之外的端点
management:
  endpoints:
    web:
      exposure:
        include: "*"
        exclude: ["beans","health"]

我们看下面的例子:

management:
  endpoints:
    web:
      exposure:
        include: "*"
        exclude: ["health","beans"]
    enabled-by-default: false
  endpoint:
    conditions:
      enabled: true
    configprops:
      enabled: true

我们预期的结果,应该是一个端点都没有,启动项目,看到日志如下:


可以发现,一个端点都没有暴露出去,这是因为我们配置中暴露的端点都没有开启。


关于端点的暴露,我们要知道的是:


即使我们的应用是公开的,我们也需要保护好我们的端点

如果我们想定制的做一些端点的暴露策略,我们可以注册一个EndponitFilte


端点保护:


我们应该像保护其他的敏感的URL一样保护我们的HTTP端点,如果我们当前采用了Spring Security,则端点会被默认的保护起来。如果我们想为端点配置定制的安全策略,例如,只允许固定角色的用户访问,Spring Boot提供了一些能跟Spring Securit结合使用的便利的``RequestMatcher对象。


一个典型的Spring Security的配置如下:

@Configuration
public class ActuatorSecurity extends WebSecurityConfigurerAdapter {
  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http.requestMatcher(EndpointRequest.toAnyEndpoint()).authorizeRequests()
        .anyRequest().hasRole("ENDPOINT_ADMIN")
        .and()
      .httpBasic();
  }
}

上面的这段配置,使用了EndpointRequest.toAnyEndpoint()去匹配到任意端点的一起请求,并确保它具有ENDPOINT_ADMIN权限才能访问我们的端点。

当然,我们如果不想对我们的端点进行权限保护的话,可以进行如下配置:

@Configuration
public class ActuatorSecurity extends WebSecurityConfigurerAdapter {
  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http.requestMatcher(EndpointRequest.toAnyEndpoint()).authorizeRequests()
      .anyRequest().permitAll();
  }
}

端点配置:


对于不带任何参数的读取操作,端点自动缓存对其响应。要配置端点缓存响应的时间,请使用cache.time-live属性。以下示例将beans端点缓存的生存时间设置为10秒:

management.endpoint.beans.cache.time-to-live=10s

遵循这种格式:

 management.endpoint.<name> 

我们需要注意的是:

在进行经过验证的HTTP请求时,Principal将被视为端点的输入,因此不会缓存响应。

相关文章
|
9天前
|
前端开发 Java 开发者
Spring生态学习路径与源码深度探讨
【11月更文挑战第13天】Spring框架作为Java企业级开发中的核心框架,其丰富的生态系统和强大的功能吸引了无数开发者的关注。学习Spring生态不仅仅是掌握Spring Framework本身,更需要深入理解其周边组件和工具,以及源码的底层实现逻辑。本文将从Spring生态的学习路径入手,详细探讨如何系统地学习Spring,并深入解析各个重点的底层实现逻辑。
35 9
|
18天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
29天前
|
前端开发 Java 数据库
SpringBoot学习
【10月更文挑战第7天】Spring学习
34 9
|
30天前
|
XML Java 数据格式
Spring学习
【10月更文挑战第6天】Spring学习
19 1
|
1月前
|
Java 测试技术 开发者
springboot学习四:Spring Boot profile多环境配置、devtools热部署
这篇文章主要介绍了如何在Spring Boot中进行多环境配置以及如何整合DevTools实现热部署,以提高开发效率。
56 2
|
Java API Maven
Springboot 系列(四)Spring Boot 日志框架
Springboot 系列(四)Spring Boot 日志框架
765 0
Springboot 系列(四)Spring Boot 日志框架
|
1月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
143 1
|
17天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,创建并配置 Spring Boot 项目,实现后端 API;然后,使用 Ant Design Pro Vue 创建前端项目,配置动态路由和菜单。通过具体案例,展示了如何快速搭建高效、易维护的项目框架。
95 62
|
15天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
34 2
|
2月前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的大学竞赛报名管理系统
基于Java+Springboot+Vue开发的大学竞赛报名管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的大学竞赛报名管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
218 3
基于Java+Springboot+Vue开发的大学竞赛报名管理系统