文档章节

Spring Boot应用监控实战

CodeSheep
 CodeSheep
发布于 2018/05/02 10:05
字数 1075
阅读 5720
收藏 1

Profile



概述

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

注: 本文首发于 My Personal Blog,欢迎光临 小站


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


参考文献


后记

作者更多的原创文章:在开源中国

作者一些其他容器化应用方面的文章:



© 著作权归作者所有

共有 人打赏支持
CodeSheep

CodeSheep

粉丝 217
博文 74
码字总数 101759
作品 0
南京
程序员
私信 提问
加载中

评论(9)

beyondforever68
beyondforever68
这个东西更新有点慢,要支持springboot2.0估计还要很长时间
叫我刀刀
叫我刀刀
标题你应该写成 spring boot admin 入门
w
wj481199
好像不支持spring boot 2.0
强子1985
强子1985
写了3个月boot admin的开发工作,没觉得有啥意义,随便整合一下都比这个好吧
黑牙菜菜
黑牙菜菜
安利下 skywalking
blu10ph
blu10ph
好~
很成立
很成立
可以介绍一下boot 2.0中的变化
陈清越
可以接着介绍下这个接口的安全性的保障
新书上架:《Spring Boot 开发实战》(基于 Kotlin + Gradle + Spring Boot 2.0 的企业级服务端开发实战)

新书上架:《Spring Boot 开发实战》 — 基于 Kotlin + Gradle + Spring Boot 2.0 的企业级服务端开发实战 京东下单链接 https://item.jd.com/31178320122.html 天猫下单链接 https://detail...

程序员诗人
2018/08/05
0
0
新书上架:《Spring Boot 开发实战》基于 Kotlin + Gradle + Spring Boot 2.0 的企业级服务端开发实战

新书上架:《Spring Boot 开发实战》 — 基于 Kotlin + Gradle + Spring Boot 2.0 的企业级服务端开发实战 京东下单链接 https://item.jd.com/31178320122.html 天猫下单链接 https://detail...

程序员诗人
2018/08/22
0
0
《 Kotlin + Spring Boot : K2EE 服务端开发实战 》

《 Kotlin + Spring Boot : K2EE 服务端开发实战 》 第一篇 Spring Boot 基础 第1章 Spring Boot 与 Kotlin 的极简理念 第2章 Spring Boot + Kotlin 快速开始 Hello World 第3章 Spring Boo...

程序员诗人
2017/11/02
0
0
Spring Boot实战与原理分析

Spring Boot实战与原理分析 1:Spring Boot概述与课程概要介绍 2:Spring4 快速入门 3:Spring4 扩展分析(一) 4:Spring4 扩展分析(二) 5:Spring Boot 快速入门 6:Spring Boot 配置分析...

刘宗泽
2018/06/26
0
0
Spring Boot Admin 2.0开箱体验

概述 在我之前的 《Spring Boot应用监控实战》 一文中,讲述了如何利用 Spring Boot Admin 1.5.X 版本来可视化地监控 Spring Boot 应用。说时迟,那时快,现在 Spring Boot Admin 都更新到 ...

CodeSheep
2018/07/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql 系统设置SQL

打开、关闭日志 SET GLOBAL general_log = 'Off'; SET GLOBAL general_log = 'On'; 查看日志是否打开 show variables like '%general%';...

jingshishengxu
47分钟前
2
0
转行学大数据,如何选择如何学习大数据开发?

大数据火了几年了,但是今年好像进入了全民大数据时代,本着对科学的钻(zhun)研(bei)精(tiao)神(cao),我在17年年初开始自学大数据,后经过系统全面学习,于这个月跳槽到现任公司。 现在已经...

董黎明
48分钟前
4
0
RadosClient OSDC

RadosClient.h class librados::RadosClient : public Dispatcher//继承自Dispatcher(消息分发类){public: using Dispatcher::cct; md_config_t *conf;//配置文件private: ......

banwh
今天
2
0
如果让你写一个消息队列,该如何进行架构设计?

面试题 如果让你写一个消息队列,该如何进行架构设计?说一下你的思路。 面试官心理分析 其实聊到这个问题,一般面试官要考察两块: 你有没有对某一个消息队列做过较为深入的原理的了解,或者...

李红欧巴
今天
6
0
错题

无知的小狼
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部