Spring Boot应用监控的实战教程

作者:hansonwang99 时间:2022-03-02 18:17:09 

概述

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应用监控的实战教程

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上线了:

Spring Boot应用监控的实战教程

应用上线推送消息

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

Spring Boot应用监控的实战教程

Client应用已注册上来

查看Detail

Spring Boot应用监控的实战教程

Detail信息

查看 Metrics

Spring Boot应用监控的实战教程

Metrics信息

查看 Enviroment

Spring Boot应用监控的实战教程

Enviroment信息

查看JMX

Spring Boot应用监控的实战教程

JMX信息

查看Threads

Spring Boot应用监控的实战教程

Threads信息

查看Trace与详情

Spring Boot应用监控的实战教程

Trace信息

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

Spring Boot应用监控的实战教程

应用程序的事件变化信息

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

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

参考文献

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

来源:https://www.jianshu.com/p/e9ce05b44150

标签:springboot,应用,监控
0
投稿

猜你喜欢

  • 解决spring boot启动扫描不到自定义注解的问题

    2023-10-29 14:31:48
  • jenkins安装及其配置笔记

    2022-10-03 11:01:19
  • Java经典面试题最全汇总208道(三)

    2023-11-15 23:30:42
  • Java提取2个集合中的相同和不同元素代码示例

    2023-11-28 05:48:41
  • 解析Java的设计模式编程之解释器模式的运用

    2022-01-04 04:02:18
  • 解决SpringCloud下spring-boot-maven-plugin插件的打包问题

    2022-03-10 14:35:59
  • SpringBoot整合第三方技术的详细步骤

    2023-11-29 08:22:48
  • java读取xml配置参数代码实例

    2023-11-25 03:03:17
  • Java由浅入深刨析继承

    2023-11-23 08:04:24
  • 关于Java中的IO流总结(推荐)

    2023-08-23 18:13:56
  • 如何实现java Iterator迭代器功能

    2023-10-14 14:30:49
  • springboot拦截器Interceptor的使用,你都了解吗

    2023-01-01 21:53:40
  • SpringMVC解析JSON请求数据问题解析

    2023-06-02 21:41:32
  • SpringBoot集成vue的开发解决方案

    2023-11-24 20:58:10
  • C# 添加对System.Configuration.dll文件的引用操作

    2022-03-05 22:20:31
  • Android实现带动画效果的可点击展开TextView

    2023-08-06 05:42:08
  • Java实现抠图片文字或签名的完整代码

    2023-04-18 00:04:44
  • Protostuff序列化和反序列化的使用说明

    2022-08-29 07:28:08
  • Java泛型T,E,K,V,N,?与Object区别和含义

    2022-02-23 07:25:30
  • Java synchronized重量级锁实现过程浅析

    2023-10-25 14:10:17
  • asp之家 软件编程 m.aspxhome.com