使用Spirng Boot Admin监控Spring Cloud项目

一. 介绍

官方文档中介绍中提到,使用Spring Boot Admin监控,需要一个Spring Boot Admin Server服务,其他被监控的服务即为一个Spring Boot Admin Client,或者是通过Spring Cloud中的服务注册发现组件如:Eureak,Consul来进行监控服务,这样就不需要特意设置相关被监控的服务作为一个client,只需注册到Eureka或者Consul中即可。

注:本文是基于Spring Cloud Eureka做为服务注册发现组件来实现对服务的监控。提前是存在了Eureka的服务。另:没有使用eureka的需要在被监控服务中引入client的jar,具体情况请参考上面的官方文档。*

二.创建Spring Boot Admin Server服务

首先创建一个Spirng Boot项目,可以通过 http://start.spring.io/ 快速搭建。

  1. 添加Spring Boot Admin Server 依赖

    pom.xml

    <dependencies>
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-starter-server</artifactId>
            <version>1.5.7</version>
        </dependency>
    </dependencies>
    
  2. 服务启动类添加@EnableAdminServer注解开启监控

    @Configuration
    @EnableAutoConfiguration
    @EnableAdminServer
    public class SpringBootAdminApplication {
        public static void main(String[] args) {
            SpringApplication.run(SpringBootAdminApplication.class, args);
        }
    }
    
  3. 将Spring Boot Admin Server 注册到Eureka

    • 添加Eureka依赖

      pom.xml

      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka</artifactId>
      </dependency>
    
    • 服务启动类添加@EnableDiscoveryClient开启服务发现

      @Configuration
      @EnableAutoConfiguration
      @EnableDiscoveryClient
      @EnableAdminServer
      public class SpringBootAdminApplication {
        public static void main(String[] args) {
          SpringApplication.run(SpringBootAdminApplication.class, args);
        }
      }
      
    • 添加Eureka服务注册配置

      eureka:  
        instance:
          leaseRenewalIntervalInSeconds: 10
        client:
          registryFetchIntervalSeconds: 5
          serviceUrl:
            defaultZone: http://10.1.3.54:8761/eureka/
      
      # 关闭spring boot actuator的安全,否则敏感路径访问是401
      management:
        security:
          enabled: false
      
    1. 启动项目,访问ip:port 即进入管理的页面

      如图:

      1526718130968.png

图中显示的这些项目都是已经注册到Eureka上的服务,通过将Spring Boot Admin Server注册到Eureka上来监控项目。

三.配置设置

  1. 登录UI

    Admin管理服务没有任何的安全措施,任何人知道ip和port就能访问,这就很不安全,而Spring Boot Admin也提供了登录页面。需要和Spring Security 配合使用。

    • 添加Spring Boot Admin UI依赖:

      <dependency>
          <groupId>de.codecentric</groupId>
          <artifactId>spring-boot-admin-server-ui-login</artifactId>
          <version>1.5.7</version>
      </dependency>
      
    • 添加Spring Security依赖:

      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-security</artifactId>
      </dependency>
      
    • 在项目启动类中添加配置代码:

      package com.aspire.springbootadmin;
      
      import de.codecentric.boot.admin.config.EnableAdminServer;
      import org.springframework.boot.SpringApplication;
      import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
      import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
      import org.springframework.context.annotation.Configuration;
      import org.springframework.security.config.annotation.web.builders.HttpSecurity;
      import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
      
      @Configuration
      @EnableAutoConfiguration
      @EnableDiscoveryClient
      @EnableAdminServer
      public class SpringbootAdminApplication {
      
         public static void main(String[] args) {
             SpringApplication.run(SpringbootAdminApplication.class, args);
         }
      
         @Configuration
         public static class SecurityConfig extends WebSecurityConfigurerAdapter {
             @Override
             protected void configure(HttpSecurity http) throws Exception {
                 // Page with login form is served as /login.html and does a POST on /login
                 http.formLogin().loginPage("/login.html").loginProcessingUrl("/login").permitAll();
                 // The UI does a POST on /logout on logout
                 http.logout().logoutUrl("/logout");
                 // The ui currently doesn't support csrf
                 http.csrf().disable();
      
                 // Requests for the login page and the static assets are allowed
                 http.authorizeRequests()
                         .antMatchers("/login.html", "/**/*.css", "/img/**", "/third-party/**")
                         .permitAll();
                 // ... and any other request needs to be authorized
                 http.authorizeRequests().antMatchers("/**").authenticated();
      
                 // Enable so that the clients can authenticate via HTTP basic for registering
                 http.httpBasic();
             }
         }
      }
      
      
    • 添加配置文件

      security:
        user:
          name: admin
          password: 123123
        basic:
          enabled: false
      
    • 再次访问会出现一个登陆页面

      1526721233818.png

      输入配置中配置的用户名和密码点击Login登录。进入后导航栏上也会多出一个退出按钮。点击后即返回到登录页面。

    1526721401960.png
  1. Client应用的版本信息

    想要在Application列表中显示版本,使用maven的build-info 插件,在pom.xml文件添加插件

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>build-info</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    

    如图:没有添加的就没有显示。

