Spring Boot应用监控实战

Spring Boot应用监控实战

概述

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

入门使用:Actuator插件

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

  • pom.xml中添加依赖:
<dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-actuator</artifactId>

    </dependency>

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

经常使用端点列举以下,能够一个个详细试一下:浏览器

  • /info        应用基本信息网络

  • /health       健康度信息session

  • /metrics      运行指标ide

  • /env        环境变量信息spring-boot

  • /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应用监控实战

此时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上线了:
Spring Boot应用监控实战
此时去Admin主界面上查看,发现Client应用确实已经注册上来了:

Spring Boot应用监控实战

  • 查看Detail

Spring Boot应用监控实战

  • 查看 Metrics

Spring Boot应用监控实战

  • 查看 Enviroment
    Spring Boot应用监控实战
  • 查看JMX

Spring Boot应用监控实战

  • 查看Threads

Spring Boot应用监控实战

  • 查看Trace与详情

Spring Boot应用监控实战

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

Spring Boot应用监控实战

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

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

参考文献

后记

做者一些其余容器化应用方面的文章:

  • Docker容器可视化监控中心搭建

  • 利用K8S技术栈打造我的私有云连载文章

  • 微服务调用链追踪中心搭建

  • 利用ELK搭建Docker容器化应用日志中心

更多务实、能看懂、可复现的 原创文章在公众号CodeSheep

Spring Boot应用监控实战

相关文章
相关标签/搜索