Spring Cloud笔记(6)使用Spring Boot Admin监控服务

微服务的核心思想就是拆分业务,将单个系统按业务边界切分为多个可独立部署的微服务子系统。这样可以让系统更容易扩展,更快速的迭代,但必然会导致系统内服务实例数量的大量增加,再加上服务实例可能部署到不同的操作系统和网段,对整个系统进行管理和监控的难度比单系统环境要高出不少。幸运的是,针对Spring Boot技术体系我们有一个开箱即用的系统监控解决方案——Spring Boot Admin,对于中小规模的微服务系统,它几乎可以提供一切必要的监控需求,而且更重要的是它对于业务系统是非侵入性的,只需要几行配置就可以将一个基于Spring Boot技术开发的应用纳入到监控之中。

Spring Boot Admin分为两部分:client和server。client为被监控端,通过集成Spring Boot Actuator组件暴露出各种监控指标和信息,并注册到一个server端;server端接受client的注册,并定时查询client端提供的监控信息,管理员可以通过server端内置的一个web应用查看client的各项指标和信息。

现在我们就来利用Spring Boot Admin来为Spring Cloud Demo项目加入服务指标监控的功能。首先来创建一个monitor模块,作为Spring Boot Admin的server端,在pom.xml中加入如下配置:

    <!--spring-boot-admin-starter-server必须和spring-boot的版本匹配,2.1.X的版本无法在spring boot 2.2.0以上的版本运行-->
     <dependency>
        <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-starter-server</artifactId>
            <version>2.2.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
      </dependency>

项目启动类中需要加入一个@EnableAdminServer的注解:

@SpringBootApplication
@EnableAdminServer
public class MonitorApplication {
    public static void main(String[] args) {
        SpringApplication.run(MonitorApplication.class, args);
    }
}

application.yml配置文件只需要加入consul的相关配置即可,用于寻找其它被监控的client。Spring Boot Admin的客户端有两种注册方式,第一种是在被监控的服务客户端直接引入spring-boot-admin-starter-client,并配置server端的监控地址,主动向server端进行注册,这种一般用于监控独立的应用;第二种就是和Spring Cloud体系相匹配的,通过服务注册中心直接寻找需要被监控的客户端信息,在我们的demo里面就是consul,在consul中注册了的服务会直接成为Spring Boot Admin的client。

这样的话,我们demo里面的服务提供方只需要做很小的改造即可接入Spring Boot Admin的监控体系。主要就是加入Spring Boot Actuator支持,通过该框架来暴露出各种监控指标的,这样server端才能够对监控指标进行汇总和图形化展示。demo的parent项目之前已经添加了Spring Boot Actuator的依赖,但是默认只会暴露出一个/actuator/heath的接口,这对我们的监控来说是远远不够的,所以还需要在每个服务提供方暴露出更多的监控指标。具体来说,就是在配置文件中加入以下Actuator的配置:

#输出监控指标用于服务监控,暴露的监控指标可根据实际情况调整
management:
  endpoints:
    web:
      exposure:
        include: "*"
  endpoint:
    health:
      show-details: ALWAYS
#如果要在Spring boot admin中查看日志,需要指定存储的文件
logging:
  file: ./logs/order-service.log

现在将服务全部启动,访问monitor的地址http://localhost:9010,就可以看到Spring boot admin的监控页面了:

监控首页.png

需要注意的是,Spring Boot Admin完全依赖Actuator暴露的接口进行监控,如果没有实现这些接口,默认就会显示离线(比如consul实例实际上是在线的)。进入到具体的某个服务,可以看到更多的监控指标,还能够在线查看日志和修改logger的日志级别:
明细信息.png

Spring Boot Admin还支持对标题和UI进行部分的定制,具体的配置项,可参考官方文档

monitor模块可以收集到应用的一些敏感信息,如果需要暴露到外网进行查看,就必须添加相关的安全措施。我们可以通过spring security框架,快速为server端添加相应的用户登录验证功能。首先在monitor中加入spring security的依赖:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

然后编写一个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()
                .antMatchers(adminContextPath + "/assets/**").permitAll()
                .antMatchers(adminContextPath + "/login").permitAll()
                .antMatchers(adminContextPath + "/actuator/health").permitAll()
                .anyRequest().authenticated()
                .and()
                 //login登录页是spring boot admin ui里面已经集成了的
                .formLogin().loginPage(adminContextPath + "/login").successHandler(successHandler).and()
                .logout().logoutUrl(adminContextPath + "/logout").and()
                .httpBasic().and()
                .csrf()
                .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
                .ignoringAntMatchers(
                        adminContextPath + "/instances",
                        adminContextPath + "/actuator/**"
                );
    }
}

重新启动后,再次访问monitor模块,就需要进行登录验证了:


登录页面.png

登录的用户名和密码可以在application.yml中配置:

spring:
  #允许登录监控系统的用户名和密码
  security:
    user:
      name: admin
      password: 123456

需要注意的是,如果没有使用注册中心,而是通过spring-boot-admin-starter-client的方式直接向server端注册的client,还需要加入server端的验证信息才能成功注册,类似像这样:

spring
    boot:
      admin:
        client:
          #server端的注册地址
          url: http://localhost:9010
          username: admin
          password: 123456
          instance:
            #client的访问地址前缀,server通过该地址获取监控信息
            service-base-url: http://192.168.1.252:8090

本文的相关代码可以查看这里 spring-cloud-demo

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

推荐阅读更多精彩内容