SpringBoot | 第二十八章:监控管理之Spring Boot Admin使用
前言
上一章节,我们介绍了
Actuator
的使用,知道了可通过访问不同的端点路径,获取相应的监控信息。但使用后也能发现,返回的监控数据都是以JSON串的形式进行返回的,对于实施或者其他人员来说,不是很直观,而当需要监控的应用越来越多时,依次去访问对应的应用也过于繁琐和低效了。所以,本章节来介绍下Spring Boot Admin
这个UI监控工具。
Spring-Boot-Admin是什么
先看看,官网给其定义:
简单来说,Spring Boot Admin
是一个管理和监控Spring Boot
应用程序的开源软件。每个应用都认为是一个客户端,通过HTTP
或者服务注册发现Spring Cloud
(Eureka、Consul等等)注册到admin server
中进行展示,Spring Boot Admin UI
部分使用AngularJs
将数据展示在前端。
Spring Boot Admin
是一个针对spring-boot
的actuator
接口进行UI美化封装的监控工具。它可以:在列表中浏览所有被监控spring-boot项目的基本信息,详细的Health信息、内存信息、JVM信息、垃圾回收信息、各种配置信息(比如数据源、缓存列表和命中率)等,还可以直接修改logger
的level
。
监控实例
Spring Boot Admin
包含admin-server
与admin-client
两个组件,admin-server
通过采集actuator
端点数据,显示在spring-boot-admin-ui
上。
**提醒:为了演示服务端和客户端,本实例创建了一个maven多模块
项目。
**
admin-server端
admin-server
端主要是数据展现功能,包含了一个ui页面。
创建一个spring-boot-admin-server
工程。
0.引入pom依赖
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
</dependency>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-dependencies</artifactId>
<version>1.5.7</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
注意:由于使用的SprinBoot
为1.5.15
版本,所以选用的Spring Boot Admin
版本为1.5.7
版本。同时为了版本依赖,使用dependencyManagement
加入了spring-boot-admin-dependencies
进行版本管理。
1.启动类,加入注解@EnableAdminServer
。
@SpringBootApplication
@EnableAdminServer
@Slf4j
public class Chapter28AdminServerApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(Chapter28AdminServerApplication.class, args);
log.info("Chapter28AdminServer启动!");
}
}
一个服务端就基本配置结束了,启动应用,访问:http://127.0.0.1:8080 ,即可看见监控页面了:
由于现在还没有加入客户端,所以应用列表都是空的。
admin-client端
被监控的应用只需要加入相关依赖和服务端配置即可。
创建一个spring-boot-admin-client
项目
0.引入pom依赖
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>
1.配置文件加入服务端地址等信息。
application.properties
# 应用名称 便于识别
spring.application.name=spring-boot-admin-client
server.port=8081
#服务端地址
spring.boot.admin.url=http://127.0.0.1:8080
# 关闭安全认证
management.security.enabled=false
# 利用info端点,加入版本等信息
info.version=@project.version@
info.name=@project.artifactId@
# 可自定义信息
info.author=oKong
info.blog=http://blog.lqdev.cn/
注意:为了能获取maven的配置内容,需要在pom文件中加入以下配置:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>build-info</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
只需要这两部,客户端就配置完了,启动下,访问http://127.0.0.1:8080 ,即可看见监控页面已经包含了此应用数据了:
此时,我们点击详情,即可看见各类监控数据了。
环境变量:
线程信息:
日志相关:
若需要动态的修改日志级别,按官网的提示,需要加入logback-spring.xml
文件,具体的可查看官网文档吧,写的很详细了。
其他监控指标,大家可以自行查看下。
注意:在生产环境中,为了数据的安全,还是需要加上安全认证的,具体的可以查看官方文档:securing-spring-boot-admin,相对比较简单,简单来说就是加入spring-boot-starter-security
进行安全认证,这里可以直接引入spring-boot-admin-server-ui-login
进行登录安全认证。本文就不阐述了。
监控通知
虽然我们可以通过界面进行可视化监控,但不可能实时去盯着屏幕的,我们希望在服务有问题,比如下线、CPU异常等情况时,能通过邮件等形式及时通知对应责任人,这样就能做到预警效果了。
在SpingBootAdmin
中,提供了多种通知机制,来实现监控告警功能。
可以看见,其集成了国外的一些通讯软件,而对于我们而言,还是使用邮件通知比较靠谱。当然也能自定义通知,进行个性化消息通知功能,比如钉钉机器人通知等。
发送邮件通知
这里简单以邮件通知为例。具体邮件发送相关知识点,可查看:第二十六章:邮件发送,这里不在阐述了。
以下配置都是在服务端spring-boot-admin-server
进行添加。
0.引入pom依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
1.配置邮箱信息。
# 邮件相关
# SMTP服务器地址
spring.mail.host=smtp.qq.com
# SMTP服务器端口号 默认-1
# spring.mail.port=-1
# 发送方帐号
spring.mail.username=邮箱
# 发送方密码(授权码)
spring.mail.password=邮箱密码
#javaMailProperties 配置
# 开启用户身份验证
spring.mail.properties.mail.smtp.auth=true
# 发送给谁
spring.boot.admin.notify.mail.to=499452441@qq.com
# 谁发的
spring.boot.admin.notify.mail.from=499452441@qq.com
再次启动服务端应用和客户端,之后停止客户端,就可以收到下线通知邮件了。
同时,我们还能自定义发送邮件的主题和内容,配置文件加入
# 主题格式
# 使用中文会乱码,可使用yml文件格式解决
# 之类直接unicode编码了
# 应用#{application.name}(#{application.id}) 状态为:#{to.status}
spring.boot.admin.notify.mail.subject=\u5e94\u7528#{application.name}(#{application.id}) \u72b6\u6001\u4e3a\uff1a#{to.status}
# 邮件内容
#应用#{application.name} (#{application.id})\n状态从 #{from.status} 变为 #{to.status}\n\n 应用健康地址:#{application.healthUrl}
spring.boot.admin.notify.mail.text=\u5e94\u7528#{application.name} (#{application.id})\n\u72b6\u6001\u4ece #{from.status} \u53d8\u4e3a #{to.status}\n\n \u5e94\u7528\u5065\u5eb7\u5730\u5740\uff1a#{application.healthUrl}
多说几句:这里的subject
和text
都支持SpEL(Spring Expression Language)
表达式的,关于SpEL
表达式,有兴趣的同学可以自行搜索下,是一个支持运行时查询和操作对象图的强大的表达式语言,类似于EL
表达式,定界符为#{}
,一种简化开发的表达式,通过使用表达式来简化开发,减少一些逻辑、配置的编写。
而此次,发送邮件的参数,通过跟踪源码获悉,入口的参数为ClientApplicationEvent
,对应路径为:de.codecentric.boot.admin.event.ClientApplicationEvent
,即应用信息。其继承的类如下:
当应用发送状态变更时,就会触发ClientApplicationStatusChangedEvent
事件了,对应的参数如下所示:
所以,需要额外一些参数时,可以根据de.codecentric.boot.admin.model.Application
的属性获取更加详细的信息,如metadata
、info
等等。
之后,发送的邮件内如如下:
自定义通知
除了使用自带的一些通知机制外,我们还能通过自定义,来进行个性化通知的创建,比如在一些场景下,我们会把消息推送到MQ服务器上或者手机上等等。实现通知比较简单,就是实现
Notifier
接口,而官方提供给了一个抽象类AbstractStatusChangeNotifier
,我们直接继承此类就好了。
0.创建一个自定义通知类
CustomNotifier.java
/**
* 自定义通知
* @author oKong
*
*/
@Component
@ConfigurationProperties("okong.custom.notify")
@Setter
@Getter
@Slf4j
public class CustomNotifier extends AbstractStatusChangeNotifier{
String name;
@Override
protected void doNotify(ClientApplicationEvent event) throws Exception {
//这里只是为了示例 ,直接输出到控制台了。
log.info("{}-自定义通知:应用-{}", name,event.getApplication().getName());
}
}
1.配置文件配置属性name的值
# 自定义通知类型
okong.custom.notify.name=oKong
再次,启动应用,当监控的应用状态发生变动时,可以看见邮件和自定义通知都生效了,控制台可以看见自定义输出内容了。
大家可以结合实际的业务需求,编写不同的自定义通知类的,比如利用小程序或者微信公众号,发送微信信息;或者发送短信;或者其他的通讯工具都可以的,自由发挥~
参考资料
总结
本章节主要讲解了利用
Spring Boot Admin
这个web监控工具进行可视化的监控应用各指标信息。关于使用Spring Cloud
注册中心来进行客户端自动注册与发现的,本系列就不阐述了,因为涉及到一些Eureka
的相关知识点,后期会在白话SpringCloud
的实施监控里面进行详细阐述,而且基于Spring Boot2
的界面风格也有大变动,使用Vue.js
来进行构建了,同时很会集成Hystrix
和turbine
的集成监控,会更加方便。
最后
目前互联网上很多大佬都有
SpringBoot
系列教程,如有雷同,请多多包涵了。原创不易,码字不易,还希望大家多多支持。若文中有所错误之处,还望提出,谢谢。
老生常谈
- 个人QQ:
499452441
- 微信公众号:
lqdevOps
个人博客:http://blog.lqdev.cn
完整示例:https://github.com/xie19900123/spring-boot-learning/tree/master/chapter-28
原文地址:http://blog.lqdev.cn/2018/09/14/springboot/chapter-twenty-eight/
SpringBoot | 第二十八章:监控管理之Spring Boot Admin使用的更多相关文章
- Springboot 系列(十七)迅速使用 Spring Boot Admin 监控你的 Spring Boot 程序,支持异常邮件通知
1. Spring Boot Admin 是什么 Spring Boot Admin 是由 codecentric 组织开发的开源项目,使用 Spring Boot Admin 可以管理和监控你的 S ...
- 使用 Spring Boot Admin 监控应用状态
程序员优雅哥 SpringBoot 2.7 实战基础 - 11 - 使用 Spring Boot Admin 监控应用状态 1 Spring Boot Actuator Spring Boot Act ...
- Spring Boot 2.X(十七):应用监控之 Spring Boot Admin 使用及配置
Admin 简介 Spring Boot Admin 是 Spring Boot 应用程序运行状态监控和管理的后台界面.最新UI使用vue.js重写里. Spring Boot Admin 为已注册的 ...
- Spring Boot admin 2.0 详解
一.什么是Spring Boot Admin ? Spring Boot Admin是一个开源社区项目,用于管理和监控SpringBoot应用程序. 应用程序作为Spring Boot Admin C ...
- Spring Boot Admin 2.1.0 全攻略
转载请标明出处: https://www.fangzhipeng.com 本文出自方志朋的博客 Spring Boot Admin简介 Spring Boot Admin是一个开源社区项目,用于管理和 ...
- Spring Boot Admin 2.1.0
原文:https://blog.csdn.net/forezp/article/details/86105850 Spring Boot Admin简介 Spring Boot Admin是一个开源社 ...
- Spring Boot Admin,贼好使!
Spring Boot Admin(SBA)是一个开源的社区项目,用于管理和监控 Spring Boot 应用程序.应用程序可以通过 http 的方式,或 Spring Cloud 服务发现机制注册到 ...
- SpringBoot第二十四篇:应用监控之Admin
作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/11457867.html 版权声明:本文为博主原创文章,转载请附上博文链接! 引言 前一章(S ...
- (转)Spring Boot(二十):使用 spring-boot-admin 对 Spring Boot 服务进行监控
http://www.ityouknow.com/springboot/2018/02/11/spring-boot-admin.html 上一篇文章<Spring Boot(十九):使用 Sp ...
随机推荐
- 转:Linux下同时启动两个Tomcat进行设置
转: Linux下同时启动两个Tomcat进行设置 解压tar.gz:tar -zxvf apache-tomcat-6.0.41.tar.gz 至相应的路径下,可解压至两个不同的路径或者相同的路径下 ...
- MD5和SHA-1
MD5和SHA-1都是我们耳熟能详的术语了,很多人可能知道他们跟加密有关系,但是他们是怎么做到加密的,他们各自的特点又是什么.我来简单的讲一讲. MD5和SHA-1都被称作哈希(Hash)函数,用过J ...
- Python3之subprocess模块
一.简介 subprocess最早在2.4版本引入.用来生成子进程,并可以通过管道连接他们的输入/输出/错误,以及获得他们的返回值. # subprocess用来替换多个旧模块和函数 os.syste ...
- Leetcode 25. Reverse Nodes in k-Group 以每组k个结点进行链表反转(链表)
Leetcode 25. Reverse Nodes in k-Group 以每组k个结点进行链表反转(链表) 题目描述 已知一个链表,每次对k个节点进行反转,最后返回反转后的链表 测试样例 Inpu ...
- 洛谷 P3267 [JLOI2016/SHOI2016]侦察守卫(树形dp)
题面 luogu 题解 树形\(dp\) \(f[x][y]表示x的y层以下的所有点都已经覆盖完,还需要覆盖上面的y层的最小代价.\) \(g[x][y]表示x子树中所有点都已经覆盖完,并且x还能向上 ...
- POJ3635 Full Tank? 优先队列BFS or 分层图最短路 or DP?
然而我也不知道这是啥啊...反正差不多...哪位大佬给区分一下QWQ.. 好的,我把堆的<写反了..又调了一个小时..你能不能稳一点.... 记录状态:所在位置u,油量c,花费w 扩展状态: 1 ...
- Modular Inverse (拓展欧几里得求逆元)
The modular modular multiplicative inverse of an integer a modulo m is an integer xsuch that a-1≡x ( ...
- Week 3: Structured Types 5. Tuples and Lists Exercise: odd tuples
Exercise: odd tuples 5/5 points (graded) ESTIMATED TIME TO COMPLETE: 5 minutes Write a procedure cal ...
- Poj:1064 : :Cable master (假定一个解并判断是否可行)(二分搜索答案)
Description Inhabitants of the Wonderland have decided to hold a regional programming contest. The J ...
- SCU - 4439 最小点覆盖
题意:求最小的染色顶点数满足所有的边至少有个一端点被染色 2015四川省赛,过题数17/120+,还以为是什么难题,这不就是裸的二分图最小点覆盖吗.. 掏出了尘封一年的破板子 #include< ...