文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

SpringBoot Admin怎么样

2023-06-26 05:47

关注

这篇文章主要介绍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服务端搭建成功

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这个应用了,具体可参考下图

SpringBoot Admin怎么样

(2)可查看应用的具体信息

在应用墙点击这个应用,我们可以看到这个应用的具体信息,如堆内存变化及线程数等。具体可参考下图

SpringBoot Admin怎么样

(3)日志查看及堆内存变化观察

请求我们在admin-client中写的模拟接口 http://localhost:9088/api/hi ,该接口请求一次则会输出日志,同时开辟100MB的堆内存空间。
请求多次后在网页上可以实时的看到日志如下图

SpringBoot Admin怎么样

由于我们直接new了100MB的大对象,此时可以查看细节中的堆内存变化;具体如下图

SpringBoot Admin怎么样

二、安全性

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认证的页面

SpringBoot Admin怎么样

访问 http://localhost:9088/api/hi,则出现的是Spring Security 自带的表单登录页面

SpringBoot Admin怎么样

访问admin-server 的管理页面,发现admin-client应用信息正常,说明本次修改的Spring Security配置没有问题

SpringBoot Admin怎么样

以上是“SpringBoot Admin怎么样”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