Spring?boot?admin?服務(wù)監(jiān)控利器詳解
一、簡(jiǎn)介
用于對(duì) Spring Boot 應(yīng)用的管理和監(jiān)控。可以用來(lái)監(jiān)控服務(wù)是否健康、是否在線、以及一些jvm數(shù)據(jù)等等。
Spring Boot Admin 分為服務(wù)端(spring-boot-admin-server)和客戶端(spring-boot-admin-client),服務(wù)端和客戶端之間采用 http 通訊方式實(shí)現(xiàn)數(shù)據(jù)交互;單體項(xiàng)目中需要整合 spring-boot-admin-client 才能讓?xiě)?yīng)用被監(jiān)控。
在 SpringCloud 項(xiàng)目中,spring-boot-admin-server 是直接從注冊(cè)中心抓取應(yīng)用信息,不需要每個(gè)微服務(wù)應(yīng)用整合 spring-boot-admin-client 就可以實(shí)現(xiàn)應(yīng)用的管理和監(jiān)控。

主要的功能點(diǎn)有:
- 顯示應(yīng)用程序的監(jiān)控狀態(tài)
- 應(yīng)用程序上下線監(jiān)控
- 查看 JVM,線程信息
- 可視化的查看日志以及下載日志文件
- 動(dòng)態(tài)切換日志級(jí)別
- Http 請(qǐng)求信息跟蹤
二、搭建
1、服務(wù)端
需先搭建服務(wù)端,監(jiān)控服務(wù),被監(jiān)控的服務(wù)連接過(guò)來(lái)即可,開(kāi)箱即用。
1、新建一個(gè)項(xiàng)目做為服務(wù)端
2、引入spring-boot-admin服務(wù)端依賴
<!--用于檢查系統(tǒng)的監(jiān)控情況-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--Spring Boot Admin Server監(jiān)控服務(wù)端-->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.3.1</version>
</dependency>
<!--增加安全防護(hù),防止別人隨便進(jìn)-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>3、啟動(dòng)類(lèi)上開(kāi)啟admin@EnableAdminServer

4、security安全防護(hù)配置
import de.codecentric.boot.admin.server.config.AdminServerProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
import org.springframework.security.web.csrf.CookieCsrfTokenRepository;
@Configuration
public class SecuritySecureConfig extends WebSecurityConfigurerAdapter {
private final String adminContextPath;
public SecuritySecureConfig(AdminServerProperties adminServerProperties) {
this.adminContextPath = adminServerProperties.getContextPath();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
// 登錄成功處理類(lèi)
SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
successHandler.setTargetUrlParameter("redirectTo");
successHandler.setDefaultTargetUrl(adminContextPath + "/");
http.authorizeRequests()
//靜態(tài)文件允許訪問(wèn)
.antMatchers(adminContextPath + "/assets/**").permitAll()
//登錄頁(yè)面允許訪問(wèn)
.antMatchers(adminContextPath + "/login", "/css/**", "/js/**", "/image/*").permitAll()
//其他所有請(qǐng)求需要登錄
.anyRequest().authenticated()
.and()
//登錄頁(yè)面配置,用于替換security默認(rèn)頁(yè)面
.formLogin().loginPage(adminContextPath + "/login").successHandler(successHandler).and()
//登出頁(yè)面配置,用于替換security默認(rèn)頁(yè)面
.logout().logoutUrl(adminContextPath + "/logout").and()
.httpBasic().and()
.csrf()
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
.ignoringAntMatchers(
"/instances",
"/actuator/**"
);
}
}5、yml配置
server:
port: 9111
spring:
boot:
admin:
ui:
title: HMB服務(wù)監(jiān)控中心
client:
instance:
metadata:
tags:
environment: local
#要獲取的client的端點(diǎn)信息
probed-endpoints: health,env,metrics,httptrace:trace,threaddump:dump,jolokia,info,logfile,refresh,flyway,liquibase,heapdump,loggers,auditevents
monitor: # 監(jiān)控發(fā)送請(qǐng)求的超時(shí)時(shí)間
default-timeout: 20000
security: # 設(shè)置賬號(hào)密碼
user:
name: admin
password: admin
# 服務(wù)端點(diǎn)詳細(xì)監(jiān)控信息
management:
trace:
http:
enabled: true
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: always6、啟動(dòng)項(xiàng)目
訪問(wèn) http://ip:端口,
如我的http://localhost:9111,賬號(hào)密碼都是admin(上面的security配的)


7、自定義服務(wù)狀態(tài)變化后,提醒功能
import de.codecentric.boot.admin.server.domain.entities.Instance;
import de.codecentric.boot.admin.server.domain.entities.InstanceRepository;
import de.codecentric.boot.admin.server.domain.events.InstanceEvent;
import de.codecentric.boot.admin.server.notify.AbstractStatusChangeNotifier;
import org.springframework.stereotype.Component;
import reactor.core.publisher.Mono;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
@Component
public class WarnNotifier extends AbstractStatusChangeNotifier {
public WarnNotifier(InstanceRepository repository) {
super(repository);
}
@Override
protected Mono<Void> doNotify(InstanceEvent event, Instance instance) {
// 服務(wù)名
String serviceName = instance.getRegistration().getName();
// 服務(wù)url
String serviceUrl = instance.getRegistration().getServiceUrl();
// 服務(wù)狀態(tài)
String status = instance.getStatusInfo().getStatus();
// 詳情
Map<String, Object> details = instance.getStatusInfo().getDetails();
// 當(dāng)前服務(wù)掉線時(shí)間
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = simpleDateFormat.format(date);
// 拼接短信內(nèi)容
StringBuilder str = new StringBuilder();
str.append("服務(wù)名:【" + serviceName + "】 \r\n");
str.append("服務(wù)狀態(tài):【"+ status +"】 \r\n");
str.append("地址:【" + serviceUrl + "】\r\n");
str.append("時(shí)間:" + format +"\r\n");
return Mono.fromRunnable(()->{
// 這里寫(xiě)你服務(wù)發(fā)生改變時(shí),要提醒的方法
// 如服務(wù)掉線了,就發(fā)送短信告知
});
}
}
8、服務(wù)端配置
| 配置 | 默認(rèn)參數(shù) | 解釋 |
|---|---|---|
| spring.boot.admin.context-path | / | server端的訪問(wèn)路徑 |
| spring.boot.admin.monitor.status-interval | 10,000ms | 檢查實(shí)例狀態(tài)的時(shí)間間隔。 |



