springboot admin
转 Spring Boot Admin的使用
上一篇文章中了解了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方法。
参考资料
springboot admin的更多相关文章
- 使用SpringBoot Admin监控SpringCloud微服务
spring-boot admin的github地址:https://github.com/codecentric/spring-boot-admin 本文基于SpringCloud的环境和配置上增加 ...
- SpringBoot Actuator & SpringBoot Admin
SpringBoot Actuator提供了很多监控和管理你的spring boot应用的HTTP或者JMX端点,并且你可以有选择地开启和关闭部分功能. 当你的spring boot应用中引入依赖之后 ...
- SpringBoot Admin 使用指南
什么是 SpringBoot Admin? Spring Boot Admin 是一个管理和监控你的 Spring Boot 应用程序的应用程序.这些应用程序通过 Spring Boot Admin ...
- 【Springboot】用Springboot Admin监控你的微服务应用
1 简介 目前,微服务大行其道,各大小公司争相学习模仿,把单体应用拆得七零八落.服务多了,运行的实例多了,给运维人员的压力就更大了.如果有十几个应用,单单做Health Check就已经够费时间的了. ...
- 实战SpringBoot Admin
长话短说哦,直接查看下文吧 目录 声明 先锋 前提 SpringBoot Admin 介绍 服务端的搭建 客户端的搭建 参数的指南 尾声 声明 见名知意,实战SpringBoot Admin,实战!实 ...
- SpringBoot Admin应用监控搭建
简介 Spring Boot Admin 用于监控基于 Spring Boot 的应用,它是在 Spring Boot Actuator 的基础上提供简洁的可视化 WEB UI. 参考手册地址:htt ...
- Springboot admin 发送邮件失败:com.sun.mail.smtp.SMTPSenderFailedException: 553 Mail from must equal authorized user
发邮件已经是老生常谈了,今天又遇到了,而且又出了各种问题.我晕哦. 我的配置是: spring.mail.host=smtp..com spring.mail.username=klxxxx spri ...
- springboot admin server常用配置
Property name Description Default value spring.boot.admin.context-path The context-path prefixes the ...
- 使用springboot Admin 2.0.6版本 集成监控springcloud微服务应用
一 新建 添加依赖 <dependencies> <dependency> <groupId>de.codecentric</groupId> < ...
随机推荐
- MongoDB学习笔记(三)--权限 && 导出导入备份恢复 && fsync和锁
权限 绑定内网I ...
- CentOS 服务器安全设置
我们必须明白:最小的权限+最少的服务=最大的安全.所以无论是配置任何服务器,我们都必须把不用的服务关闭.把系统权限设置到最小化,这样才能保证服务器最大的安全. 一.注释掉系统不需要的用户和用户组 ...
- Windows下创建文件的权限问题
在Windows下如果在某个目录下建立一个文件,那么新建立的文件会默认继承该目录的所有权限(父子关系) 如果将一个文件从一个目录移动到到另一个目录下,那么该文件的权限并不会继承自新目录的权限而是还保留 ...
- Discuz 学习笔记一 :getgdc 和get_client_ip
Getgdc函数 discuz有一个超级变量的自定义函数: function getgpc($k, $type='GP') { $type = strtoupper($type); ...
- 【canvas】N角光阑
这回把光阑代码统一了,修改angleCount的数目为3就是三角光阑,angleCount的数目为4就是四角光阑,angleCount的数目为6就是六角光阑,目前代码中是12角光阑. 图示: 代码: ...
- maven 下载源码
mvn eclipse:eclipse -DdownloadSource=true
- MVC应用积累
1.Controller中的跳转 (1)直接Redirect后加(Controller/Action):Response.Redirect("/Home/Index"); (2)直 ...
- data directory "/var/lib/postgres/data" has group or world access
直接拷贝完好的data至pg目录底下,可能引起下面的错误:说data目录权限不是700.FATAL: data directory "/var/lib/postgres/data" ...
- 【树莓派】制作树莓派所使用的img镜像(一)
最近一直在折腾树莓派,前几天装了10台设备,最近又来了15台开发板子.基本每台设备都需要进行如下操作: 1.安装树莓派OS,并配置键盘.时区.语言编码格式等: 2.新增组.用户.配置静态IP地址: 3 ...
- HTTP和Socket的区别
1: HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用. HTTP ...