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 -- 获取IP和MAC地址

    通过InetAddress.getLocalHost()得到始终是“127.0.0.1”,要想得到真正的网络ip地址要通过下面的方法: 首先新建一个工程,修改AndroidManifest.xml文件 ...

  2. Jmeter-Maven-Plugin高级应用:Log Levels

    Log Levels Pages 12 Home Adding additional libraries to the classpath Advanced Configuration Basic C ...

  3. IO介绍

    IO在计算机中指Input/Output,也就是输入和输出.由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘.网络等,就需要IO接口. 比如你打开 ...

  4. curl_errno错误码说明

    http://hi.baidu.com/lifang218c/item/fa80496eb4cf262f68105b50 http://blog.csdn.net/cwj649956781/artic ...

  5. 虎嗅: 小米盒子vs乐视盒子

    机顶盒并非新鲜概念,可一旦和互联网发生了跨界关系,就会产生奇妙的反应.自年初小米盒子和乐视盒子分别在突破重重阻碍成功发售之后,互联网企业进军硬件制造领域的趋势愈发明显.今天我们拿到了两家的盒子产品,从 ...

  6. 在MyEclipse中设置jsp页面为默认utf-8编码(转)

    http://www.cnblogs.com/xdp-gacl/p/3496161.html 在MyEclispe中创建Jsp页面,Jsp页面的默认编码是“ISO-8859-1”,如下图所示: 在这种 ...

  7. redis 安装 命令

    安装: http://redis.io/download 在线操作命令:http://try.redis.io/ 命令查询:https://redis.readthedocs.org/en/lates ...

  8. java面试第八天

    异常: 异常的分类 Java会将所有的异常封装成对象,其根本父类为Throwable. Throwable有两个子类:Error 和Exception. Error:一个Error对象表示一个程序错误 ...

  9. 编译时:virtual memory exhausted: Cannot allocate memory(转)

    一.问题 当安装虚拟机时系统时没有设置swap大小或设置内存太小,编译程序会出现virtual memory exhausted: Cannot allocate memory的问题,可以用swap扩 ...

  10. google打不开解决的方法

    14.5.27以来.谷歌又打不开了. 从网上找了些国内的googleserverIP,例如以下: const char* g_google_ips[18] = { "203.208.48.1 ...