概述

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 Actuator提供了对单个Spring Boot的监控,信息包含:应用状态、内存、线程、堆栈等等,比较全面的监控了Spring Boot应用的整个生命周期。

但是这样监控也有一些问题:第一,所有的监控都需要调用固定的接口来查看,如果全面查看应用状态需要调用很多接口,并且接口返回的Json信息不方便运营人员理解;第二,如果Spring Boot应用集群非常大,每个应用都需要调用不同的接口来查看监控信息,操作非常繁琐低效。在这样的背景下,就诞生了另外一个开源软件:Spring Boot Admin

什么是Spring Boot Admin?

Spring Boot Admin 是一个管理和监控Spring Boot 应用程序的开源软件。每个应用都认为是一个客户端,通过HTTP或者使用 Eureka注册到admin server中进行展示,Spring Boot Admin UI部分使用AngularJs将数据展示在前端。

Spring Boot Admin 是一个针对spring-boot的actuator接口进行UI美化封装的监控工具。他可以:在列表中浏览所有被监控spring-boot项目的基本信息,详细的Health信息、内存信息、JVM信息、垃圾回收信息、各种配置信息(比如数据源、缓存列表和命中率)等,还可以直接修改logger的level。

这篇文章给大家介绍如何使用Spring Boot Admin对Spring Boot应用进行监控。

监控单体应用

这节给大家展示如何使用Spring Boot Admin监控单个Spring Boot应用。

Admin Server端

项目依赖

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

配置文件

server.port=8000

服务端设置端口为:8000。

启动类

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

完成上面三步之后,启动服务端,浏览器访问http://localhost:8000可以看到以下界面:

示例代码

Admin Client端

项目依赖

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

配置文件

server.port=8001spring.boot.admin.url=http://localhost:8000
management.security.enabled=false 

-spring.boot.admin.url 配置Admin Server的地址
-management.security.enabled=false 关闭安全验证

启动类

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

配置完成之后,启动Client端服务,再次访问服务:http://localhost:8000可以看到客户端的相关信息。

首页会展示被监控的各个服务,点击详情可以查看某个服务的具体监控信息

通过上图可以看出,Spring Boot Admin以图形化的形式展示了应用的各项信息,这些信息大多都来自于Spring Boot Actuator提供的接口。

监控微服务

如果我们使用的是单个Spring Boot应用,就需要在每一个被监控的应用中配置Admin Server的地址信息;如果应用都注册在Eureka中(Consul也一样)就不需要再对每个应用进行配置,Spring Boot Admin会自动从注册中心抓取应用的相关信息。

这里使用四个示例项目来演示:

  • spring-boot-admin-server Admin Server端
  • spring-cloud-eureka 注册中心
  • spring-cloud-producer 应用一,Admin Client端
  • spring-cloud-producer-2 应用二,Admin Client端

首先启动注册中心spring-cloud-eureka,如果对Eureka不了解的同学可以查看这篇文章springcloud(二):注册中心Eureka

Server端

示例项目:spring-boot-admin-server

项目依赖

<dependencies><dependency><groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-server</artifactId> <version>1.5.6</version> </dependency> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-server-ui</artifactId> <version>1.5.6</version> </dependency> </dependencies>

增加了对eureka的支持

配置文件

