Spring Boot Admin的使用

作者
杜琪

关注


2015.12.25 17:30*
字数 1803
阅读 16569评论 21喜欢 55


上一篇文章中了解了Spring Boot提供的监控接口,例如:/health、/info等等,实际上除了之前提到的信息,还有其他信息业需要监控:当前处于活跃状态的会话数量、当前应用的并发数、延迟以及其他度量信息。这次我们了解如何利用Spring-boot-admin对应用信息进行可视化,如何添加度量信息。

准备

spring-boot-admin的Github地址在:https://github.com/codecentric/spring-boot-admin,它在Spring Boot Actuator的基础上提供简洁的可视化WEB UI。

  1. 首先在start.spring.io中创建简单的admin应用,主要步骤如下:
    • Group: org.sample.admin
    • Artifact: spring-boot-admin-web
    • Name: Spring Boot Admin Web
    • Description: Spring Boot Admin Web Application
    • Package Name: org.sample.admin
    • Type: Maven Project
    • Packaging: Jar
    • Java Version: 1.8
    • Language: Java
    • Spring Boot Version: 1.3.1
  2. Ops组选项中选择Actuator
  3. 选择Generate Project下载应用
  4. 使用IDEA打开工程,在pom.xml文件中添加下列依赖
    <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>
  5. SpringBootAdminWebApplication.java文件中添加@EnableAdminServer注解
    @SpringBootApplication
    @EnableAdminServer
    public class SpringBootAdminWebApplication {
     public static void main(String[] args) {
         SpringApplication.run(SpringBootAdminWebApplication.class, args);
     }
    }
  6. 在application.properties文件中添加如下配置
    server.port = 8090
    spring.application.name=Spring Boot Admin Web
    spring.boot.admin.url=http://localhost:${server.port}
    spring.jackson.serialization.indent_output=true
    endpoints.health.sensitive=false
  7. 启动应用程序,在后台给定如下提示:
    spring-boot-admin应用启动日志
  8. 在浏览器中访问上图中提示的地址,可以看到下图的信息
    spring-boot-admin应用

How Do

  1. 启动Admin Web应用后,现在可以添加针对BookPub应用的度量信息了。在文章Spring Boot应用的健康监控中,我们曾定制自己的Health Indicator,用来监控四个数据库接口的健康状态,这次我将利用spring-boot-admin对这些信息进行可视化管理。
  2. 在db-count-starter模块下添加代码,首先在db-count-starter/src/main/java/com/test/bookpubstarter/dbcount目录下添加DbCountMetrics类:
    public class DbCountMetrics implements PublicMetrics {
     private Collection<CrudRepository> repositories;
     public DbCountMetrics(Collection<CrudRepository> repositories) {
         this.repositories = repositories;
     }
     @Override
     public Collection<Metric<?>> metrics() {
         List<Metric<?>> metrics = new LinkedList<>();
         for (CrudRepository repository: repositories) {
             String name =
    DbCountRunner.getRepositoryName(repository.getClass());
             String metricName = "counter.datasource." + name;
             metrics.add(new Metric(metricName, repository.count()));
         }
         return metrics;
     }
    }
  3. DbCountAutoConfiguration定义对应的Bean,由Spring Boot完成自动注册
    @Bean
    public PublicMetrics dbCountMetrics(Collection<CrudRepository> repositories) {
     return new DbCountMetrics(repositories);
    }
  4. 启动BookPub应用,访问http://localhost:8080/metrics,可以看到DbCountMetrics已经添加到metrics列表中了。
    新添加的DbCountMetrics
  5. 在db-count-starter模块下的pom文件中添加spring-boot-admin-starter-client依赖,
    <dependency>
     <groupId>de.codecentric</groupId>
     <artifactId>spring-boot-admin-starter-client</artifactId>
     <version>1.3.2</version>
    </dependency>
  6. 在BookPub应用下的application.properties中配置下列属性值
    spring.application.name=@project.description@
    server.port=8080
    spring.boot.admin.url=http://localhost:8090
  7. 启动BookPub应用,然后在浏览器中访问http://localhost:8090
    监控BookPub应用
  8. 点击右侧的“Details”,可以看到该应用的详细信息
    BookPub应用的详细信息

分析