2、客戶端
被監(jiān)控的服務(wù),需要連接服務(wù)端
1、依賴
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>2、yml配置
server:
port: 9222
spring:
application:
name: client
boot:
admin:
client: # spring-boot-admin 客戶端配置
url: http://localhost:9111 #服務(wù)端連接地址
username: admin # 服務(wù)端賬號(hào)
password: admin # 服務(wù)端密碼
instance:
prefer-ip: true # 使用ip注冊(cè)
# 服務(wù)端點(diǎn)詳細(xì)監(jiān)控信息
management:
trace:
http:
enabled: true
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: always
logfile: # 日志(想在線看日志才配)
external-file: ./logs/client-info.log # 日志所在路徑3、啟動(dòng)項(xiàng)目
此時(shí)客戶端就已經(jīng)注冊(cè)進(jìn)來(lái)了。

點(diǎn)擊可查看更多信息:

點(diǎn)擊日志也可在線查看日志:

此時(shí),如果我們服務(wù)掉線了,就會(huì)觸發(fā)服務(wù)端的預(yù)警功能,告知我們。
4、客戶端配置


3、微服務(wù)
除特別說(shuō)明外,都是在上面的基礎(chǔ)上添加
3.1、服務(wù)端
1、添加依賴
<!-- nacos注冊(cè)中心配置-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>2、yml添加配置
spring:
cloud:
nacos:
discovery:
server-addr: localhost:8848
# namespace: # 要和你的服務(wù)同一命名空間3.2、客戶端
客戶端不用引spring-boot-admin-starter-clien依賴,springbootadmin會(huì)去服務(wù)列表里找
如果服務(wù)有配置context-path路徑,則需添加yml配置
spring:
cloud:
nacos:
discovery:
metadata: # minitor監(jiān)控的context-path配置
management:
context-path: ${server.servlet.context-path}/actuator4、我的微服務(wù)預(yù)警發(fā)送其他服務(wù)狀態(tài)信息思路
問(wèn)題:由于該組件重寫(xiě)狀態(tài)發(fā)生變化時(shí)的接口,沒(méi)有提供其他服務(wù)的狀態(tài)信息,只有本服務(wù),但是如果是集群、多實(shí)例,我又想知道,該服務(wù)其他實(shí)例或者其他的服務(wù)狀態(tài)信息,是否存活。
結(jié)果展示:如我的預(yù)警內(nèi)容,發(fā)送當(dāng)前服務(wù)狀態(tài)、當(dāng)前服務(wù)剩余健康實(shí)例、其他健康服務(wù)數(shù)等等

到此這篇關(guān)于Spring boot admin 服務(wù)監(jiān)控利器詳解的文章就介紹到這了,更多相關(guān)Spring boot admin 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBootAdmin+actuator實(shí)現(xiàn)服務(wù)監(jiān)控
- Java SpringBoot快速集成SpringBootAdmin管控臺(tái)監(jiān)控服務(wù)詳解
- 一文搞懂并學(xué)會(huì)使用SpringBoot的Actuator運(yùn)行狀態(tài)監(jiān)控組件的詳細(xì)教程
- Spring?Boot?+?Canal?實(shí)現(xiàn)數(shù)據(jù)庫(kù)實(shí)時(shí)監(jiān)控
- SpringBoot整合ip2region實(shí)現(xiàn)使用ip監(jiān)控用戶訪問(wèn)城市的詳細(xì)過(guò)程
- Springboot輕量級(jí)的監(jiān)控組件SpringbootAdmin
相關(guān)文章
使用Springboot整合GridFS實(shí)現(xiàn)文件操作
這篇文章主要介紹了使用Springboot整合GridFS實(shí)現(xiàn)文件操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
IDEA2020.1構(gòu)建Spring5.2.x源碼的方法
這篇文章主要介紹了IDEA2020.1構(gòu)建Spring5.2.x源碼的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
詳解Spring 攔截器流程及多個(gè)攔截器的執(zhí)行順序
這篇文章主要介紹了Spring 攔截器流程及多個(gè)攔截器的執(zhí)行順序的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用Spring框架,感興趣的朋友可以了解下2021-05-05
Java并發(fā)編程示例(二):獲取和設(shè)置線程信息
這篇文章主要介紹了Java并發(fā)編程示例(二):獲取和設(shè)置線程信息,本文是系列文章的第二篇,本文著重講解Thread類(lèi)的幾個(gè)重要屬性,需要的朋友可以參考下2014-12-12
Spring Boot中配置文件application.properties使用
這篇文章主要介紹了Spring Boot中配置文件application.properties使用及spring boot讀取application.properties文件的方式,需要的朋友參考下吧2018-01-01
mybatis的association傳遞參數(shù)問(wèn)題示例
這篇文章主要介紹了mybatis的association傳遞參數(shù)問(wèn)題,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-12-12