1526885945400.png
  1. Client应用JMX bean管理

    要在管理界面中与JMX-beans进行交互,您必须在应用程序中包含Jolokia。 添加pom依赖:

    <dependency>
        <groupId>org.jolokia</groupId>
        <artifactId>jolokia-core</artifactId>
    </dependency>
    

    添加后在监控的应用detial菜单里就可以看到JMX菜单

    1526886145536.png
  1. Client应用添加日志Log

    在Client应用的properties中配置如下:

    logging:
         path: /xxx/xxx/xxx/
    

    指定日志输出路径,然后就可以显示日志了:

1526724718822.png
  1. hystrix ui支持

    spring boot admin还可以集成hystrix展示。 前提是Client端需要开启hystrix才可以。

    • 在Spring Boot Admin Server 添加依赖

      <dependency>
         <groupId>de.codecentric</groupId>
         <artifactId>spring-boot-admin-server-ui-hystrix</artifactId>
         <version>1.4.6</version>
      </dependency>
      
    • 在Server的配置文件中添加endpoints节点

      spring.boot.admin.routes.endpoints: env,metrics,trace,dump,jolokia,info,configprops,trace,logfile,refresh,flyway,liquibase,heapdump,activiti,hystrix.stream
      
    • 点击开启了Hystrix的Client,点击Hystrix菜单既能看到Hystrix信息

      1526883244216.png

6.Turbine UI 支持

​ spring boot admin还可以集成turbine展示。

  • 加入依赖:

    <dependency>
       <groupId>de.codecentric</groupId>
       <artifactId>spring-boot-admin-server-ui-turbine</artifactId>
       <version>1.5.7</version>
    </dependency>
    
  • 配置turbine的cluster和location,clusters为turbin服务中配置的clusters一致,location需要指定注册到Eureka中的Turbine服务名称,例如你的Turbine服务名称为TURBINE-SERVER,配置就为下所示。(其实Spring Boot Admin Server本身就可以当做Turbine服务,如果之前就存在了Turbine服务的话就可以直接在这里配置。若不存在Turbine服务,就在Spring Boot Admin Server添加Turbine相关依赖和配置,这样Spring Boot Admin Server也就成了Turbine服务。)

    spring.boot.admin.turbine:
      clusters: default
      location: TURBINE-SERVER
    
  • 最后在配置文件中添加turbine.stream的endpoint

    spring.boot.admin.routes.endpoints: env,metrics,trace,dump,jolokia,info,configprops,trace,logfile,refresh,flyway,liquibase,heapdump,activiti,hystrix.stream,turbine.stream
    
  • 界面

    导航栏中会多出TURBINE的Tab,点击就能看到Turbine信息

    1526885592504.png

7.邮件通知

Spring Boot Admin 同时支持邮件通知。

  • 添加依赖

    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>
    
  • 添加Spring邮件配置(这里记一个小坑,开始使用的是qq邮箱,结果死活连不上qq邮箱的smtp服务器,查了下原因是腾讯那边把公司内网ip给禁止了,结果连上4G网就没有问题了。)

    spring:
      mail:
        host: mmmail.aspire-tech.com
        password: xxxxx
        port: 25
        username: xxxx
    
  • 添加Spring Boot Admin邮件配置

    boot:
      admin:
          notify:
            mail:
              to: xxxx@aspirecn.com
              from: chufule@aspirecn.com
              enabled: true
    
  • 效果如图,监控的服务启动,停止都会有邮件通知。

    1526895078834.png

    1526895103720.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容