• Spring Boot Admin 横空出世!


    大家好,我是栈长。

    前言

    哈哈,略标题党,其实 Spring Boot Admin 这个项目已经开源好些年了,栈长看了下:

    有记录的最早版本是在 2014 年,和 Spring Boot 在同一年相继开源:

    https://github.com/codecentric/spring-boot-admin

    Github 超过 10k+ 的关注量,不可谓不火爆。。

    可能还有一些小伙伴还没用过:

    • 它到底是个什么项目?
    • 它都有什么用处?
    • 和 Spring Boot 又有什么关系呢?

    本文栈长带你解开这些谜团。。

    Spring Boot Admin

    简介

    Spring Boot Admin = Spring Boot + Admin,用于管理和监控 Spring Boot 应用程序,它并不是 Spring Boot 官方提供的,而是某个社区开源的。

    主要功能如下:

    • 显示健康状况
    • 显示详细指标(如:jvm、内存,micrometer、数据源、缓存等)
    • 监控并下载日志文件
    • 显示 jvm 中的系统、以及环境变量
    • 显示 Spring Boot 配置属性
    • 简单的日志级别管理
    • 支持与 JMX bean 交互
    • 显示线程堆栈
    • 下载堆信息
    • 显示 http 跟踪
    • 显示 http 端点
    • 显示计划任务
    • 显示/ 删除活动会话
    • 显示 Flyway / Liquibase 迁移
    • 状态变更通知

    看着还挺实用的吧?能了解很多 Spring Boot 系统的相关信息。

    实战

    废话少说,现在开始来实战。

    Spring Boot 应用程序通过 Spring Boot Admin Client 以 http 的方式注册,Spring Cloud 应用程序则通过 Eureka, Consul 等进行注册,UI 只是 Spring Boot Actuator 端点之上的 Vue.js 应用程序。

    本文以 Spring Boot 应用程序进行演示,所以,我们先搭个 Spring Boot Admin Server(服务端),再搭建个 Client(应用程序客户端)测试下。

    Spring Cloud 服务注册可以参考:

    https://codecentric.github.io/spring-boot-admin/#discover-clients-via-spring-cloud-discovery

    1、搭建 Spring Boot Admin Server

    Spring Boot 基础就不介绍了,推荐下这个实战教程:

    https://github.com/javastacks/spring-boot-best-practice

    或者看栈长之前的 Spring Boot 系列教程:

    年轻人的第一个 Spring Boot 应用,太爽了!

    首先通过上述教程构建一个简单的 Spring Boot 初始项目,端口为:8080。

    然后添加 Spring Boot Admin Server 依赖:

    <dependencies>
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-starter-server</artifactId>
            <version>${spring-boot-admin-starter-server.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
    

    在启动类上添加 @EnableAdminServer 以启用 Spring Boot Admin Server:

    /**
     * 作者:栈长
     * 来源微信公众号:Java技术栈
     */
    @EnableAdminServer
    @SpringBootApplication
    public class Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    
    
    }
    

    另外,Spring Boot Admin Server 也是支持集群的,这里不另行演示了,有兴趣的的可以参考:

    https://codecentric.github.io/spring-boot-admin/#clustering-support

    2、搭建 Spring Boot Admin Client

    首先通过上述教程构建一个简单的 Spring Boot 初始项目,端口为:8081。

    然后添加 Spring Boot Admin Client 需要的依赖:

    <dependencies>
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-starter-client</artifactId>
            <version>${spring-boot-admin-starter-client.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
    </dependencies>
    

    添加以下配置:

    spring.boot.admin.client.url: http://localhost:8080
    management.endpoints.web.exposure.include: "*"
    

    1)配置 Spring Boot Admin Server 的地址;

    2)Spring Boot 现在不会默认公开所有端点,所以这里需要手动放开全部端点。

    让 actuator 所有端点可访问:

    /**
     * 作者:栈长
     * 来源微信公众号:Java技术栈
     */
    @Configuration
    public class SecurityPermitAllConfig extends WebSecurityConfigurerAdapter {
    
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.authorizeRequests().anyRequest().permitAll()
                    .and().csrf().disable();
        }
    
    }
    

    这里为了测试,先禁用所有安全措施,确保所有端点可以被访问,不然无法被监控到,实际项目中自行设置安全性。

    本节教程所有实战源码已上传到这个仓库:

    https://github.com/javastacks/spring-boot-best-practice

    欢迎 Star 关注学习,后续会持续更新 Spring Boot 实战教程。

    3、测试

    项目搭建和配置完后,现在先后启动 Server 和 Client。

    必须先启动 Server,因为 Client 启动的时候需要向 Server 注册,不然会注册失败。

    现在来访问 Server:

    http://localhost:8080/

    成功了,略有一点 Spring Cloud Eureka 页面的意味吧!

    现在把客户端停掉,若干秒后页面会自动刷新:

    状态变更可以通过邮件等方式进行通知,以实时关注你的服务运行状态,有需要的可以参考:

    https://codecentric.github.io/spring-boot-admin/#_notifications

    4、更多详解

    点击对应的项目进去,可以看到更多的细节。

    细节

    细节菜单中展示了一些健康、JVM 相关信息:

    性能

    性能菜单可以添加并显示各种性能指标:

    环境

    环境菜单中显示所有 Servlet 初始参数、系统、环境变量参数等:

    Bean

    类菜单中显示所有 Spring 容器中的 Bean,及是否单例:

    配置参数

    配置属性菜单显示所有各种 Spring Boot 配置参数:

    计划任务

    计划任务菜单中显示所有的计划任务:

    这里没有计划任务,我们先随便在客户端添加一个:

    @Scheduled(cron = "0/10 * * * * ?")
    public void task() {
        log.info("微信公众号Java技术栈正在执行计划任务。。。");
    }
    

    再重启客户端,刷新下页面:

    这里只是展示任务信息及状态,并不能进行控制。

    日志配置

    日志配置菜单显示所有类的日志级别,并能修改某个类的日志级别:

    默认情况下,日志文件无法通过执行器端点访问,需要在客户端设置 logging.file.pathlogging.file.name 参数来配置 Spring Boot 以写入日志文件:

    logging:
      file:
        name: ./logs/sba-client.log
    

    更多请阅读 Spring Boot 日志实战,关注公众号:Java技术栈,在公众号菜单中阅读,我都整理好了。

    再重启客户端,刷新下页面:

    实时展示日志,再也不用登录 Linux 一堆命令查看了。

    JVM

    JVM 菜单显示当前所有线程堆栈、堆栈,并能进行下载分析:

    映射

    映射菜单显示所有的 URL 映射:

    缓存

    缓存菜单显示所有缓存:

    这里不仅是展示,还能进行清除和管理。

    更多的使用可以参考官方文档:

    https://codecentric.github.io/spring-boot-admin/

    总结

    Spring Boot Admin 用于管理和监控 Spring Boot 应用程序,原理就是通过客户端暴露的各种 /actuator 端点进行的,在此基础上进行了一些包装和 UI 展示。

    Spring Boot Admin 不能完全代替专业监控系统,能监控也只是 /actuator 端点力所能及的,但对于那些简单的 Spring Boot 应用程序的监控还是很有帮助的。

    本节教程所有实战源码已上传到这个仓库:

    https://github.com/javastacks/spring-boot-best-practice

    欢迎 Star 关注学习,后续会持续更新 Spring Boot 实战教程。

    好了,今天的分享就到这里了,后面栈长会分享更多好玩的 Java 技术和最新的技术资讯,关注公众号Java技术栈第一时间推送,我也将主流 Spring Boot 面试题和参考答案都整理好了,在公众号后台回复关键字 "面试" 进行刷题。

    版权声明: 本文系公众号 "Java技术栈" 原创,转载、引用本文内容请注明出处,抄袭、洗稿一律投诉侵权,后果自负,并保留追究其法律责任的权利。

    近期热文推荐:

    1.1,000+ 道 Java面试题及答案整理(2022最新版)

    2.劲爆!Java 协程要来了。。。

    3.Spring Boot 2.x 教程,太全了!

    4.别再写满屏的爆爆爆炸类了,试试装饰器模式,这才是优雅的方式!!

    5.《Java开发手册(嵩山版)》最新发布,速速下载!

    觉得不错,别忘了随手点赞+转发哦!

  • 相关阅读:
    C# 设置 Excel 条件格式 与 冻结窗口
    Exce折叠效果(数据组合)
    [一点一滴学英语]20050829
    Tencent Messenger
    很有趣的一篇文章:不使用Linux的五大理由
    Tencent Messenger (continued)
    N久没有听过这么搞笑的RAP了
    [一点一滴学英语]20050827
    [Eclipse笔记]SWT真正的优势不是快这么简单
    [一点一滴学英语]20050828
  • 原文地址:https://www.cnblogs.com/javastack/p/16133474.html
Copyright © 2020-2023  润新知