Spring Boot 的生产级特性--Actuator监控端点

Spring Boot 生产级的特性

Spring Boot 有许多开箱即用的模块或者说插件,其中 spring-boot-actuator 提供了大量的生产级的特性。添加 spring-boot-starter-actuator 的 maven 依赖:

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

端点

Actuator 模块提供一系列的 HTTP 请求,这些请求都是 GET 类型的,不带任何请求参数,可用通过他们获取 Spring Boot 应用程序的相关信息。这些入口就是 端点 (Endpoint)

ID描述
auditevents公开当前应用程序的审计事件信息
beans获取 Spring bean 的完整列表
caches获取可用的缓存
conditions显示自动配置类的评估和配置条件,以及它们匹配或不匹配的原因。
configprops显示配置项信息(通过@ConfigurationProperties配置)
env获取 Spring 应用的环境变量信息 ConfigurableEnvironment
flyway显示已应用的Flyway数据库迁移信息
health显示应用健康检查信息
httptrace显示HTTP跟踪信息(默认情况下,最新100个HTTP请求)
info显示当前应用信息
integrationgraph显示 Spring 集成图
loggers显示和修改应用程序中记录器的配置
liquibase显示已应用的Liquibase数据库迁移的信息
metrics显示当前应用程序的“度量”指标信息
mappings显示所有@RequestMapping的映射路径信息
scheduledtasks显示应用程序中的任务计划
sessions允许从Spring Session支持的会话存储中检索和删除用户会话。使用Spring Session对响应式Web应用程序的支持时不可用
shutdown允许应用程序正常关闭(默认情况下不开启这个端点)
threaddump执行线程转储

访问这些端点需要 前缀 /actuator/ + 加上端点ID(spring boot 2.0之后需要加上 /actuator/),如 health 端点映射路径为 /actuator/health

端点启用和关闭

默认情况下,除 shutdown 的所有端点都是开启的,我们可以根据实际情况自由的控制哪些端点启用,哪些关闭,甚至还可以修改默认的端点名称。

配置端点的启用

management.endpoint.<id>.enabled,如启用 shutdown 端点

management.endpoint.shutdown.enabled=true

如果想要端点启用是选择加入而不是选择退出,将management.endpoints.enabled-by-default属性设置 为false,并使用各个端点 enabled 属性重新加入。以下示例启用info端点并禁用所有其他端点

management.endpoints.enabled-by-default=false
management.endpoint.info.enabled=true

暴露端点

暴露端点

我们启动了 spring boot 之后,在浏览器地址栏中分别输入:

http://localhost:8080/actuator/health

http://localhost:8080/actuator/beans

前面说默认情况下大部分端点都是开启的,那为何端点 health 是可以访问到的,而端点 beans 确不行呢?

原因是这些端点往往显示的都是项目的敏感信息,默认情况下,在 Web 下,Spring Boot 只会暴露 info h和 health 这两个端点,其余的都不暴露

想要改变暴露的端点,要使用 includeexclude 属性

属性默认
management.endpoints.jmx.exposure.exclude
management.endpoints.jmx.exposure.include*
management.endpoints.web.exposure.exclude
management.endpoints.web.exposure.includeinfo, health

为了让 Actuator 暴露端点,可以配置

management.endpoints.web.exposure.include=health,info,beans

这样就可以访问 beans 端点了(http://localhost:8080/actuator/beans

暴露端点的安全性问题

在默认情况下,Actuator 对敏感信息是除了health 和 info 端点, 其余端点都是不暴露的。虽然可以通过配置 application.properties 这样的方式可以进行访问,但是这样的方式从安全的角度来说是非常不利的

可以使用 Spring Security 配置用户和角色,来解决这些敏感信息的访问权限问题,引入spring-boot-starter-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角色。其他几种匹配方法也可用EndpointRequest

这个时候可以配置application.properties:

management.endpoints.web.exposure.include=*

通过这样的配置就可以把所有的端点都暴露出来,只是在Spring Security 中,对应保护的端点需
要拥有对应的权限才可以进行访问

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值