文章目錄
簡介
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
- 狀態變更通知(通過電子郵件,…)
非微服務應用集成admin
Spring Boot Admin Server搭建
引入依賴
<!-- admin server 依賴 -->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.2.2</version>
</dependency>
添加啓動註解
在springboot啓動類裏添加@EnableAdminServer註解
@EnableAdminServer
@SpringBootApplication
public class MonitorApplication {}
配置文件
server:
port: 8013
spring:
application:
name: monitor
boot:
admin:
ui:
# ui頁面的自定義內容信息
title: 我的服務監控中心
brand: <span>Service Monitoring Center</span>
Spring Boot Admin Client搭建
引入依賴
<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>
配置文件
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
啓動測試
先啓動 admin server應用,然後再啓動admin clent 應用.
訪問 http://localhost:8013/
查看被監控的服務詳細信息
添加服務離線上線通知
在admin server應用添加服務離線上線郵件通知功能
在admin server應用的pom文件中添加郵件客戶端依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
添加郵件配置
spring:
#配置發送郵件需要的參數
mail:
#郵件服務器
host: smtp.qq.com
#發送郵件的帳號
username: 你的郵箱帳號
#郵箱帳號的授權碼
password: 你的郵件授權碼
properties:
mail:
smtp:
auth: true
client:
notify:
mail:
#郵件內容的標題
subject: test service notification
#收郵件的帳號,多個用 , 隔開
to: 你收郵件的帳號
郵件發送工具類
@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);
}
}
}
添加自定義通知事件
@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;
}
}
測試郵件通知
先重啓spring boot admin server,spring boot admin clent應用.
停止clent應用
停止spring boot admin clent應用,然後就能收到服務離線的郵件通知了
啓動clent應用
啓動spring boot admin clent應用,然後就能收到服務上限的郵件通知了
微服務應用集成admin
需要對spring cloud有一定的瞭解才能完成微服務集成,如果不瞭解的,請等學習完spring cloud後,再來
嘗試下面的服務集成。
Spring Boot Admin Server會往註冊中心裏拉取各個客戶端的監控信息,所以微服務模塊只需要
往註冊中心裏面註冊就行,無需再往Admin Server裏面註冊,spring-boot-admin-starter-client依賴就不需要再添加了。
Spring Boot Admin Server 搭建
添加依賴
<!--監控-->
<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>
添加配置
server:
port: 8764
spring:
application:
name: monitor
#eureka註冊中心配置
eureka:
client:
serviceUrl:
defaultZone: http://admin:123456@localhost:8761/eureka/
添加啓動註解
@EnableAdminServer
public class MonitorApplication {
}
測試
先啓動eureka註冊中心,然後再啓動Spring boot admin server,然後再啓動別的微服務模塊.
項目配套代碼
github地址
要是覺得我寫的對你有點幫助的話,麻煩在github上幫我點 Star
【SpringBoot框架篇】其它文章如下,後續會繼續更新。