Spring Boot Admin的使用
http://www.jianshu.com/p/e20a5f42a395
*******************************
上一篇文章中了解了Spring Boot提供的监控接口,例如:/health、/info等等,实际上除了之前提到的信息,还有其他信息业需要监控:当前处于活跃状态的会话数量、当前应用的并发数、延迟以及其他度量信息。这次我们了解如何利用Spring-boot-admin对应用信息进行可视化,如何添加度量信息。
准备
spring-boot-admin的Github地址在:https://github.com/codecentric/spring-boot-admin,它在Spring Boot Actuator的基础上提供简洁的可视化WEB UI。
- 首先在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
- 在Ops组选项中选择Actuator
- 选择Generate Project下载应用
- 使用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> - 在SpringBootAdminWebApplication.java文件中添加@EnableAdminServer注解
@SpringBootApplication
@EnableAdminServer
public class SpringBootAdminWebApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootAdminWebApplication.class, args);
}
} - 在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 - 启动应用程序,在后台给定如下提示:
spring-boot-admin应用启动日志 - 在浏览器中访问上图中提示的地址,可以看到下图的信息
spring-boot-admin应用
How Do
- 启动Admin Web应用后,现在可以添加针对BookPub应用的度量信息了。在文章Spring Boot应用的健康监控中,我们曾定制自己的Health Indicator,用来监控四个数据库接口的健康状态,这次我将利用spring-boot-admin对这些信息进行可视化管理。
- 在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;
}
} - 在DbCountAutoConfiguration定义对应的Bean,由Spring Boot完成自动注册
@Bean
public PublicMetrics dbCountMetrics(Collection<CrudRepository> repositories) {
return new DbCountMetrics(repositories);
} - 启动BookPub应用,访问http://localhost:8080/metrics,可以看到DbCountMetrics已经添加到metrics列表中了。
新添加的DbCountMetrics - 在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> - 在BookPub应用下的application.properties中配置下列属性值
spring.application.name=@project.description@
server.port=8080
spring.boot.admin.url=http://localhost:8090 - 启动BookPub应用,然后在浏览器中访问http://localhost:8090
监控BookPub应用 - 点击右侧的“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提供的度量工具功能强大且具备良好的扩展性,除了我们配置的DbCountMetrics,还监控BookPub应用的其他信息,例如内存消耗、线程数量、系统时间以及http会话数量。
gague和counter的定制
gague和counter度量通过GagueService和CountService实例提供,这些实例可以导入到任何Spring管理的对象中,用于度量应用信息。例如,我们可以统计某个方法的调用次数,如果要统计所有RESTful接口的调用次数,则可以通过AOP实现,在调用指定的接口之前,首先调用counterService.increment("objectName.methodName.invoked");,某个方法被调用之后,则对它的统计值+1。具体的实验步骤如下:
- 在pom文件中添加AOP依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency> - 在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() + "");
}
} - 在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)更新该接口的调用延时。
- 在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);
} - 然后在Spring Boot Admin后台可以看到对应接口的调用延迟
统计接口的调用延时
这两个service可以应付大多数应用需求,如果需要监控其他的度量信息,则可以定制我们自己的Metrics,例如在之前的例子中我们要统计四个数据库接口的调用状态,则我们定义了DbCountMetrics,该类实现了PublishMetrics,在这个类中我们统计每个数据库接口的记录数量。
PublishMetrics这个接口只有一个方法:Collection<Metric<?>> metrics();,在该方法中定义具体的监控信息;该接口的实现类需要在配置文件中通过@Bean注解,让Spring Boot在启动过程中初始化,并自动注册到MetricsEndpoint处理器中,这样每次有访问/metrics的请求到来时,就会执行对应的metrics方法。
参考资料
原文链接:http://www.jianshu.com/p/e20a5f42a395
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
Spring Boot Admin的使用的更多相关文章
- Spring Boot Admin 的使用 2
http://blog.csdn.net/kinginblue/article/details/52132113 ******************************************* ...
- Spring Boot Admin Reference Guide
1. What is Spring Boot Admin? Spring Boot Admin is a simple application to manage and monitor your S ...
- spring boot admin
这里记录一个spring cloud的模板,有的模块spring cloud eureka + spring boot admin + spring cloud zuul + 一个普通spring c ...
- spring boot admin + spring boot actuator + erueka 微服务监控
关于spring boot actuator简单使用,请看 简单的spring boot actuator 使用,点击这里 spring boot admin 最新的正式版本是1.5.3 与 spri ...
- Spring Boot admin 2.0 详解
一.什么是Spring Boot Admin ? Spring Boot Admin是一个开源社区项目,用于管理和监控SpringBoot应用程序. 应用程序作为Spring Boot Admin C ...
- Spring boot admin 节点状态一直为DOWN的排查
项目中需要监控各个微服务节点的健康状态,找到了spring boot admin这个全家桶监控工具,它其实是Vue.js美化过的Spring Boot Actuator,官方的解释是: codecen ...
- SpringCloud(8)微服务监控Spring Boot Admin
1.简介 Spring Boot Admin 是一个管理和监控Spring Boot 应用程序的开源软件.Spring Boot Admin 分为 Server 端和 Client 端,Spring ...
- Spring Boot Admin 的使用
Spring Boot 版本: 1.5.20 一.Spring Boot Admin Server 1.在pom.xml中增加 <dependency> <groupId>or ...
- 物联网架构成长之路(30)-Spring Boot Admin微服务WebUI监控
0. 前言 一个完整的微服务解决方案包含了许多微服务,基于我们需要观察各个微服务的运行状态,因此Spring Boot 生态提供了Spring Boot Admin 这个组件来实现微服务管理WEB U ...
随机推荐
- MySql注入科普
默认存在的数据库: mysql 需要root权限读取 information_schema 在5以上的版本中存在 测试是否存在注入方法 假:表示查询是错误的 (MySQL 报错/返回页面与原来不同) ...
- h5的radio和check选中和不选中返回的checkd值
h5的radio和check选中和不选中返回的checkd值 alert($('input[type=checkbox]').attr('checked')); //存在返回checked,不存在返回 ...
- 大商创 sql追踪 用户注册
用户注册sql追踪 用户注册数据表 sql语句分析 ', 'wzd222@qq.com', 'addf92072794a4b668f70815672ba5c8') 主要成分: user_name,mo ...
- Hadoop学习笔记: MapReduce Java编程简介
概述 本文主要基于Hadoop 1.0.0后推出的新Java API为例介绍MapReduce的Java编程模型.新旧API主要区别在于新API(org.apache.hadoop.mapreduce ...
- Leetcode: Split Array Largest Sum
Given an array which consists of non-negative integers and an integer m, you can split the array int ...
- IUS
后端提取的sdf中可能是有negative timing 在interconnect上的,可能的原因是crosstalk之类的问题导致. negative timing在FF,clock的delay超 ...
- sklearn Model-selection + Pipeline
1 GridSearch import numpy as np from sklearn.datasets import load_digits from sklearn.ensemble impor ...
- 自定义AlertView实现模态对话框
在Windows应用程序中,经常使用模态(Model)对话框来和用户进行简单的交互,比如登录框.在IOS应用程序中,有时我们也希望做同样的事情.但IOS的UI库中,没有模态对话框,最接近那个样子的应该 ...
- php用mysql函数出错
很可能只是因为你忘了装mysql扩展 apt-get install php5-mysql
- js日期选择控件
// 日期选择 // By Ziyue(http://www.web-v.com/) // 使用方法: // <script type="text/javascript" s ...