server:port: 8000
spring:application:name: admin-server
eureka:instance:leaseRenewalIntervalInSeconds: 10client:registryFetchIntervalSeconds: 5serviceUrl:defaultZone: ${EUREKA_SERVICE_URL:http://localhost:8761}/eureka/management.security.enabled: false

配置文件中添加了eureka的相关配置

启动类

@Configuration
@EnableAutoConfiguration
@EnableDiscoveryClient
@EnableAdminServer public class AdminServerApplication { public static void main(String[] args) { SpringApplication.run(AdminServerApplication.class, args); } }

上述步骤完成之后,启动Server端。

Client端

示例项目:spring-cloud-producer和spring-cloud-producer-2

项目依赖

<dependencies><dependency><groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-client</artifactId> <version>1.5.6</version> </dependency> </dependencies>

配置文件

server:port: 9000
spring:application:name: producer
eureka:client:serviceUrl:defaultZone: http://localhost:8761/eureka/
management:security:enabled: false

我们发现配置文件中并没有添加Admin Server的相关配置

启动类

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

Web层

@RequestMapping("/hello")public String index(@RequestParam String name) { logger.info("request one/two name is "+name); return "hello "+name+",this is first messge"; }

web层添加了/hello的请求方法,方法中使用one/two区别是哪个应用。spring-cloud-producer-2和spring-cloud-producer代码类似,具体大家可以查看示例代码。

完成上面配置之后,分别启动项目:spring-cloud-producer和spring-cloud-producer-2,浏览器访问http://localhost:8000 可以看到以下界面:

从上图可以看出Admin Server监控了四个实例,包括Server自己,注册中心、两个PRODUCER。说明Admin Server自动从服务中心抓取了所有的实例信息并进行了监控。点击Detail可以具体查看某一个示例的监控信息。

示例代码

邮件告警

Spring Boot Admin将微服务中所有应用信息在后台进行了展示,非常方便我们对微服务整体的监控和治理。但是我们的运营人员也不可能一天24小时盯着监控后台,因此如果服务有异常的时候,有对应的邮件告警就太好了,其实Spring Boot Admin也给出了支持。

我们对上面的示例项目spring-boot-admin-server进行改造。

添加依赖

<dependency><groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>

增加了邮件发送的starter包

配置文件

spring:mail:host: smtp.qq.comusername: xxxxx@qq.compassword: xxxxproperties:mail:smtp:auth: truestarttls:enable: truerequired: trueboot:admin:notify:mail:from: xxxx@qq.comto: xxxx@qq.com
# http://codecentric.github.io/spring-boot-admin/1.5.6/#mail-notifications

在配置文件中添加邮件发送相关信息:邮件的发送者、接受者、协议、移动授权码等。关于Spring Boot邮件发送,可以参考springboot(十):邮件服务

配置完成后,重新启动项目spring-boot-admin-server,这样Admin Server就具备了邮件告警的功能,默认情况下Admin Server对Eureka中的服务上下线都进行了监控,当服务上下线的时候我们就会收到如下邮件:

当然这只是最基本的邮件监控,在实际的使用过程中,需要根据我们的情况对邮件告警内容进行自定义,比如监控堆内存的使用情况,当到达一定比例的时候进行告警等。

Springboot监控之二:Spring Boot Admin对Springboot服务进行监控相关推荐

  1. 五分钟学会 Spring Boot Admin:微服务应用监控(小白必看,一看就会教程)

    Spring Boot Admin:微服务应用监控 Spring Boot Admin 简介 监控信息演示 结合注册中心使用 功能演示 添加登录认证 文末福利 Spring Boot Admin 可以 ...

  2. Spring Boot Admin:微服务应用监控

    摘要 Spring Boot Admin 可以对SpringBoot应用的各项指标进行监控,可以作为微服务架构中的监控中心来使用,本文将对其用法进行详细介绍. Spring Boot Admin 简介 ...

  3. SpringCloud 微服务监控方案sentinel + spring boot admin

    SpringCloud 微服务监控方案sentinel + spring boot admin 前言:项目基于springcloud框架,服务注册中心使用的是Eureka spring boot ad ...

  4. 高级版的 jvisualvm :Spring Boot Admin 监控 Spring Boot 微服务项目

    前奏:先说一下 Java VisualVM Java VisualVM 是一个能够监控 JVM 的 jdk 自带的图形化工具: 在 $JAVA_HOME/bin 目录下,可直接运行它. 要想监控远程服 ...

  5. SpringCloud(8)微服务监控Spring Boot Admin

    1.简介 Spring Boot Admin 是一个管理和监控Spring Boot 应用程序的开源软件.Spring Boot Admin 分为 Server 端和 Client 端,Spring ...

  6. Spring boot admin 监控配置

    1.项目背景 项目开发完成并部署上线,系统正式进入试运行:在试运行期间由于客户服务问题导致部分服务不可用,幸亏系统采用集群架构没有造成系统正常使用,但该问题存在系统风险,问题出现后没被第一时间发现和处 ...

  7. Spring Boot Admin 2 值得了解的新变化

    6.19号,spring团队发布了期待已久的 Spring Cloud Finchley.RELEASE 版本. 期间Spring Boot Admin 也发布了 2.0.1 兼容它,我在升级pig ...

  8. Spring Boot Admin监控中心详细讲解

    你心心念念想得到的人,也许正是别人已经玩腻了的人!!!所以,我们现在正在想学习的东西,正是人家已经玩了很久已经很腻的人了~~~所以现在立刻马上开始 Spring Boot Admin  是个什么东东? ...

  9. Spring Boot Admin (Spring Clould Admin) 官方文档重点内容中文翻译

    GitHub地址 文章目录 1. Spring Boot Admin简介 2. 快速入门 2.1 配置Spring Boot Admin Server (SBA Server) 2.2 注册Clien ...

  10. Spring Boot Admin,贼好使

    Spring Boot Admin(SBA)是一个开源的社区项目,用于管理和监控 Spring Boot 应用程序.应用程序可以通过 http 的方式,或 Spring Cloud 服务发现机制注册到 ...

最新文章

  1. 【正一专栏】从中超走向世界领先的保利尼奥
  2. 【控制】滑动模式观测器 sliding mode observer
  3. 契约式设计(DbC)感想(二)
  4. Serverless 解惑——函数计算如何访问 Mongo 数据库
  5. LG P4198 楼房重建(线段树)
  6. 微软企业库4.1学习笔记(三十六)日志模块 简介
  7. iPad有望带来全面鼠标支持 大幅提升游戏体验
  8. generator.xml mysql_Mybatis 使用generator.xml生成实体及mapper
  9. Oracle11g安装完成后给用户解锁
  10. LINUX SHELL脚本如何判断一个目录下有没有文件
  11. c语言实现作业调度先来先服务和短进程优先,实验2 先来先服务调度和最短作业优先调度算法实现.doc...
  12. QT中QString 类的使用--获取指定字符位置、截取子字符串等
  13. 理解OFDM技术原理
  14. 近六成女受访者赞成“中国男配不上中国女”
  15. C语言I博客作业03
  16. web应用开发相关技术,CSS盒模型概述
  17. asp连接excel数据库
  18. html表格边框怎么消除,如何去除table的粗边框
  19. Linux替换Docker镜像源
  20. 浅谈STG游戏的开发(4月8日更新,已补全内容)

热门文章

  1. 移动端上拉加载下拉刷新插件-mescroll.js插件
  2. Eclipse中servlet显示无法导入javax.servlet包问题的解决方案
  3. 78. 子集-LeetCode
  4. 在Html5中与服务器交互
  5. jquery实现全选功能
  6. 学习笔记之TCP/IP协议分层与OSI參考模型
  7. ubuntu下编译ffmpeg并用eclipse调试
  8. 调用iframe 中的js[兼容各种浏览器]
  9. 树形目录生成器.bat
  10. android apk 在线分析,apkanalyzer