Spring Boot Admin就是将Spring Boot Actuator中提供的endpoint信息可视化表示,在BookPub应用(被监控)的这一端,只需要进行一点配置即可。

  • spring-boot-admin-starter-client,作为客户端,用于与Spring Boot Admin Web的服务器沟通;
  • spring.boot.admin.url=http:localhost:8090用于将当前应用注册到Spring Boot Admin。

如果希望通过Web控制系统的日志级别,则需要在应用中添加Jolokia JMX库(org.jolokia:jolokia-core),同时在项目资源目录下添加logback.xml文件,内容如下:

<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml"/>
    <jmxConfigurator/>
</configuration>

然后再次启动BookPub应用,然后在Spring Boot Admin的页面中查看LOGGING,则可以看到如下页面:

通过Spring Boot Admin修改日志级别

Spring Boot提供的度量工具功能强大且具备良好的扩展性,除了我们配置的DbCountMetrics,还监控BookPub应用的其他信息,例如内存消耗、线程数量、系统时间以及http会话数量。

gague和counter的定制

gague和counter度量通过GagueServiceCountService实例提供,这些实例可以导入到任何Spring管理的对象中,用于度量应用信息。例如,我们可以统计某个方法的调用次数,如果要统计所有RESTful接口的调用次数,则可以通过AOP实现,在调用指定的接口之前,首先调用counterService.increment("objectName.methodName.invoked");,某个方法被调用之后,则对它的统计值+1。具体的实验步骤如下:

  1. 在pom文件中添加AOP依赖
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
    </dependency>
  2. 在BookPub应用中添加Aspect组件,表示在每个Controller的方法调用之前,首先增加调用次数。
    @Aspect
    @Component
    public class ServiceMonitor {
     @Autowired
     private CounterService counterService;
     @Before("execution(* com.test.bookpub.controller.*.*(..))")
     public void countServiceInvoke(JoinPoint joinPoint) {
         counterService.increment(joinPoint.getSignature() + "");
     }
    }
  3. 在application.properties中设置打开AOP功能:spring.aop.auto=true
    然后启动BookPub应用,通过浏览器访问http://localhost:8080/books/9876-5432-1111,然后再去Spring Boot Admin后台查看对应信息,发现该方法的调用次数已经被统计好了
    统计接口的调用次数

如果希望统计每个接口的调用时长,则需要借助GagueService来实现,同样使用AOP实现,则需要环绕通知:在接口调用之前,利用long start = System.currentTimeMillis();,在接口调用之后,计算耗费的时间,单位是ms,然后使用gugeService.submit(latency)更新该接口的调用延时。

  1. ServiceMonitor类中添加对应的监控代码
    @Autowired
    private GaugeService gaugeService;
    @Around("execution(* com.test.bookpub.controller.*.*(..))")
    public void latencyService(ProceedingJoinPoint pjp) throws Throwable {
     long start = System.currentTimeMillis();
     pjp.proceed();
     long end = System.currentTimeMillis();
     gaugeService.submit(pjp.getSignature().toString(), end - start);
    }
  2. 然后在Spring Boot Admin后台可以看到对应接口的调用延迟
    统计接口的调用延时

这两个service可以应付大多数应用需求,如果需要监控其他的度量信息,则可以定制我们自己的Metrics,例如在之前的例子中我们要统计四个数据库接口的调用状态,则我们定义了DbCountMetrics,该类实现了PublishMetrics,在这个类中我们统计每个数据库接口的记录数量。

PublishMetrics这个接口只有一个方法:Collection<Metric<?>> metrics();,在该方法中定义具体的监控信息;该接口的实现类需要在配置文件中通过@Bean注解,让Spring Boot在启动过程中初始化,并自动注册到MetricsEndpoint处理器中,这样每次有访问/metrics的请求到来时,就会执行对应的metrics方法。

参考资料

  1. Chapter 6. 使用Spring进行面向切面编程(AOP)

J2EE开发
© 著作权归作者所有

