优质高效!基于Spring-boot-admin的微服务监控系统实现

什么是spring boot admin

spring boot actuator 可以监控应用的各种信息, 唯一的缺点就是返回的监控信息是JSON格式的数据,还有一点就是在微服务架构下,服务的实例会很多,一个个去看监控信息这似乎有点不太可能,而且这么多地址信息也只能去Eureka中去找,有没有一个功能能够集中的管理Eureka中的服务信息,并且可以通过界面的方式查看actuator 提供的监控信息,它就是Spring Boot Admin。

Spring Boot admin是一个用于管理和监视 Spring Boot应用程序的社区项目。客户端应用程序通过管理服务器(通过Http)进行注册,使用方式就像Eureka,Consul这样的Spring Cloud发现服务器进行发现.

每个客户端应用程序都需要有Spring Actuator jar。spring cloud admin服务器轮询Actuator jar提供的端点,以获取该特定应用程序的指标。

SBA(spring boot admin)是一个用于管理和监控Spring Boot项目的工具,包括线程,内存,Spring bean加载情况,日志等一系列可视化界面.

使用spring boot admin的意义

随着项目业务场景的需要,我们目前boot服务越来越多,趋于横向扩展的模式,尤其是未来项目,安全稳固的运行是我们目前的核心重点首要任务,但我们如何能够做到快速便捷的知道目前我们微服务项目的健康状况呢?其实熟悉Spring Boot的小伙伴都知道Spring Boot actuator这款组件,它使用HTTP端点或JMX来管理和监控应用程序,但是没有提供图形化界面,仅仅提供了JSON格式的数据,同时无法做到集中管理应用,对运维十分不友好,SBA(spring boot admin)基于actuator不但解决了这些痛点,并且通过扩展实现了很多强大的功能,如日志级别动态更改,查看实时日志,查看URL映射等等,对管理微服务十分有意义.

如何与微服务整合

以下示例为:boot版本为1.x,如果使用的boot版本为2.x,那么admin server以及client需要找对应2.x版本。

  • Server端

boot-admin-server pom文件需要增加以下几项依赖:

<dependencies>   
      <dependency>     
        <groupId>org.springframework.cloud</groupId>     
        <artifactId>spring-cloud-starter-eureka</artifactId>   
      </dependency>   
      <dependency>     
         <groupId>de.codecentric</groupId>     
         <artifactId>spring-boot-admin-server</artifactId>     
         <version>1.5.6</version>   
      </dependency>  
      <dependency>     
          <groupId>de.codecentric</groupId>     
          <artifactId>spring-boot-admin-server-ui</artifactId>     
          <version>1.5.6</version>   
      </dependency> 
</dependencies>
复制代码

增加了对eureka的支持

server:   
    port: 8000 
spring:   
    application:     
      name: admin-server   
    boot:     
      admin:       
        username: amdin      ----> admin server的用户名       
        password: amdin   ----> admin server 密码 
eureka:   
  instance:     
    leaseRenewalIntervalInSeconds: 10   
  client:     
    registryFetchIntervalSeconds: 5     
    serviceUrl:       
      defaultZone: ${EUREKA_SERVICE_URL:http://localhost:8761}/eureka/ 
management.security.enabled: false

复制代码

启动类

@Configuration 
@EnableAutoConfiguration 
@EnableDiscoveryClient 
@EnableAdminServer 
public class ServerApplication {   
    public static void main(String[] args) {     
        SpringApplication.run(AdminServerApplication.class, args);   
      } 
  }
复制代码

上述步骤完成之后,启动Server端。

  • Client端

项目依赖

<dependencies>   
       <dependency>     
          <groupId>org.springframework.cloud</groupId>     
          <artifactId>spring-cloud-starter-eureka</artifactId>   
       </dependency>   
       <dependency>     
            <groupId>de.codecentric</groupId>     
            <artifactId>spring-boot-admin-starter-client</artifactId>     
            <version>1.5.6</version>  
       </dependency> 
</dependencies>
复制代码

配置文件

server:   
   port: 9000 
spring:   
   application:     
      name: project_name   
   boot:     
     admin:       
        url: http://127.0.0.1:8000  ---->http server注册服务地址       
        username: admin       
        password: admin 
logging:   file: /xxx.log  ---->必须配置,否则无法在admin server中进行查看实时log日志状况 
eureka:             
   client:     
     serviceUrl:       
        defaultZone: http://localhost:8761/eureka/ 
management:   
    security:     
    enabled: false    ---->必须设置,否则查看健康detail详情会弹出认证提示框,导致查看失败
复制代码

admin client 启动类

@SpringBootApplication 
@EnableDiscoveryClient 
public class ProducerApplication {   
    public static void main(String[] args) {     
       SpringApplication.run(ProducerApplication.class, args);   
       } 
}
复制代码

完成上面配置之后,分别启动项目:server和client,浏览器访问 http://localhost:8000 可以看到以下界面:

点击Detail详情,我们能够看到当前微服务的内存、堆栈、接口访问量、线程、环境配置、接口访问状况等信息。

至此,我们搭建的过程就已经结束了,那么后期我们应该学习如何从控制台中学习并查看适合我们自己的监控服务的价值信息。

常见问题

  1. Detail中的Memory信息如何进行调整?如何进行扩大?

答:可以在启动spring boot中增加jvm堆内存和非堆内存参数,如: java -Xms2048m -Xmx2048m -XX:PermSize2048 -jar xxx.jar --server.port =8088 其中:-Xms2048m 堆的最大限 -Xmx 堆的最大限制 -Xms 初始化堆大小 -XX:PermSize: 设置持久带(perm gen)初始值。

  1. admin server中我的日志是存储在什么地方

答:在admin server中进行查看点击log tab页面进行查看日志的时候,admin server会进行启动轮询机制,调用http://{admin-server-host}/api/applications/ca72fbcf/logfile(ps:其中path中的ca72fbcf为具体的admin server client注册到server中分配的随机实例id)进行实时查看log日志,而admin server中正是使用的我们具体的client端集成的actuator提供的监控接口

  1. admin server 中的metrics接口统计信息来源于哪里?重启会不会消失掉?

答:admin server中metrics的统计信息来源于 http://{admin-server-host}/api/applications/ca72fbcf/metrics 接口,而此接口会调用我们具体admin client端提供的actuator 监控接口 http://{admin-client-host}/actuator/metrics 指标信息,此指标信息会在admin client 重启服务后会重新进行计算并统计。

遇到过的问题

  1. 点击detail详情,进行查看微服务的实时log日志状况信息,前提是client端必须配置logging.file属性,否则监控信息中不会出现实时log信息。官网给出的解释是:默认情况下,日志文件无法通过执行器端点访问,因此在Spring Boot Admin中不可见。为了启用日志文件执行器端点,您需要配置Spring Boot已写入日志文件,方法是设置 logging.path或logging.file配置属性。
  2. 高版本的admin无法注册到低版本的server中去,兼容性问题,但官网给出的提示是,可以使用低版本的client注册到高版本的admin server中去,可以参见: Monitoring Spring Boot 1.5.x 但实际操作过程中,得出的结论是:低版本的client注册到高版本的admin server中去,未必会完全兼容,有些指标信息会展示不出来,会出现以下信息提示:

原文链接:https://juejin.cn/post/6973097235877740575

如果觉得本文对你有帮助,可以关注一下我公众号,回复关键字【面试】即可得到一份Java核心知识点整理与一份面试大礼包!另有更多技术干货文章以及相关资料共享,大家一起学习进步!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值