上一章节,咱们介绍了
Actuator
的使用,知道了可经过访问不一样的端点路径,获取相应的监控信息。但使用后也能发现,返回的监控数据都是以JSON串的形式进行返回的,对于实施或者其余人员来讲,不是很直观,而当须要监控的应用愈来愈多时,依次去访问对应的应用也过于繁琐和低效了。因此,本章节来介绍下Spring Boot Admin
这个UI监控工具。前端
先看看,官网给其定义:java
简单来讲,Spring Boot Admin
是一个管理和监控Spring Boot
应用程序的开源软件。每一个应用都认为是一个客户端,经过HTTP
或者服务注册发现Spring Cloud
(Eureka、Consul等等)注册到admin server
中进行展现,Spring Boot Admin UI
部分使用AngularJs
将数据展现在前端。git
Spring Boot Admin
是一个针对spring-boot
的actuator
接口进行UI美化封装的监控工具。它能够:在列表中浏览全部被监控spring-boot项目的基本信息,详细的Health信息、内存信息、JVM信息、垃圾回收信息、各类配置信息(好比数据源、缓存列表和命中率)等,还能够直接修改logger
的level
。github
Spring Boot Admin
包含admin-server
与admin-client
两个组件,admin-server
经过采集actuator
端点数据,显示在spring-boot-admin-ui
上。web
**提醒:为了演示服务端和客户端,本实例建立了一个maven多模块
项目。 **spring
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
进行版本管理。springboot
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 ,便可看见监控页面了:
因为如今尚未加入客户端,因此应用列表都是空的。
被监控的应用只须要加入相关依赖和服务端配置便可。
建立一个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
系列教程,若有雷同,请多多包涵了。原创不易,码字不易,还但愿你们多多支持。若文中有所错误之处,还望提出,谢谢。
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/