springbootadmin

     2022-03-18     512

关键词:

Spring Boot Admin的使用 

作者 杜琪
2015.12.25 17:30* 字数 1803 阅读 16569评论 21

上一篇文章中了解了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[email protected]@
    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监控-springbootadmin(代码片段)

01:SpringBoot高级–SpringBoot监控02:SpringBoot监控-SpringBootAdmin1.SpringBootAdmin使用游览器地址栏访问SpringBoot的监控信息太繁琐了,所以SpringBootAdmin就诞生了,以UI界面的方式来显示监控信息。SpringBootAdmin说明:SpringBootAdmi... 查看详情

springcloud微服务监控springbootadmin

1.简介SpringBootAdmin是一个管理和监控SpringBoot应用程序的开源软件。SpringBootAdmin分为Server端和Client端,SpringBootAdminUI部分使用AngularJs将数据展示在前端。2.工程架构EurekaServer:服务注册中心,端口为8761。AdminServer:用于对微服务系... 查看详情

springbootadmin参考指南(代码片段)

...44f;阿提说说👏博客该篇文章,由浅入深的介绍了SpringBootAdmin的特性以及自定义二次开发,想要快速使用,请点击【快速开始】,想要深入了解的继续往下阅读。SpringBootAdmin参考指南1.什么是SpringBootAdmin2.快速... 查看详情

springbootadmin横空出世!

大家好,我是栈长。前言哈哈,略标题党,其实SpringBootAdmin这个项目已经开源好些年了,栈长看了下:有记录的最早版本是在2014年,和SpringBoot在同一年相继开源:https://github.com/codecentric/spring-boot-adm 查看详情

springbootadmin

转SpringBootAdmin的使用 作者杜琪关注2015.12.2517:30*字数1803阅读16569评论21喜欢55上一篇文章中了解了SpringBoot提供的监控接口,例如:/health、/info等等,实际上除了之前提到的信息,还有其他信息业需要监控:当前处于活跃状态的... 查看详情

skywalking与springbootadmin区别

参考技术A作用不一样。根据查询相关公开信息,skywalking是一个apm系统,包含监控、追踪、并拥有故障诊断能力的分布式系统。springbootadmin是一个开源的社区项目,用于管理和监控应用程序的软件。 查看详情

实战:使用springbootadmin实现运维监控平台

...性能数据呢?在这样的背景下,就诞生了另一个开源软件SpringBootAdmin。下面就来介绍什么是SpringBootAdmin以及如何使用SpringBootAdmin搭建完整的运维监控平台。一、什么 查看详情

指标监控神器springbootadmin保姆级教程

SpringBootAdmin基于SpringBootAdmin的开源产品很多,我们选择这个:https://github.com/codecentric/spring-boot-admin1.搭建Admin服务器创建建对应的SpringBoot项目,添加相关依赖<dependency><groupId>de.codecentric</gr 查看详情

微服务架构之springbootadmin

Springbootadmin是可视化的监控组件,依赖springbootactuator收集各个服务的运行信息,通过springbootactuator可以非常方便的查看每个微服务的Health信息、内存信息、JVM信息、配置信息、垃圾回收信息等等。(一)版本说明a)Springboot2.0.6.RELEASE... 查看详情

springcloud学习springbootadmin(代码片段)

SpringBootAdmin用于管理和监控一个或者多个SpringBoot程序新建spring-boot-admin-serverpom<parent><artifactId>spring-cloud-parent</artifactId><groupId>com.karonda</groupId><version>1.0. 查看详情

十springbootadmin

1、创建server端spring-boot-admin2、添加依赖<parent>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-parent</artifactId>  <version>2.0.5.RELEASE 查看详情

springboot学习----springbootadmin(代码片段)

什么是SpringBootAdminSpringBootAdmin是一个管理和监控SpringBoot应用程序的开源软件,SpringBootAdmin的GitHub地址https://github.com/codecentric/spring-boot-admin他是一个基于C/S架构的实现。它可以通过HTTP或者Eureka注册到adminserver中进行展示,通过它... 查看详情

springbootadmin2实例状态监控详解(代码片段)

其他相关文章:SpringBootAdmin参考指南SpringBootAdmin服务离线、不显示健康信息的问题SpringBootAdmin2@EnableAdminServer的加载SpringBootAdmin2AdminServerAutoConfiguration详解在微服务中集成SpringBootAdmin的主要作用之一就是用来监控服务的实例... 查看详情

springbootadmin节点状态一直为down的排查

项目中需要监控各个微服务节点的健康状态,找到了springbootadmin这个全家桶监控工具,它其实是Vue.js美化过的SpringBootActuator,官方的解释是:codecentric’sSpringBootAdminisacommunityprojecttomanageandmonitoryourSpringBoot?applications.Theapplicationsregi 查看详情

springcloud-springbootadmin服务监控(十三)

springcloud笔记推荐文章前言SpringBootAdmin是一个管理和监控你的SpringBoot应用程序的应用程序。这些应用程序通过SpringBootAdminClient(通过HTTP)注册或者使用SpringCloud(例如Eureka)发现。UI只是SpringBootActuator端点上的一个AngularJs应用程... 查看详情

springbootadmin微服务监控管理

...项目:https://github.com/codecentric/spring-boot-admin功能特性SpringBootAdmin为注册的应用程序提供以下功能:显示健康状况显示详细信息,例如JVM和内存指标mi 查看详情

springbootadmin横空出世。。。

...家好,我是栈长。前言哈哈,略标题党,其实SpringBootAdmin这个项目已经开源好些年了,栈长看了下:有记录的最早版本是在2014年,和SpringBoot在同一年相继开源:https://github.com/codecentric/spring-boot-adminGithu... 查看详情

springboot2.x搭建springbootadmin2.x

1说明全部配置基于1.8.0_111当前SpringBoot使用2.0.5SpringBootAdmin基于Eureka进行Client发现,Eureka搭建参见SpringBoot2.x搭建EurekaSpringBootAdmin项目文档参见SpringBootAdmin参考文档2创建项目在SpringBoot项目生成器中,输入Group和Artifact,如下配置:3... 查看详情