V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hansonwang99
V2EX  ›  程序员

Spring Boot 应用监控实战

  •  
  •   hansonwang99 ·
    hansonwang99 · 2018-05-02 09:52:56 +08:00 · 3545 次点击
    这是一个创建于 2179 天前的主题,其中的信息可能已经有所发展或是发生改变。

    概述

    利用 SpringBoot 作为微服务单元的实例化技术选型时,我们不可避免的要面对的一个问题就是如何实时监控应用的运行状况数据,比如:健康度、运行指标、日志信息、线程状况等等。本文就该问题做一点探索并记录试验过程。 之前讲过Docker 容器的可视化监控,即监控容器的运行情况,包括 CPU 使用率、内存占用、网络状况以及磁盘空间等等一系列信息,有点类似。


    入门使用:Actuator 插件

    Actuator 插件是 SpringBoot 原生提供的一个服务,可以通过暴露端点路由,用来输出应用中的诸多 端点信息。实战一下!

    • pom.xml 中添加依赖:
    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    

    启动 Spring Boot 应用程序之后,只要在浏览器中输入端点信息就能获得应用的一些状态信息。

    常用端点列举如下,可以一个个详细试一下:

    • /info        应用基本信息
    • /health       健康度信息
    • /metrics      运行指标
    • /env        环境变量信息
    • /loggers      日志相关
    • /dump       线程相关信息
    • /trace       请求调用轨迹

    当然此时只能使用/health/info端点,其他因为权限问题无法访问。想访问指定端点的话可以在 yml 配置中添加相关的配置项,比如/metrics端点则需要配置:

    endpoints:
      metrics:
        sensitive: false
    

    此时浏览器访问 /metrics 端点就能得到诸如下面所示的信息:

    {
    	"mem": 71529,
    	"mem.free": 15073,
    	"processors": 4,
    	"instance.uptime": 6376,
    	"uptime": 9447,
    	"systemload.average": -1.0,
    	"heap.committed": 48024,
    	"heap.init": 16384,
    	"heap.used": 32950,
    	"heap": 506816,
    	"nonheap.committed": 23840,
    	"nonheap.init": 160,
    	"nonheap.used": 23506,
    	"nonheap": 0,
    	"threads.peak": 25,
    	"threads.daemon": 23,
    	"threads.totalStarted": 28,
    	"threads": 25,
    	"classes": 6129,
    	"classes.loaded": 6129,
    	"classes.unloaded": 0,
    	"gc.copy.count": 74,
    	"gc.copy.time": 173,
    	"gc.marksweepcompact.count": 3,
    	"gc.marksweepcompact.time": 88,
    	"httpsessions.max": -1,
    	"httpsessions.active": 0
    }
    

    当然也可以开启全部端点权限,只需如下配置即可:

    endpoints:
      sensitive: false
    

    由于 Actuator 插件提供的监控能力毕竟有限,而且 UI 比较简陋,因此需要一个更加成熟一点的工具


    Spring Boot Admin 监控系统

    SBA 则是基于 Actuator 更加进化了一步,其是一个针对 Actuator 接口进行 UI 美化封装的监控工具。我们来实验一下。

    • 首先来创建一个 Spring Boot Admin Server 工程作为服务端

    pom.xml 中加入如下依赖:

    <dependency>
    	<groupId>de.codecentric</groupId>
    	<artifactId>spring-boot-admin-server</artifactId>
    	<version>1.5.7</version>
    </dependency>
    
    <dependency>
    	<groupId>de.codecentric</groupId>
    	<artifactId>spring-boot-admin-server-ui</artifactId>
    	<version>1.5.7</version>
    </dependency>
    

    然后在应用主类上通过加注解来启用 Spring Boot Admin

    @EnableAdminServer
    @SpringBootApplication
    public class SpringbtAdminServerApplication {
    
    	public static void main(String[] args) {
    		SpringApplication.run(SpringbtAdminServerApplication.class, args);
    	}
    }
    

    启动程序,浏览器打开 localhost:8081 查看 Spring Boot Admin 主页面:

    Spring Boot Admin 主页面

    此时 Application 一栏空空如也,等待待监控的应用加入

    • 创建要监控的 Spring Boot 应用

    pom.xml 中加入以下依赖

    <dependency>
    	<groupId>de.codecentric</groupId>
    	<artifactId>spring-boot-admin-starter-client</artifactId>
    	<version>1.5.7</version>
    </dependency>
    

    然后在 yml 配置中添加如下配置,将应用注册到 Admin 服务端去:

    spring:
      boot:
        admin:
          url: http://localhost:8081
          client:
            name: AdminTest
    

    Client 应用一启动,Admin 服务立马推送来了消息,告诉你 AdminTest 上线了:

    应用上线推送消息

    此时去 Admin 主界面上查看,发现 Client 应用确实已经注册上来了:

    Client 应用已注册上来

    • 查看 Detail

    Detail 信息

    • 查看 Metrics

    Metrics 信息

    • 查看 Enviroment

    Enviroment 信息

    • 查看 JMX

    JMX 信息

    • 查看 Threads

    Threads 信息

    • 查看 Trace 与详情

    Trace 信息

    点击最上方 JOURNAL,会看到被监控应用程序的事件变化:

    应用程序的事件变化信息

    图中可以清晰地看到,应用从 REGISTRATION → UNKNOWN → UP 的状态跳转。

    这样就将 Actuator 插件提供的所有端点信息在 SBA 中全部尝试了一遍。


    作者更多的原创文章:在 V2EX

    参考文献


    1 条回复    2018-05-02 17:29:46 +08:00
    gmywq0392
        1
    gmywq0392  
       2018-05-02 17:29:46 +08:00
    你 admin 能监控 springboot 2.0 的嘛?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2547 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 01:17 · PVG 09:17 · LAX 18:17 · JFK 21:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.