这篇文章主要介绍SpringBoot Admin怎么样,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
公司有个SpringBoot项目需要加个监控,网上找了下发现大家都在推荐SpringBootAdmin。SpringBoot Admin是开源社区孵化的项目,用于对SpringBoot应用的管理和监控。SpringBoot Admin 分为服务端(spring-boot-admin-server)和客户端(spring-boot-admin-client),服务端和客户端之间采用http通讯方式实现数据交互;单体项目中需要整合spring-boot-admin-client才能让应用被监控。在SpringCloud项目中,spring-boot-admin-server 是直接从注册中心抓取应用信息,不需要每个微服务应用整合spring-boot-admin-client就可以实现应用的管理和监控。
官网参考链接:https://codecentric.github.io/spring-boot-admin/2.2.4/
本文只叙述SpringBoot Admin 管理和监控单体应用 ,不涉及SpringCloud相关的内容 。
一、快速入门
1.1 SpringBoot Admin服务端的搭建
(1) Maven依赖说明 SpringBoot版本
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.10.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent>
添加SpringBootAdmin server依赖及SpringBoot web 依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--这里由于我的springboot版本是2.2.10.RELEASE,所以 springboot admin 也要用2.2.x版--> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-server</artifactId> <version>2.2.4</version> </dependency>
(2)application.yml中配置端口
# 指定端口server:port: 23333
(3)编写启动类并开启SpringBootAdminServer
package com.zcode.monitor.server; import de.codecentric.boot.admin.server.config.EnableAdminServer; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @EnableAdminServer // 开启 springboot admin 服务端 @SpringBootApplication public class AdminServerApplication { public static void main(String[] args) { SpringApplication.run(AdminServerApplication.class,args); } }
(4)浏览器访问测试 浏览器访问 http://localhost:23333/ 出现以下页面说明SpringBoot Admin服务端搭建成功
1.2 SpringBootAdmin client端搭建
备注:所谓的 client端就是指我们需要被监控的应用端。这里我们写一个简单点的SpringBoot web应用做演示
(1)Maven依赖说明
SpringBoot版本如下
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.10.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent>
添加SpringBootAdmin client 依赖及SpringBoot web 依赖。这里不需要添加SpringBoot actuator 依赖,因为SpringBootAdmin client里面已经包含了actuator相关依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--这里由于我的springboot版本是2.2.10.RELEASE,所以 springboot admin 也要用2.2.x版--> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-client</artifactId> <version>2.2.4</version> </dependency>
(2) application.yml配置
在yml中需要 配置如下信息:
应用端口
开放端点用于SpringBootAdmin 监控
配置应用名称(该名称会在SpringBoot Admin的管理页面显示)
配置Admin Server的地址
配置下日志文件的文件名和存放位置 (如果不配置则会看不到日志)
# 端口server: port: 9088#开放端点用于SpringBoot Admin的监控management: endpoints: web: exposure: include: '*'spring: application: name: admin-client # 给client应用取个名字 boot: admin: client: url: http://localhost:23333 #这里配置admin server 的地址logging: file: name: admin-client.log #配置生成日志文件名称
(3)写一个Controller模拟一个普通的接口
通过浏览器访问这个接口就会打印日志,具体代码如下
@Slf4j @RestController @RequestMapping("api") public class HelloController { private AtomicInteger count = new AtomicInteger(0); @GetMapping("hi") private String sayHi() { // 每次进来如打印下日志 log.info("{} 啪...我第{}次进来了.", LocalDateTime.now(), count.addAndGet(1)); // 每次进来new 个大对象,便于监控观察堆内存变化 byte[] bytes = new byte[100*1024*1024]; log.info("new了 100MB"); return "hi springboot addmin " + LocalDateTime.now(); } }
(4)写个启动类
启动类代码就很简单了,就是一个普通的SpringBoot项目的启动类,上面没加其他注解。具体如下
@SpringBootApplicationpublic class AdminClientApplication { public static void main(String[] args) { SpringApplication.run(AdminClientApplication.class, args); }}
1.3 效果展示
(1)已管理的应用会在应用墙上展示
当我们的admin-client项目启动后,在 admin-server的管理页面的应用墙上就能看到admin-client这个应用了,具体可参考下图
(2)可查看应用的具体信息
在应用墙点击这个应用,我们可以看到这个应用的具体信息,如堆内存变化及线程数等。具体可参考下图
(3)日志查看及堆内存变化观察
请求我们在admin-client中写的模拟接口 http://localhost:9088/api/hi ,该接口请求一次则会输出日志,同时开辟100MB的堆内存空间。
请求多次后在网页上可以实时的看到日志如下图
由于我们直接new了100MB的大对象,此时可以查看细节中的堆内存变化;具体如下图
二、安全性
2.1 admin-server端安全加固
这个SpringBoot Admin的管理后台如果没密码就能访问,那实在太不安全了,因此我们要给它加上登录的功能。
参考SpringBoot Admin的官方文档,我们可以在Admin-Server端添加Spring Security 相关依赖及就可以实现需要登录后才能访问网页管理面板。
官网参考链接为:https://codecentric.github.io/spring-boot-admin/2.2.4/#_securing_client_actuator_endpoints
下面开始具体的改造
(1)admin-server添加Spring Security 相关依赖
<!--springboot admin 安全相关--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
(2)admin-server 设置账号和密码
在application.yml配置账号和密码
# 配置一个账号和密码spring: security: user: name: admin password: root123456
(3)admin-server 添加一个Spring Security 配置类
@Configuration public class SecuritySecureConfig extends WebSecurityConfigurerAdapter { private final String adminContextPath; public SecuritySecureConfig(AdminServerProperties adminServerProperties) { this.adminContextPath = adminServerProperties.getContextPath(); } @Override protected void configure(HttpSecurity http) throws Exception { SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler(); successHandler.setTargetUrlParameter("redirectTo"); successHandler.setDefaultTargetUrl(adminContextPath + "/"); http.authorizeRequests() //1.配置所有静态资源和登录页可以公开访问 .antMatchers(adminContextPath + "/assets@Slf4jpublic class SpringSecurityConfig2 { @Configuration @Order(1) public static class HttpBasicSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter { public HttpBasicSecurityConfigurationAdapter() { log.info("HttpBasicSecurityConfigurationAdapter... start"); } protected void configure(HttpSecurity http) throws Exception { // 这个配置只针对 /actuator @Configuration public static class FormLoginWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter { public FormLoginWebSecurityConfigurerAdapter() { log.info("FormLoginWebSecurityConfigurerAdapter... start"); } @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .anyRequest().authenticated() .and() .formLogin(); } }}
添加完这个配置类后,记得把我们上面配置的SpringSecurityActuatorConfig 这个类删除了,然后重启项目。效果如下:
访问http://localhost:9088/actuator/health ,则出现的是httpBasic认证的页面
访问 http://localhost:9088/api/hi,则出现的是Spring Security 自带的表单登录页面
访问admin-server 的管理页面,发现admin-client应用信息正常,说明本次修改的Spring Security配置没有问题
以上是“SpringBoot Admin怎么样”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!