嘎里三分熟
  • 首页
  • JMusic
  • TSBay
  • 常用工具
  • About Me
  • 留言板
一行代码一世浮生
  1. 首页
  2. Java web
  3. SpringBoot
  4. 正文

Spring Boot Admin 监控系统

2018年05月23日 2284点热度 4人点赞 0条评论

一、简介

    如何对SpringBoot项目进行监控呢?比如健康度、运行指标、日志信息、线程状况等信息,本文介绍的是利用 Spring Boot Admin 项目进行监控。     Spring Boot Admin 这个项目是在Spring原生的监控插件Actuator的基础上进行了一些些改动,尤其是改变了不太美观的 UI,所以说这是一套成熟的监控系统,而且几乎可以拆箱即用。
    小插曲,这个项目是德国的一家叫做 codecentric 的软件公司写的,这家公司写了蛮多的 Spring Boot 周边插件,值得一看,地址:https://github.com/codecentric。     最后,附上文档地址,文档写得很直观、易懂:http://codecentric.github.io/spring-boot-admin/1.5.7/#_what_is_spring_boot_admin。
    本文的 server 端代码地址:https://github.com/goldenJet/SpringBootAdminServer.git。

二、应用

    1)整体架构

        由一个服务端和多个客户端组成。
        服务端就是我们单独构建的一个 Spring Boot Admin 项目,用于监控我们的需要被监控的项目。
        客户端就是我们自己的 SpringBoot 项目,即需要被监控的项目。
        我们只需要在客户端内配置好服务端的地址,然后客户端向服务端发送被监控的请求,之后服务端便会定时请求客户端的接口获得客户端的应用状态信息。

    2)服务端实现

        ① 新建一个 SpringBoot 项目,引入 Spring Boot Admin starter Server 的包,
<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-server</artifactId>
</dependency>
        你进入源码会发现,这一个 starter 其实是引入了两个重要的包:
<dependency>
   <groupId>de.codecentric</groupId>
   <artifactId>spring-boot-admin-server</artifactId>
   <version>1.3.2</version>
</dependency>
<dependency>
   <groupId>de.codecentric</groupId>
   <artifactId>spring-boot-admin-server-ui</artifactId>
   <version>1.3.2</version>
</dependency>
        ② 需要在启动类上面增加注解 @EnableAdminServer
@SpringBootApplication
@EnableAdminServer
public class SpringBootAdminDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootAdminDemoApplication.class, args);
    }
}
        ③ 在application.properties 中指定端口
    server.port=8081
    endpoints.sensitive=false
        其实经过①②两步的代码逻辑,监控server就已经写好了,启动项目,访问 localhost:8081即可访问监控server的UI。
            springBootAdmin01.png

    3)客户端实现

        服务端已经部署好了,接下来配置客户端。
        ① 客户端引入 client 包:
<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-client</artifactId>
    <version>1.5.7</version>
</dependency>
        ② 修改配置:
spring.boot.admin.url=http://localhost:8080  
management.security.enabled=false
            说明:                 配置第一行交代了服务端的项目访问地址,                 第二行:由于自Spring1.5开始,所有的 Endpoint都是默认安全的,即关闭的,所以要手动设置成 false,
            官方说明文档:
            springBootAdmin02.png             到此,其实客户端也已经简单配置好了,启动项目,重新访问服务端网页,发现有服务已经注册进来了,然后我们便可以查看该服务的各项基本信息:
springBootAdmin03.png

    4)服务端开启安全校验

        注意,此时的服务端是不需要进行登录的,所以如果我们想添加一个登录页面和登录按钮,则需要增加一些额外的配置,效果如图:
        springBootAdmin04.png         实现方式:
        ① 添加登录的ui包和 Spring Security 包:
<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-server-ui-login</artifactId>
    <version>1.5.7</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
    <version>1.4.5.RELEASE</version>
</dependency>
        ② 在配置文件中添加默认的登录用户名和密码:
security.user.name=admin
security.user.password=admin
        ③ 添加 SpringSecurity 的配置类
