天天看点

Spring Boot Admin的使用

上一篇文章中了解了spring boot提供的监控接口,例如:/health、/info等等,实际上除了之前提到的信息,还有其他信息业需要监控:当前处于活跃状态的会话数量、当前应用的并发数、延迟以及其他度量信息。这次我们了解如何利用spring-boot-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

在ops组选项中选择actuator

选择generate project下载应用

使用idea打开工程,在pom.xml文件中添加下列依赖

在springbootadminwebapplication.java文件中添加@enableadminserver注解

在application.properties文件中添加如下配置

启动应用程序,在后台给定如下提示:

Spring Boot Admin的使用

spring-boot-admin应用启动日志

在浏览器中访问上图中提示的地址,可以看到下图的信息

Spring Boot Admin的使用

spring-boot-admin应用

在db-count-starter模块下添加代码,首先在db-count-starter/src/main/java/com/test/bookpubstarter/dbcount目录下添加dbcountmetrics类:

在dbcountautoconfiguration定义对应的bean,由spring boot完成自动注册

Spring Boot Admin的使用

新添加的dbcountmetrics

在db-count-starter模块下的pom文件中添加spring-boot-admin-starter-client依赖,

在bookpub应用下的application.properties中配置下列属性值

Spring Boot Admin的使用

监控bookpub应用

点击右侧的“details”,可以看到该应用的详细信息

Spring Boot Admin的使用

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文件,内容如下:

然后再次启动bookpub应用,然后在spring boot admin的页面中查看logging,则可以看到如下页面:

Spring Boot Admin的使用

通过spring boot admin修改日志级别

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

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

在pom文件中添加aop依赖

在bookpub应用中添加aspect组件,表示在每个controller的方法调用之前,首先增加调用次数。

在application.properties中设置打开aop功能:<code>spring.aop.auto=true</code>

然后启动bookpub应用,通过浏览器访问<code>http://localhost:8080/books/9876-5432-1111</code>,然后再去spring boot admin后台查看对应信息,发现该方法的调用次数已经被统计好了

Spring Boot Admin的使用

统计接口的调用次数

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

在servicemonitor类中添加对应的监控代码

然后在spring boot admin后台可以看到对应接口的调用延迟

Spring Boot Admin的使用

统计接口的调用延时

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

publishmetrics这个接口只有一个方法:collection&lt;metric&lt;?&gt;&gt; metrics();,在该方法中定义具体的监控信息;该接口的实现类需要在配置文件中通过@bean注解,让spring boot在启动过程中初始化,并自动注册到metricsendpoint处理器中,这样每次有访问/metrics的请求到来时,就会执行对应的metrics方法。

<a href="http://shouce.jb51.net/spring/aop.html" target="_blank">chapter 6. 使用spring进行面向切面编程(aop)</a>

<a href="http://www.jianshu.com/p/734519d3c383">— 在之前的系列文章中我们学习了如何进行springboot应用的功能开发,以及如何写单元测试、集成测试等,然而,在实际的软件开发中需要做的不仅如此:还包括对应用程序的监控和管理。正如飞行员不喜欢盲目飞行,程序员也需要实时看到自己的应用目前的运行情况。如果给定一个具体的时间,我们希望知道此时cpu的利用率、内存的利用率、数据库连接是否正常以及在给定时间段内有多少客户请求等指标;不仅如此,我们希望通过图表、控制面板来展示上述信息。最重要的是:老板和业务人员希望看到的是图表,这些比较直观易懂。首先,这篇文章讲介绍</a>