小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
WangScaler: 一个用心创作的作者。
声明:才疏学浅,如有错误,恳请指正。
Actuator不是其他平台提供的,而是SpringBoot的四大核心之一。引入之后,通过简单的配置就可以监控SpringBoot的一些信息。
引入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
引入依赖之后,就可以监控我们的应用了。
简单的配置
我们这里为了演示方便,我们将所有端点设置为开启状态并且暴露在web端。如果是正式环境不可这样配置,可以结合Spring Security进行认证访问。
management:
endpoints:
#暴露所有端点信息
enabled-by-default: true
web:
exposure:
#以web方式暴露
include: '*'
endpoint:
health:
show-details: always
查看信息
配置完成之后,就可以直接查看这些端点的信息。
在url后拼接/actuator即可访问。
我们可以看到,有一个参数是shutdown,顾名思义应该是远程关闭程序的接口。接下来我们试试能不能远程关闭程序。
远程关闭程序
我们直接点击这个url,发送请求。
可以看到这是个Post请求,不能直接在浏览器访问,我们用postman试试。
从响应的信息来看,确实关闭了应用。接下来我们看看我们的应用是不是真的关闭了。
没错,这确实是远程关闭应用的接口,是不是很强大?这如果随意开放出去,被用户利用了那不是gg了,所以再次提醒大家,这些端口万不可随意开放。
保护端点
这些敏感端点必须需要开放,那就得增加安全策略,它可以和 Spring Security结合来保护这些端点。
示例如下:
import org.springframework.boot.actuate.autoconfigure.security.servlet.EndpointRequest;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration(proxyBeanMethods = false)
public class MySecurityConfiguration {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.requestMatcher(EndpointRequest.toAnyEndpoint())
.authorizeRequests((requests) -> requests.anyRequest().hasRole("ENDPOINT_ADMIN"));
http.httpBasic();
return http.build();
}
}
使用这个配置,actuator的所有端点都需要ENDPOINT_ADMIN角色才能访问。
最后
actuator的监控端点有很多,使用方式也是多样的,大家感兴趣的可以直接访问官网来学习如何正确使用。它不仅能监控内存的信息,同时服务集成的数据库的状态也可监控,非常不错的一个监控服务性能的工具,大家快去看看吧。
来都来了,点个赞再走呗!
关注WangScaler,祝你升职、加薪、不提桶!