/**
 * @Author: Jet
 * @Description: 配置HTTPBASIC权限验证
 * @Date: 2018/5/21 22:07
 */
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true, proxyTargetClass = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    public void configure(WebSecurity web) throws Exception {
        //忽略css.jq.img等文件
        web.ignoring().antMatchers("/**.html", "/**.css", "/img/**", "/**.js", "/third-party/**");
    }
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable() //HTTP with Disable CSRF
                .authorizeRequests() //Authorize Request Configuration
                .antMatchers("/login",
                        "/api/**",
                        "/**/heapdump",
                        "/**/loggers",
                        "/**/liquibase",
                        "/**/logfile",
                        "/**/flyway",
                        "/**/auditevents",
                        "/**/jolokia",
                        "/health/**", "/info/**").permitAll() //放开"/api/**":为了给被监控端免登录注册并解决Log与Logger冲突
                .and()
                .authorizeRequests()
                .antMatchers("/**").hasRole("USER")
                .antMatchers("/**").authenticated()
                .and() //Login Form configuration for all others
                .formLogin()
                .loginPage("/login.html")
                .loginProcessingUrl("/login").permitAll()
                .defaultSuccessUrl("/")
                .and() //Logout Form configuration
                .logout()
                .deleteCookies("remove")
                .logoutSuccessUrl("/login.html").permitAll()
                .and()
                .httpBasic();
    }
}
            搞定!

三、注意点

    以下都是一些配置的小问题,在本文开头提供的文档地址内都能找到对应的解决方案。
    ① 如果 client 端有类似 Spring Security 之类的权限控制程序,则会造成 /health/ 等接口的访问被拒绝,因为服务端监控客户端应用的状态是调用如下接口来查看信息的,所以这些接口的限制需要放开,如SpringSecurity 则可以进行如下的配置:
        springBootAdmin05.png         springBootAdmin06.png     ② client 端服务的注册,默认是以当前系统的用户名来注册的,即会以 hostname:port 来注册         所以要改成以 IP 地址的形式来注册,只需要在 client 端添加主配置:spring.boot.admin.client.prefer-ip=true 即可。         但是如果以 IP 地址的形式访问,由于 IP 的获取时通过 InetAddress.getLocalHost() 来获取的,所以有时会出现 IP地址是 127.0.0.1 的情况,从而导致server 端无法请求到 client 端的程序。         终极解决办法:
        在 client 端使用如下配置指定项目的地址:spring.boot.admin.client.service-base-url=http://192.168.154.77:9090
    ③ 我们也可以在 client 端命名该客户端
        spring.boot.admin.client.name=adminClient             



本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: Actuator SpringBoot SpringBootAdmin SpringSecurity 微服务 项目监控
最后更新:2018年05月23日

GoldenJet

爱折腾技术的90后漫威小死忠程序员一枚

点赞
< 上一篇
下一篇 >

文章评论

取消回复

通过电子邮件订阅博客

分类目录
  • BootStrap (2)
  • Bug集中营 (6)
  • Java web (3)
  • JavaScript (7)
  • Java基础 (17)
  • Java工具 (5)
  • Linux (3)
  • Python (3)
  • SpringBoot (14)
  • Spring基础 (8)
  • thymeleaf (1)
  • 娱乐 (3)
  • 小谈 (2)
  • 常用工具 (7)
  • 技术分析集 (5)
  • 技能 (10)
  • 源码 (4)
  • 科普类 (1)
  • 算法 (9)
  • 踩坑记 (5)
文章归档
  • 2020年11月 (1)
  • 2020年7月 (1)
  • 2020年4月 (2)
  • 2020年3月 (1)
  • 2020年1月 (1)
  • 2019年11月 (1)
  • 2019年10月 (1)
  • 2019年9月 (1)
  • 2019年8月 (1)
  • 2019年7月 (2)
  • 2019年5月 (2)
  • 2019年4月 (2)
  • 2019年3月 (3)
  • 2019年2月 (2)
  • 2019年1月 (2)
  • 2018年12月 (2)
  • 2018年11月 (3)
  • 2018年10月 (3)
  • 2018年9月 (2)
  • 2018年8月 (3)
  • 2018年7月 (2)
  • 2018年5月 (1)
  • 2018年4月 (3)
  • 2018年3月 (2)
  • 2018年2月 (3)
  • 2018年1月 (5)
  • 2017年12月 (2)
  • 2017年11月 (3)
  • 2017年10月 (1)
  • 2017年9月 (1)
  • 2017年8月 (1)
  • 2017年7月 (7)
  • 2017年6月 (5)
  • 2017年5月 (1)
  • 2017年4月 (2)
  • 2017年3月 (4)
  • 2017年2月 (2)
小伙伴友链
  • 前端驿站

COPYRIGHT © 2017-2020 嘎里三分熟. ALL RIGHTS RESERVED.

浙ICP备17005575号-1

浙公网安备 33010802009043号