Spring Boot应用监控的实战教程

 更新时间:2018年05月03日 10:49:40   作者:hansonwang99  
Spring Boot 提供运行时的应用监控和管理功能,下面这篇文章主要给大家介绍了关于Spring Boot应用监控的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧

概述

Spring Boot 监控核心是 spring-boot-starter-actuator 依赖,增加依赖后, Spring Boot 会默认配置一些通用的监控,比如 jvm 监控、类加载、健康监控等。

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

入门使用: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中全部尝试了一遍。

参考文献

http://codecentric.github.io/spring-boot-admin/1.5.7/

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • java如何读取某个文件夹中的全部文件(包括子文件夹)

    java如何读取某个文件夹中的全部文件(包括子文件夹)

    这篇文章主要介绍了java如何读取某个文件夹中的全部文件(包括子文件夹),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • 排序算法图解之Java快速排序的分步刨析

    排序算法图解之Java快速排序的分步刨析

    快速排序是通过一趟排序将要排序的数据分割为独立的两个部分,一部分的所有数据比另外一部分的所有数据要小,然后按照此方法对这两部分分别进行快速排序,整个过程可以递归进行,以此达到整个数据变成有序序列。本文通过示例讲解了快速排序的实现,需要的可以参考一下
    2022-11-11
  • Spring注解之@Conditional使用解析

    Spring注解之@Conditional使用解析

    这篇文章主要介绍了Spring注解之@Conditional使用解析,@Conditional注解可以说是SpringBoot的条件注解,表示组件只有在所有指定条件都匹配时才有资格注册,条件是可以在 bean 定义注册之前​​以编程方式确定的任何状态,需要的朋友可以参考下
    2024-01-01
  • Spark学习笔记(一)Spark初识【特性、组成、应用】

    Spark学习笔记(一)Spark初识【特性、组成、应用】

    这篇文章主要介绍了Spark学习笔记之Spark初识,简单分析了spark四大特性、基本组成、应用场景,需要的朋友可以参考下
    2020-02-02
  • mybatis中方法返回泛型与resultType不一致的解决

    mybatis中方法返回泛型与resultType不一致的解决

    这篇文章主要介绍了mybatis中方法返回泛型与resultType不一致的解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Spring Boot Admin实践详解

    Spring Boot Admin实践详解

    在本篇文章里小编给大家整理了关于Spring Boot Admin实践的相关知识点,有需要的朋友们可以学习下。
    2019-12-12
  • Java对Map进行按value排序的几种常见方法

    Java对Map进行按value排序的几种常见方法

    在日常开发中,Map 是我们经常使用的数据结构之一,尽管 Map 是按键 (key) 存储和检索数据的,但有时我们需要根据 value 进行排序,这篇博客将详细探讨如何在 Java 中对 Map 进行按 value 排序的几种常见方法,并分析它们的优缺点,需要的朋友可以参考下
    2025-03-03
  • springboot项目编写发送异常日志到企微工具包的操作方法

    springboot项目编写发送异常日志到企微工具包的操作方法

    本文介绍了Springboot项目如何编写发送异常日志到企业微信的工具包,内容包括创建基础Bean、配置类、pom依赖等步骤,并展示了如何通过nacos进行配置,这为开发者提供了一种有效的日志管理方案,方便快速定位和处理项目中的异常问题,感兴趣的朋友跟随小编一起看看吧
    2024-09-09
  • Java之Mybatis的二级缓存

    Java之Mybatis的二级缓存

    本文主要介绍Java中Mybatis的二级缓存,缓存就是一块内存空间,保存临时数据,它是SqlSessionFactory的缓存,对Mybaits感兴趣的小伙伴可以参考阅读
    2023-03-03
  • Java实现监听文件变化的三种方案详解

    Java实现监听文件变化的三种方案详解

    这篇文章主要介绍了Java实现监听文件变化的三种方法,每种方案给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05

最新评论