摘要:端項目依賴添加是為了使應用處于啟動狀態,會自動添加相關依賴。接下來以作為服務發現的示例來進行演示,實際上也可以使用或者。最后是一個用方式監聽的使用連接端
【前情提要】Spring Boot Actuator 提供了對單個 Spring Boot 應用的監控,信息包含應用狀態、內存、線程、堆棧等,比較全面的監控了 Spring Boot 應用的整個生命周期。但是這樣監控也有一些問題:第一,所有的監控都需要調用固定的接口來查看,如果全面查看應用狀態需要調用很多接口,并且接口返回的 JSON 信息不方便運營人員理解;第二,如果 Spring Boot 應用集群非常大,每個應用都需要調用不同的接口來查看監控信息,操作非常繁瑣低效。在這樣的背景下,就誕生了另外一個開源軟件:Spring Boot Admin。
壹、什么是Spring Boot AdminSpring Boot Admin 是一個管理和監控 Spring Boot 應用程序的開源軟件,每個應用都認為是一個客戶端,通過 HTTP 或者使用 Eureka 注冊到 admin server 中進行展示,Spring Boot Admin UI 部分使用 Vue.js 將數據展示在前端。
Spring Boot Admin 是一個針對 Spring Boot 的 Actuator 接口進行 UI 美化封裝的監控工具,它可以在列表中瀏覽所有被監控 spring-boot 項目的基本信息、詳細的 Health 信息、內存信息、JVM 信息、垃圾回收信息、各種配置信息(比如數據源、緩存列表和命中率)等,還可以直接修改 logger 的 level。
值得注意的是 Spring Boot Admin 并不是 Spring Boot 官方出品的開源軟件,但是其軟件質量和使用廣泛度都非常的高,并且 Spring Boot Admin 會及時隨著 Spring Boot 的更新而更新,當 Spring Boot 推出 2.X 版本時 Spring Boot Admin 也及時進行了更新。
Spring Boot Admin 2.x 不僅是跟著支持了 Spring Boot 2.x,還在 1.x 的基礎上進行了大量的更新和優化:
重新規劃了項目依賴包,讓項目中更方便的集成 Spring Boot Admin 1.x 前端使用了 Angular.js,2.x 使用 Vue 對界面進行了重寫,界面美觀度提升幅度非常高 提供了支持 Spring Cloud 的組件 其他更新,具體參考:Changes with 2.x
Spring Boot Admin 分為服務端和客戶端,服務端其實就是一個監控后臺用來匯總展示所有的監控信息,客戶端就是我們的應用,使用時需要先啟動服務端,在啟動客戶端的時候打開 Actuator 的接口,并指向服務端的地址,這樣服務端會定時讀取相關信息以達到監控的目的。
接下來演示如何使用 Spring Boot Admin 對 Spring Boot 應用進行監控。
貳、監控單體應用先給大家展示如何使用 Spring Boot Admin 監控單個 Spring Boot 應用。
Admin Server 端 項目依賴de.codecentric spring-boot-admin-starter-server 2.1.0 org.springframework.boot spring-boot-starter-web
2.x 下只需要添加此一個包即可,其他組件會自動依賴添加。
配置文件server.port=8000
服務端設置端口為:8000。
啟動類@EnableAdminServer @SpringBootApplication public class AdminServerApplication { public static void main(String[] args) { SpringApplication.run(AdminServerApplication.class, args); } }
完成上面三步之后,啟動服務端,訪問網址 http://localhost:8000 可以看到以下界面:
因為剛啟動沒有應用,因此顯示:No applications registered.,同時根據上圖也可以看出 applications 頁面會展示項目的應用數、實例數和狀態三個信息。
接下來我們構建一個客戶端,并注冊到服務端。
Admin Client 端 項目依賴de.codecentric spring-boot-admin-starter-client 2.1.0 org.springframework.boot spring-boot-starter-web
添加 spring-boot-starter-web 是為了使應用處于啟動狀態,spring-boot-admin-starter-client 會自動添加 Actuator 相關依賴。
配置文件server.port=8001 spring.application.name=Admin Client spring.boot.admin.client.url=http://localhost:8000 management.endpoints.web.exposure.include=*
spring.boot.admin.client.url 配置 Admin Server 的地址 management.endpoints.web.exposure.include=* 打開客戶端 Actuator 的監控啟動類
@SpringBootApplication public class AdminClientApplication { public static void main(String[] args) { SpringApplication.run(AdminClientApplication.class, args); } }
配置完成之后,啟動 Client 端,Admin 服務端會自動檢查到客戶端的變化,并展示其應用:
頁面會展示被監控的服務列表,點擊項目名稱會進入此應用的詳細監控信息:
通過上圖可以看出,Spring Boot Admin 以圖形化的形式展示了應用的各項信息,這些信息大多都來自于 Spring Boot Actuator 提供的接口。利用圖形化的形式很容易看到應用的各項參數變化,甚至有些頁面還可以進行一些操作,比如改變打印日志的級別等。
如果我們使用的是單個 Spring Boot 應用,就需要在每一個被監控的應用中配置 Admin Server 的地址信息;如果應用都注冊在 Eureka 中就不需要再對每個應用進行配置,Spring Boot Admin 會自動從注冊中心抓取應用的相關信息。
如果使用了 Spring Cloud 的服務發現功能,就不需要再多帶帶添加 Admin Client 客戶端,僅僅需要 Spring Boot Server,其他內容會自動進行配置。
接下來以 Eureka 作為服務發現的示例來進行演示,實際上也可以使用 Consul 或者 Zookeeper。
(1)服務端和客戶端添加 spring-cloud-starter-eureka 到包依賴中
org.springframework.cloud spring-cloud-starter-netflix-eureka-client
(2)啟動類添加注解
@Configuration @EnableAutoConfiguration @EnableDiscoveryClient @EnableAdminServer public class SpringBootAdminApplication { public static void main(String[] args) { SpringApplication.run(SpringBootAdminApplication.class, args); } @Configuration public static class SecurityPermitAllConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests().anyRequest().permitAll() .and().csrf().disable(); } } }
使用類 SecurityPermitAllConfig 關閉了安全驗證。
(3)在客戶端中配置服務發現的地址
eureka: instance: leaseRenewalIntervalInSeconds: 10 health-check-url-path: /actuator/health metadata-map: startup: ${random.int} #needed to trigger info and endpoint update after restart client: registryFetchIntervalSeconds: 5 serviceUrl: defaultZone: ${EUREKA_SERVICE_URL:http://localhost:8761}/eureka/ management: endpoints: web: exposure: include: "*" endpoint: health: show-details: ALWAYS
Spring Cloud 提供了示例代碼可以參考這里:spring-boot-admin-sample-eureka。
重啟啟動服務端和客戶端之后,訪問服務端的相關地址就可以看到監控頁面了。
肆、安全控制Spring Boot Admin 后臺有很多的敏感信息和操作,如果公司不做權限控制可能會影響到公司系統的安全性。Spring Boot Admin 也考慮到了這個因素,可以利用前面的 Spring Security 做安全訪問控制,在 spring-boot-admin-server 上進行改造。
(1)添加 Spring Boot Security 依賴包
org.springframework.boot spring-boot-starter-security
(2)添加安全訪問控制
和前面的 Security 配置一樣,給項目添加訪問控制。
@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 { // @formatter:off SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler(); successHandler.setTargetUrlParameter("redirectTo"); successHandler.setDefaultTargetUrl(adminContextPath + "/"); http.authorizeRequests() .antMatchers(adminContextPath + "/assets/**").permitAll() .antMatchers(adminContextPath + "/login").permitAll() .anyRequest().authenticated() .and() .formLogin().loginPage(adminContextPath + "/login").successHandler(successHandler).and() .logout().logoutUrl(adminContextPath + "/logout").and() .httpBasic().and() .csrf() .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()) .ignoringAntMatchers( adminContextPath + "/instances", adminContextPath + "/actuator/**" ); } } antMatchers(adminContextPath + "/assets/**").permitAll() 所有靜態內容不做安全驗證 anyRequest().authenticated() 其他請求均需要驗證 formLogin() 配置登錄 logout() 配置登出 httpBasic() 支持 HTTP,引導 Spring Boot Admin 客戶端注冊 csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()) 打開跨站點請求保護 Cookies adminContextPath + "/instances" 取消跨站點請求保護 "/instances",方便 Admin 客戶端注冊 adminContextPath + "/actuator/** " 取消跨站點請求保護 "/actuator/**",可以讓 Admin 監控到 Actuator 的相關接口
然后可以給 security 設置一個用戶名和密碼:
spring.security.user.name=admin spring.security.user.password=admin
配置完成之后重啟 Admin Server 端,訪問網址 http://localhost:8000 就會發現需要一個登錄的用戶名和密碼了。
使用剛才設置的用戶名和密碼登錄之后,發現注冊到 Server 端的服務數成為 0 了,這是客戶端統一也需要配置帳戶名和密碼信息。
spring.security.user.name=admin spring.security.user.password=admin
配置完成之后重新啟動,在服務端就又可以查看監控到的應用了。
伍、其他方式如果 Actuator 的端口被使用 HTTP 認證保護,那么 Spring Boot Admin Server 訪問的時候需要憑證信息,這時候可以使用 metadata 的方式對賬戶和密碼進行配置。
直接使用客戶端注冊的方式:spring.boot.admin.client: url: http://localhost:8080 instance: metadata: user.name: ${spring.security.user.name} user.password: ${spring.security.user.password}使用 Eureka 進行注冊的方式:
eureka: instance: metadata-map: user.name: ${spring.security.user.name} user.password: ${spring.security.user.password}
Eureka 中的 metadataMap 是專門用來存放一些自定義的數據,當注冊中心或者其他服務需要此服務的某些配置時可以在 metadataMap 里取。實際上,每個 instance 都有各自的 metadataMap,map 中存放著需要用到的屬性。例如,上面配置中的 eureka.instance.metadata-map.user.name,當這個服務成功注冊到 Eureka 上,Spring Boot Admin 就會拿到這個 instance,進而拿到 metadataMap 里的屬性,然后放入請求頭,向此服務發送請求,訪問此服務的 Actuator 開放的端點。
陸、郵件告警Spring Boot Admin 將微服務中所有應用信息在后臺進行了展示,非常方便我們對微服務整體的監控和治理。但是我們的運營人員也不可能一天 24 小時盯著監控后臺,因此如果服務有異常的時候,有對應的郵件告警就太好了,其實 Spring Boot Admin 也給出了支持。
我們對上面的示例項目 spring-boot-admin-server 進行改造。
添加依賴增加了郵件發送的 starter 包。 配置文件org.springframework.boot spring-boot-starter-mail
spring.mail.host=smtp.qq.com spring.mail.username=xxx@qq.com spring.mail.password=xxx spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=true spring.mail.properties.mail.smtp.starttls.required=true spring.boot.admin.notify.mail.from=yyyy@qq.com spring.boot.admin.notify.mail.to=zzz@qq.com
在配置文件中添加郵件發送相關信息:郵件的發送者、接受者、協議、移動授權碼等。
配置完成后,重新啟動項目 spring-boot-admin-server,這樣 Admin Server 就具備了郵件告警的功能,默認情況下 Admin Server 對 Eureka 中的服務上下線都進行了監控,當服務上下線的時候我們就會收到相應的告警郵件。
當然這只是最基本的郵件監控,在實際的使用過程中,需要根據情況對郵件告警內容進行自定義,比如監控堆內存的使用情況,當到達一定比例的時候進行告警等。
【寫在后面的話】Spring Boot Admin 解決了我們對大規模 Spring Boot 應用監控的需求,Spring Boot Admin 充分利用了 Actuator 開放的相關接口,采用優秀的圖形界面將這些信息進行了展示,方便我們更加直觀的查看集群中應用的狀態。Spring Boot Admin 不僅可以監控單個 Spring Boot 應用,也可以結合 Spring Cloud 監控注冊到服務中心的所有應用狀態,再結合報警系統的使用就可以隨時感知到應用的狀態變化。在實際工作中 Spring Boot Admin 是我們在后期運營中頻繁用到的一個組件,應該作為重點關注。
最后是一個用http方式監聽的demo:Spring Boot Admin使用http連接server端
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/76087.html
摘要:介紹是基于微服務基礎腳手架對于日常開發而言提供基礎權限控制,動態菜單,才用前后端分離架構,前臺采用后臺使用提供接口。對于以后開發,只需要在添加業務模塊即可,大大減少工作量。 介紹 panda是基于SpringCloud Finchley.SR1 、SpringBoot 2.x、 vue、element-ui 微服務基礎腳手架對于日常開發而言提供基礎權限控制,動態菜單,才用前后端分離架構...
摘要:指南無論你正在構建什么,這些指南都旨在讓你盡快提高工作效率使用團隊推薦的最新項目版本和技術。使用進行消息傳遞了解如何將用作消息代理。安全架構的主題指南,這些位如何組合以及它們如何與交互。使用的主題指南以及如何為應用程序創建容器鏡像。 Spring 指南 無論你正在構建什么,這些指南都旨在讓你盡快提高工作效率 — 使用Spring團隊推薦的最新Spring項目版本和技術。 入門指南 這些...
摘要:對于廣大的前端開發人員來說,網站構建本是家常便飯其中也不得不涉及到性能優化的問題。將不影響首屏的資源和當前屏幕資源不用的資源放到用戶需要時才加載,可以大大提升重要資源的顯示速度和降低總體流量按需加載會導致大量重繪,影響渲染性能。對于廣大的前端開發人員來說,網站構建本是家常便飯;其中也不得不涉及到性能優化的問題。之前也有接觸過,今天總結一下這方面的技巧,下面是我的一下認知,歡迎探討: ? Nu...
摘要:表示本次查詢使用了索引,具體來說,是使用了和上的索引,。建立索引時,或者是每執行次查詢之后,查詢優化器都會重新評估查詢計劃。上一篇文章指南使用復合索引操作符如何使用索引索引對象和數組索引基數下一篇文章指南索引類型 上一篇文章:MongoDB指南---11、使用復合索引、$操作符如何使用索引、索引對象和數組、索引基數下一篇文章:MongoDB指南---13、索引類型 使用explain...
閱讀 1307·2021-11-04 16:09
閱讀 3504·2021-10-19 11:45
閱讀 2400·2021-10-11 10:59
閱讀 1015·2021-09-23 11:21
閱讀 2766·2021-09-22 10:54
閱讀 1139·2019-08-30 15:53
閱讀 2607·2019-08-30 15:53
閱讀 3481·2019-08-30 12:57