文章目录
- 1.简介
- 2.非微服务应用集成admin
- 2.1.Spring Boot Admin Server搭建
- 2.1.1.引入依赖
- 2.1.2.添加启动注解
- 2.1.3.配置文件
- 2.2.Spring Boot Admin Client搭建
- 2.2.1.引入依赖
- 2.2.2.配置文件
- 2.2.3.启动测试
- 2.3.添加服务离线上线通知
- 2.3.1.在admin server应用的pom文件中添加邮件客户端依赖
- 2.3.2.添加邮件配置
- 2.3.3.邮件发送工具类
- 2.3.4.添加自定义通知事件
- 2.3.5.测试邮件通知
- 3.微服务应用集成admin
- 3.1.添加依赖
- 3.2.添加配置
- 3.3.添加启动注解
- 3.4.测试
- 4.项目配套代码
1.简介
Spring Boot Admin是一个开源社区项目,用于管理和监控SpringBoot应用程序。 应用程序作为Spring Boot Admin Client向为Spring Boot Admin Server注册(通过HTTP)或使用SpringCloud注册中心(例如Eureka,Nacos)。 UI是的AngularJs应用程序,展示Spring Boot Admin Client的Actuator端点上的一些监控。常见的功能或者监控如下:
- 显示健康状况
- 显示详细信息,如下
JVM和内存指标
micrometer.io指标
数据源指标
缓存指标 - 显示构建信息编号
- 关注并下载日志文件
- 查看jvm系统和环境属性
- 查看Spring Boot配置属性
- 轻松的日志级管理
- 与JMX-beans交互
- 查看线程转储
- 查看http跟踪
- 下载heapdump
- 状态变更通知(通过电子邮件,…)
2.非微服务应用集成admin
2.1.Spring Boot Admin Server搭建
2.1.1.引入依赖
<!-- admin server 依赖 -->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.2.2</version>
</dependency>
2.1.2.添加启动注解
在springboot启动类里添加@EnableAdminServer注解
@EnableAdminServer
@SpringBootApplication
public class MonitorApplication {}
2.1.3.配置文件
server:
port: 8013
spring:
application:
name: monitor
boot:
admin:
ui:
# ui页面的自定义内容信息
title: 我的服务监控中心
brand: <span>Service Monitoring Center</span>
2.2.Spring Boot Admin Client搭建
2.2.1.引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>
2.2.2.配置文件
spring:
application:
name: service
boot:
admin:
client:
# spring boot admin server的注册地址,多个以逗号隔开,并把localhost换成ip
url: http://localhost:8013
instance:
prefer-ip: true
register-once: false
#需要暴露监控端口给spring boot admin server访问
management:
endpoints:
web:
exposure:
include: '*'
endpoint:
health:
show-details: ALWAYS
2.2.3.启动测试
先启动 admin server应用,然后再启动admin clent 应用.
访问 http://localhost:8013/
查看被监控的服务详细信息
2.3.添加服务离线上线通知
在admin server应用添加服务离线上线邮件通知功能
2.3.1.在admin server应用的pom文件中添加邮件客户端依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
2.3.2.添加邮件配置
spring:
#配置发送邮件需要的参数
mail:
#邮件服务器
host: smtp.qq.com
#发送邮件的帐号
username: 你的邮箱帐号
#邮箱帐号的授权码
password: 你的邮件授权码
properties:
mail:
smtp:
auth: true
client:
notify:
mail:
#邮件内容的标题
subject: test service notification
#收邮件的帐号,多个用 , 隔开
to: 你收邮件的帐号
2.3.3.邮件发送工具类
@Component
public class EmailUtil {
private final Logger logger= LoggerFactory.getLogger(EmailUtil.class);
@Autowired
private JavaMailSender mailSender;
@Value("${spring.mail.username}")
private String form;
@Value("${client.notify.mail.to}")
private String to;
public void sendEmail(String subject,String message){
try {
if(StringUtils.isEmpty(to)){
logger.error("email to is Emtry ... send Email stop");
return;
}
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
//发件人
helper.setFrom(form);
//收件人
String []toArray=to.split(",");
helper.setTo(toArray);
//标题
helper.setSubject(subject);
//文本
helper.setText(message,true);
mailSender.send(mimeMessage);
}catch (Exception e){
logger.info("sendEmail error,message={}",e);
}
}
}
2.3.4.添加自定义通知事件
@Component
public class CustomNotifier extends AbstractStatusChangeNotifier {
private static final Logger logger = LoggerFactory.getLogger(CustomNotifier.class);
@Value("${client.notify.mail.subject}")
private String subject;
@Autowired
EmailUtil emailUtil;
//邮件模板内容信息
private String content="<p style=\"white-space: normal;\">亲爱的运维人员:</p><p style=\"white-space: normal;\"> 您好!</p><p style=\"white-space: normal;\"> 您的运维管理的服务程序已经<strong>${服务状态}</strong>,</p><p style=\"white-space: normal;\">服务名称是:<strong>${服务名称}</strong>,服务部署的服务器ip是:<strong>${服务器ip地址}。</strong></p><p style=\"white-space: normal;\">请查看及时服务运行状态,.</p><p style=\"white-space: normal;\">如有打扰,请见谅!</p><p style=\"white-space: normal;\"><br/></p><p style=\"white-space: normal;\"><strong>服务监控中心!</strong></p><p><br/></p>'";
public CustomNotifier(InstanceRepository repository) {
super(repository);
}
@Override
protected Mono<Void> doNotify(InstanceEvent event, Instance instance) {
return Mono.fromRunnable(() -> {
if (event instanceof InstanceStatusChangedEvent) {
logger.info("Instance {} ({}) is {}", instance.getRegistration().getName(), event.getInstance(),
((InstanceStatusChangedEvent) event).getStatusInfo().getStatus());
//获取服务状态 status UP上线,OFFLINE离职
String status = ((InstanceStatusChangedEvent) event).getStatusInfo().getStatus();
//服务名称,
String clientName = instance.getRegistration().getName().toLowerCase();
//服务所在的服务器ip地址
String clientServerUrl = instance.getRegistration().getServiceUrl();
String statusName="OFFLINE".equals(status)?"已经宕机了":"已经重新上线!";
if ("OFFLINE".equals(status) || "UP".equals(status)) {
emailUtil.sendEmail(subject + "-" + clientName + "-" + status, repelateMessage(content,statusName,clientName,clientServerUrl));
}
} else {
logger.info("Instance {} ({}) {}", instance.getRegistration().getName(), event.getInstance(),
event.getType());
}
});
}
/**
* 替换邮件模板内占位符
*/
private String repelateMessage(String msg, String state, String appName, String serverIp) {
msg = msg.replace("${服务状态}", state);
msg = msg.replace( "${服务名称}", appName);
msg =msg.replace("${服务器ip地址}", serverIp);
return msg;
}
}
2.3.5.测试邮件通知
先重启spring boot admin server,spring boot admin clent应用.
停止clent应用
停止spring boot admin clent应用,然后就能收到服务离线的邮件通知了
启动clent应用
启动spring boot admin clent应用,然后就能收到服务上限的邮件通知了
3.微服务应用集成admin
需要对spring cloud有一定的了解才能完成微服务集成,如果不了解的,请等学习完spring cloud后,再来
尝试下面的服务集成。
Spring Boot Admin Server会往注册中心里拉取各个客户端的监控信息,所以微服务模块只需要
往注册中心里面注册就行,无需再往Admin Server里面注册,spring-boot-admin-starter-client依赖就不需要再添加了。
3.1.添加依赖
<!--监控-->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.2.2</version>
</dependency>
<!--eureka客户端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
3.2.添加配置
server:
port: 8764
spring:
application:
name: monitor
#eureka注册中心配置
eureka:
client:
serviceUrl:
defaultZone: http://admin:123456@localhost:8761/eureka/
3.3.添加启动注解
@EnableAdminServer
public class MonitorApplication {
}
3.4.测试
先启动eureka注册中心,然后再启动Spring boot admin server,然后再启动别的微服务模块.