springboot admin的更多相关文章

  1. 使用SpringBoot Admin监控SpringCloud微服务

    spring-boot admin的github地址:https://github.com/codecentric/spring-boot-admin 本文基于SpringCloud的环境和配置上增加 ...

  2. SpringBoot Actuator & SpringBoot Admin

    SpringBoot Actuator提供了很多监控和管理你的spring boot应用的HTTP或者JMX端点,并且你可以有选择地开启和关闭部分功能. 当你的spring boot应用中引入依赖之后 ...

  3. SpringBoot Admin 使用指南

    什么是 SpringBoot Admin? Spring Boot Admin 是一个管理和监控你的 Spring Boot 应用程序的应用程序.这些应用程序通过 Spring Boot Admin ...

  4. 【Springboot】用Springboot Admin监控你的微服务应用

    1 简介 目前,微服务大行其道,各大小公司争相学习模仿,把单体应用拆得七零八落.服务多了,运行的实例多了,给运维人员的压力就更大了.如果有十几个应用,单单做Health Check就已经够费时间的了. ...

  5. 实战SpringBoot Admin

    长话短说哦,直接查看下文吧 目录 声明 先锋 前提 SpringBoot Admin 介绍 服务端的搭建 客户端的搭建 参数的指南 尾声 声明 见名知意,实战SpringBoot Admin,实战!实 ...

  6. SpringBoot Admin应用监控搭建

    简介 Spring Boot Admin 用于监控基于 Spring Boot 的应用,它是在 Spring Boot Actuator 的基础上提供简洁的可视化 WEB UI. 参考手册地址:htt ...

  7. Springboot admin 发送邮件失败:com.sun.mail.smtp.SMTPSenderFailedException: 553 Mail from must equal authorized user

    发邮件已经是老生常谈了,今天又遇到了,而且又出了各种问题.我晕哦. 我的配置是: spring.mail.host=smtp..com spring.mail.username=klxxxx spri ...

  8. springboot admin server常用配置

    Property name Description Default value spring.boot.admin.context-path The context-path prefixes the ...

  9. 使用springboot Admin 2.0.6版本 集成监控springcloud微服务应用

    一 新建 添加依赖 <dependencies> <dependency> <groupId>de.codecentric</groupId> < ...

随机推荐

  1. Android 修改Camera拍照的默认保存路径

    前言          欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载,但请保留文章原始出处:          CSDN:http://www.csdn.net        ...

  2. DEDE标签综合

    dede: sql标签: sql标签可以称得上是个万能标签了,查询数据库将其输出,这里介绍一些关于这个标签的用法: 1.用来输出统计内容,这个是不错的,举个例子,我们来统计下总共发了多少的文章,思路就 ...

  3. springboot项目打包提示Unable to find a single main class from the following candidates错误

    提示Unable to find a single main class from the following candidates错误的原因是会从所有代码里面扫描包括main方法的类,找到多个类就报 ...

  4. Hibernate(十四)缓存

    一.什么是缓存 缓存是介于应用程序和永久必数据存储源之间,目的是为了降低应用程序直接读写永久必数据存储源的频率,从而提高运行性能 缓存通常是在内存中的如: Office中的Word.excel Hib ...

  5. PyQt5教程——组件 Ⅱ(八)

    这部分的教程将会继续介绍PyQt5的组件.我们这节教程的内容将包括像素图(QPixmap),单行文本框(QLineEdit)和下拉列表框(QComboBox) 像素图(QPixmap) 像素图(QPi ...

  6. 算法笔记_184:历届试题 约数倍数选卡片(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 闲暇时,福尔摩斯和华生玩一个游戏: 在N张卡片上写有N个整数.两人轮流拿走一张卡片.要求下一个人拿的数字一定是前一个人拿的数字的约数或倍数 ...

  7. MISRA-C++ 2008

  8. 通过导入虚拟电脑的方式还原centos

    通过oracle vm VirtualBox安装完成一台centos,然后导出虚拟电脑,再通过导入虚拟电脑的方式还原一台centos,还原的时候改一下机器名,不要选择重新初始化所有网卡mac,还原完成 ...

  9. Loader拉取图片,由于redirect重定向,导致策略文件无效 设置checkPolicyFile后还是无效:需要一个策略文件,但在加载此媒体时未设置 checkPolicyFile 标志

    大家好,在这里分享一下flash里边处理redirect的方法. 一般而言,大家不会遇到这个问题,毕竟图片地址一般杠杠的,不会redirect.但昨天在拉取空间的照片就会出现redirect.神啊!! ...

  10. maven Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4

      maven Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4 CreateTime--201 ...