Spring?boot?admin?服務(wù)監(jiān)控利器詳解
一、簡介
用于對 Spring Boot 應(yīng)用的管理和監(jiān)控。
可以用來監(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 才能讓應(yīng)用被監(jiān)控。
在 SpringCloud 項(xiàng)目中,spring-boot-admin-server 是直接從注冊中心抓取應(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,線程信息
- 可視化的查看日志以及下載日志文件
- 動態(tài)切換日志級別
- Http 請求信息跟蹤
二、搭建
1、服務(wù)端
需先搭建服務(wù)端,監(jiān)控服務(wù),被監(jiān)控的服務(wù)連接過來即可,開箱即用。
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、啟動類上開啟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 { // 登錄成功處理類 SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler(); successHandler.setTargetUrlParameter("redirectTo"); successHandler.setDefaultTargetUrl(adminContextPath + "/"); http.authorizeRequests() //靜態(tài)文件允許訪問 .antMatchers(adminContextPath + "/assets/**").permitAll() //登錄頁面允許訪問 .antMatchers(adminContextPath + "/login", "/css/**", "/js/**", "/image/*").permitAll() //其他所有請求需要登錄 .anyRequest().authenticated() .and() //登錄頁面配置,用于替換security默認(rèn)頁面 .formLogin().loginPage(adminContextPath + "/login").successHandler(successHandler).and() //登出頁面配置,用于替換security默認(rèn)頁面 .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ā)送請求的超時(shí)時(shí)間 default-timeout: 20000 security: # 設(shè)置賬號密碼 user: name: admin password: admin # 服務(wù)端點(diǎn)詳細(xì)監(jiān)控信息 management: trace: http: enabled: true endpoints: web: exposure: include: "*" endpoint: health: show-details: always
6、啟動項(xiàng)目
訪問 http://ip:端口
,
如我的http://localhost:9111,賬號密碼都是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(()->{ // 這里寫你服務(wù)發(fā)生改變時(shí),要提醒的方法 // 如服務(wù)掉線了,就發(fā)送短信告知 }); } }
8、服務(wù)端配置
配置 | 默認(rèn)參數(shù) | 解釋 |
---|---|---|
spring.boot.admin.context-path | / | server端的訪問路徑 |
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ù)端賬號 password: admin # 服務(wù)端密碼 instance: prefer-ip: true # 使用ip注冊 # 服務(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、啟動項(xiàng)目
此時(shí)客戶端就已經(jīng)注冊進(jìn)來了。
點(diǎn)擊可查看更多信息:
點(diǎn)擊日志也可在線查看日志:
此時(shí),如果我們服務(wù)掉線了,就會觸發(fā)服務(wù)端的預(yù)警功能,告知我們。
4、客戶端配置
3、微服務(wù)
除特別說明外,都是在上面的基礎(chǔ)上添加
3.1、服務(wù)端
1、添加依賴
<!-- nacos注冊中心配置--> <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會去服務(wù)列表里找
如果服務(wù)有配置context-path路徑,則需添加yml配置
spring: cloud: nacos: discovery: metadata: # minitor監(jiān)控的context-path配置 management: context-path: ${server.servlet.context-path}/actuator
4、我的微服務(wù)預(yù)警發(fā)送其他服務(wù)狀態(tài)信息思路
問題:由于該組件重寫狀態(tài)發(fā)生變化時(shí)的接口,沒有提供其他服務(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBootAdmin+actuator實(shí)現(xiàn)服務(wù)監(jiān)控
- Java SpringBoot快速集成SpringBootAdmin管控臺監(jiān)控服務(wù)詳解
- 一文搞懂并學(xué)會使用SpringBoot的Actuator運(yùn)行狀態(tài)監(jiān)控組件的詳細(xì)教程
- Spring?Boot?+?Canal?實(shí)現(xiàn)數(shù)據(jù)庫實(shí)時(shí)監(jiān)控
- SpringBoot整合ip2region實(shí)現(xiàn)使用ip監(jiān)控用戶訪問城市的詳細(xì)過程
- Springboot輕量級的監(jiān)控組件SpringbootAdmin
相關(guān)文章
Spring Boot 2.0 設(shè)置網(wǎng)站默認(rèn)首頁的實(shí)現(xiàn)代碼
這篇文章主要介紹了Spring Boot 2.0 設(shè)置網(wǎng)站默認(rèn)首頁的實(shí)現(xiàn)代碼,需要的朋友可以參考下2018-04-04java設(shè)計(jì)模式之橋接模式(Bridge)
這篇文章主要為大家詳細(xì)介紹了java設(shè)計(jì)模式之橋接模式Bridge,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01Spring中@ConditionalOnProperty注解的作用詳解
這篇文章主要介紹了Spring中@ConditionalOnProperty注解的作用詳解,@ConditionalOnProperty注解主要是用來判斷配置文件中的內(nèi)容來決定配置類是否生效用的,如果條件不匹配,則配置類不生效,需要的朋友可以參考下2024-01-01Spring Data JPA 之 JpaRepository的使用
這篇文章主要介紹了Spring Data JPA 之 JpaRepository的使用方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02Java RSA加密解密實(shí)現(xiàn)方法分析【附BASE64 jar包下載】
這篇文章主要介紹了Java RSA加密解密實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了java基于第三方類庫javabase64-1.3.1.jar實(shí)現(xiàn)RSA加密解密功能的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-10-10SpringCloud 2020-Ribbon負(fù)載均衡服務(wù)調(diào)用的實(shí)現(xiàn)
這篇文章主要介紹了SpringCloud 2020-Ribbon負(fù)載均衡服務(wù)調(diào)用的實(shí)現(xiàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03JAVA新手小白學(xué)正則表達(dá)式、包裝類、自動裝箱/自動拆箱以及BigDecimal
這篇文章主要給大家介紹了關(guān)于JAVA新手小白學(xué)正則表達(dá)式、包裝類、自動裝箱/自動拆箱以及BigDecimal的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-03-03詳解spring Boot 集成 Thymeleaf模板引擎實(shí)例
本篇文章主要介紹了spring Boot 集成 Thymeleaf模板引擎實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09