如何用Springboot Admin監(jiān)控你的微服務(wù)應(yīng)用
1 簡介
目前,微服務(wù)大行其道,各大小公司爭相學(xué)習(xí)模仿,把單體應(yīng)用拆得七零八落。服務(wù)多了,運(yùn)行的實(shí)例多了,給運(yùn)維人員的壓力就更大了。如果有十幾個(gè)應(yīng)用,單單做Health Check就已經(jīng)夠費(fèi)時(shí)間的了。聰明的Springboot提供了Actuator接口,可以非常好獲得應(yīng)用的內(nèi)部信息,然而針對(duì)數(shù)量龐大的服務(wù)卻無能為力。
得益于開源社區(qū)的力量,我們有了Springboot Admin。它能對(duì)注冊(cè)于服務(wù)發(fā)現(xiàn)的所有應(yīng)用監(jiān)控起來,功能包括健康檢查、JVM內(nèi)存、INFO信息、獲得線程棧和堆棧信息、提醒(郵件、Slack、釘釘、自定義...)等。總之,它提供了非常豐富的監(jiān)控功能,減輕運(yùn)維人員的工作任務(wù)。
目前Springboot Admin(后面簡稱SBA)的最新版本為2.2.0,本文演示將使用該版本。
2 兩種監(jiān)控模式
使用SBA監(jiān)控Client有兩種模式,一種是在Client端引入spring-boot-admin-starter-client依賴,配置好Server的地址信息就可以了。另一種模式是將所有Client端注冊(cè)到服務(wù)發(fā)現(xiàn)(Eureka)組件中去,同時(shí)把Server端也注冊(cè),這樣Server端就可以監(jiān)控所有Client端了。
第二種模式是更方便的,不用對(duì)Client都添加依賴,后面的例子使用第二種模式。
服務(wù)端需要添加SBA的依賴和Eureka Client的依賴,如下:
<dependencies> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-server</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> </dependencies>
配置文件配置信息如下:
server.port=9000 spring.application.name=admin-monitor-service eureka.client.service-url.defaultZone=http://localhost:8761/eureka/ eureka.client.register-with-eureka=true eureka.client.fetch-registry=true
啟動(dòng)后就可以監(jiān)控微服務(wù)了(當(dāng)然需要Eureka和其它Client也啟動(dòng)并注冊(cè)),效果圖如下:
上圖顯示共有四個(gè)應(yīng)用受到監(jiān)控:
有一個(gè)ADMIN-MONITOR-SERVICE,即SBA本身;
有兩個(gè)DATA-SERVICE,用于數(shù)據(jù)庫操作的服務(wù);
有一個(gè)GATEWAY,是網(wǎng)關(guān)服務(wù),即Zuul。
能看到服務(wù)的名字,還能看到其版本號(hào)。
3 保護(hù)你的SBA
3.1 保護(hù)Server
現(xiàn)在SBA啟動(dòng)后直接輸入地址就可以訪問,不需要密碼登陸,這顯然是不安全的。SBA本質(zhì)也是一個(gè)Springboot的Web應(yīng)用,可以用Spring Security來做安全和權(quán)限控制。
添加Spring Security依賴如下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
配置用戶和密碼:
spring.security.user.name=admin spring.security.user.password=admin
重啟應(yīng)用后,就需要登陸密碼才能訪問了,如下:
實(shí)際上Spring Security遠(yuǎn)比這強(qiáng)大,我們可以通過配置把更敏感的信息保護(hù)起來,如HeamDump文件的獲取,日志級(jí)別的修改等。
注意:即使做了上面的措施,也無法保證Server的安全。要想更安全地使用SBA,可以通過添加SSL,使它運(yùn)行在https之上。
3.2 保護(hù)Client
目前我們把Client的所有Endpoints都暴露出來,這也是非常危險(xiǎn)的,我們可以有選擇的暴露需要的信息。另外,我們還可以為Client設(shè)置賬戶密碼保護(hù),只有擁有了正確的賬戶密碼,Server端才可以獲得監(jiān)控權(quán)限。
4 監(jiān)控功能
SBA為我們提供豐富的監(jiān)控功能,我們選擇幾項(xiàng)展示一下。
4.1 健康檢查與細(xì)節(jié)查看
SBA會(huì)監(jiān)控服務(wù)是否健康,包括應(yīng)用及應(yīng)用的組件,如數(shù)據(jù)庫連接等。
- INFO信息
圖上還有info信息,這個(gè)是自定義配置的,非常方便,如配置代碼的版本號(hào)等。
info.author=Larry Deng info.version=1.0.3
- Beans
可以查看所有的beans信息。
- Configuration Properties
查看目前應(yīng)用使用的配置信息。
- Scheduled Tasks
查看正在使用的定時(shí)調(diào)度任務(wù)。
4.2 日志Loggers
展示了當(dāng)前的日志級(jí)別,更強(qiáng)大的是,它可以實(shí)時(shí)調(diào)整日志級(jí)別,而不用去改log4j2配置文件,也不用重啟。在有問題需要更詳細(xì)的日志的時(shí)候,非常方便。
4.3 JVM信息(線程與內(nèi)存)
可以實(shí)時(shí)地查看每個(gè)線程的狀態(tài),并且能下載Thread Dump文件,方便有故障的時(shí)候分析。同樣,還能下載Heap Dump文件,在占用內(nèi)存居高不下,還不能GC時(shí),可以用來分析。
4.4 其它
Mappings能查看Endpoints的路徑和方法及返回類型等。
Caches可以查看應(yīng)用所使用的緩存,并能操作,如清空緩存。
5 強(qiáng)大的提醒功能
雖然SBA提供了強(qiáng)大的監(jiān)控功能,但要人工一直盯著屏幕就太低效了。為此,SBA提供了強(qiáng)大的提醒功能,能夠在發(fā)生服務(wù)狀態(tài)變更的時(shí)候發(fā)出告警。支持的提醒功能有:
- PagerDuty
- OpsGenie
- Hipchat
- Slack
- Let's Chat
- Telegram
等。
同時(shí)還支持自定義,這樣可以整合更豐富的提醒,如短信、電話等。
5.1 郵件提醒
為了不讓篇幅過大,下面只展示一下郵件提醒功能的使用,其它可參考用戶手冊(cè)。
添加郵件依賴:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
配置參數(shù):
spring.mail.host=smtp.example.com spring.mail.username=smtp_user spring.mail.password=smtp_password spring.boot.admin.notify.mail.to=admin@example.com
郵件提醒其它配置項(xiàng):
5.2 自定義提醒
自定義提醒很簡單,只要實(shí)現(xiàn)Notifier接口就行了,建議直接繼承AbstractEventNotifier
或AbstractStatusChangeNotifier
這兩個(gè)類。邏輯在方法doNotify
中實(shí)現(xiàn)。
public class CustomNotifier extends AbstractEventNotifier { private static final Logger LOGGER = LoggerFactory.getLogger(LoggingNotifier.class); 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()); } else { LOGGER.info("Instance {} ({}) {}", instance.getRegistration().getName(), event.getInstance(), event.getType()); } }); } }
6 總結(jié)
SBA非常強(qiáng)大,一篇文章難以完備,大家可以參考用戶手冊(cè)。
另外,服務(wù)發(fā)現(xiàn)不一定要使用Eureka,如Nacos也是支持的。只使用SBA也是不夠的,對(duì)于監(jiān)控日志,可以使用ELK,這是題外話了,以后有空再整理吧。
以上就是如何用Springboot Admin監(jiān)控你的微服務(wù)應(yīng)用的詳細(xì)內(nèi)容,更多關(guān)于Springboot Admin監(jiān)控微服務(wù)應(yīng)用的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- SpringBoot整合Spring?Boot?Admin實(shí)現(xiàn)服務(wù)監(jiān)控的方法
- SpringBoot-Admin實(shí)現(xiàn)微服務(wù)監(jiān)控+健康檢查+釘釘告警
- 詳解用Spring Boot Admin來監(jiān)控我們的微服務(wù)
- 使用spring-boot-admin對(duì)spring-boot服務(wù)進(jìn)行監(jiān)控的實(shí)現(xiàn)方法
- 詳解Spring boot Admin 使用eureka監(jiān)控服務(wù)
- 詳解Spring Boot Admin監(jiān)控服務(wù)上下線郵件通知
- Spring?boot?admin?服務(wù)監(jiān)控利器詳解
相關(guān)文章
深入Parquet文件格式設(shè)計(jì)原理及實(shí)現(xiàn)細(xì)節(jié)
這篇文章主要介紹了深入Parquet文件格式設(shè)計(jì)原理及實(shí)現(xiàn)細(xì)節(jié),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08如何基于ssm框架實(shí)現(xiàn)springmvc攔截器
這篇文章主要介紹了如何基于ssm框架實(shí)現(xiàn)springmvc攔截器,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07mybatis如何使用注解實(shí)現(xiàn)一對(duì)多關(guān)聯(lián)查詢
這篇文章主要介紹了mybatis如何使用注解實(shí)現(xiàn)一對(duì)多關(guān)聯(lián)查詢的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07使用IDEA工具配置和運(yùn)行vue項(xiàng)目及遇到的坑
這篇文章主要介紹了使用IDEA工具配置和運(yùn)行vue項(xiàng)目及遇到的坑,需要的朋友可以參考下2018-09-09Java Calendar類常用示例_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
從JDK1.1版本開始,在處理日期和時(shí)間時(shí),系統(tǒng)推薦使用Calendar類進(jìn)行實(shí)現(xiàn)。接下來通過實(shí)例代碼給大家詳細(xì)介紹Java Calendar類相關(guān)知識(shí),需要的朋友參考下吧2017-04-04org.hibernate.QueryTimeoutException查詢超時(shí)的解決方法
本文主要介紹了org.hibernate.QueryTimeoutException查詢超時(shí)的解決方法,這通常發(fā)生在數(shù)據(jù)庫響應(yīng)緩慢、查詢?cè)O(shè)計(jì)不合理或系統(tǒng)資源緊張等情況下,感興趣的可以了解一下2024-05-05解決Spring Security的權(quán)限配置不生效問題
這篇文章主要介紹了解決Spring Security的權(quán)限配置不生效問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03