Spring Boot Admin教程
Spring Boot Admin是在Spring Boot Actuator端點上監控和管理具有良好UI的Spring Boot應用程式。
Actuator是一個Spring Boot模組,它為您的應用程式添加了REST / JMX端點,因此您可以在生產中輕鬆監控和管理它。端點提供執行狀況檢查,度量標準監視,日誌訪問,執行緒轉儲,堆轉儲,環境資訊等。
Actuator功能強大且功能強大,使用其他應用程式使用端點非常簡單方便 - 您只需進行簡單的REST呼叫即可。當人使用它時,它並不是那麼友好。對於人類而言,擁有一個可用於瀏覽所有監控資料和管理應用程式的良好使用者介面會更方便。這實際上是Spring Boot Admin所做的。它為執行器端點提供了一個漂亮的UI層,頂部有一些額外的功能。
Spring Boot Admin不是Spring團隊提供的核心模組,它是由一個名為ofollow,noindex" target="_blank">Codecentric 的公司建立的。不過,程式碼在Github 上是公開的,而且是免費的。
客戶端和伺服器
與Actuator不同,Spring Boot Admin實際上分為兩部分 - 客戶端和伺服器。
伺服器部分包含管理員使用者介面,並獨立於受監視的應用程式執行。客戶端部分位於受監視的應用程式中,該應用程式向管理伺服器部分註冊。
這樣,即使我們的應用程式關閉或無法正常工作,監視伺服器仍然正常執行。現在假設您有多個應用程式(例如Spring Boot微服務),並且每個應用程式都可以在多個例項中執行。使用傳統的Actuator監控,這很難,因為您需要單獨訪問每個例項,並且需要跟蹤有多少例項和執行的位置。
使用Spring Boot Admin,受監視應用程式(Client)的每個例項在啟動後都會向Server註冊。然後你有一個點(管理伺服器),你可以在那裡檢查它們。
伺服器設定
我們首先來看看如何設定Spring Boot Admin Server。讓我們從一個全新的Spring Boot應用程式開始。您可以使用Spring Initializr 輕鬆建立一個。務必包含該web模組。
建立專案後,我們首先需要新增Spring Boot Admin Server依賴項:
<dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-server</artifactId> <version>2.1.0</version> </dependency>
請注意,即使專案不是由Pivotal建立的,您也可以在Spring Initializr中找到Spring Boot Admin的客戶端和伺服器模組。接下來,我們需要通過以下方式註釋我們的主應用程式類來啟用管理伺服器@EnableAdminServer:
@SpringBootApplication @EnableAdminServer <b>public</b> <b>class</b> SpringBootAdminServerApplication { <b>public</b> <b>static</b> <b>void</b> main(String[] args) { SpringApplication.run(SpringBootAdminServerApplication.<b>class</b>, args); } }
就是這樣。現在您可以執行您的應用程式,開啟http://localhost:8080/,伺服器已經執行,但尚未註冊任何客戶端
客戶端安裝
與伺服器設定相同,第一步是為現有應用程式新增適當的依賴關係:
<dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-client</artifactId> <version>2.1.0</version> </dependency>
然後,您需要定義執行管理伺服器的URL。將此行新增到您的application.properties:
spring.boot.admin.client.url=http://localhost:8080
新增Actuator
現在您應該能夠執行客戶端和伺服器。只需確保沒有埠衝突,因為預設情況下兩個應用程式都使用8080.出於測試目的,您可以application.properties中設定server.port=0,這樣您的客戶端將在啟動時使用隨機埠。這樣,您可以測試啟動在不同埠上執行的多個例項。
當您開啟管理伺服器UI時,您應該看到您的應用程式。單擊應用程式名稱時,應顯示包含應用程式詳細資訊的頁面。
請記住,Spring Boot Admin在引擎蓋下使用了Actuator端點。幸運的是,您只需新增一個簡單的依賴項,自動配置就可以完成剩下的工作。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
但是,預設情況下,Actuator不會公開大多數端點。您需要更改配置application.properties以公開它們:
management.endpoints.web.exposure.include=*
暴露Actuator端點後,您應該在Admin介面中看到更多資訊
安全
現在,當一切都在執行時,我們應該確保我們的Actuator端點和管理UI不會公開給所有人。
1.客戶端安全
如果還沒有使用Spring Security,則需要先新增依賴項,預設情況下Actuator端點是安全的,並且您的管理伺服器將無法訪問它們。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
出於測試目的,您可以暫時禁用Actuator端點安全性management.security.enabled=false。但是,我們確實希望啟用安全性。如果您使用的是基本身份驗證,則只需在屬性檔案中提供使用者名稱和密碼即可。管理伺服器將使用這些憑據對客戶端的Actuator端點進行身份驗證:
spring.boot.admin.client.instance.metadata.user.name=joe spring.boot.admin.client.instance.metadata.user.password=my-secret-password
預設情況下,如果沒有另外配置,Spring Boot會在user每次啟動應用程式時使用預設使用者和自動生成的密碼。您可以在啟動期間在控制檯中檢查密碼。如果您想明確提供應用程式所需的使用者名稱和密碼,可以在屬性中定義它:
spring.security.user.name=joe
spring.security.user.password=my-secret-password
2.伺服器安全
與客戶端相同,我們需要新增Spring Security依賴項:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
現在,讓我們配置登入管理伺服器所需的使用者名稱和密碼application.properties:
spring.security.user.name=admin
spring.security.user.password=admin-password
現在在您的客戶端中,您還需要新增這些憑據,否則它將無法向伺服器註冊:
spring.boot.admin.client.username=admin
spring.boot.admin.client.password=admin-password
現在回到伺服器部分。我們需要的最後一件事是新增Spring Security配置以保護Admin使用者介面:
@Configuration <b>public</b> <b>class</b> SecurityConfig <b>extends</b> WebSecurityConfigurerAdapter { @Override <b>protected</b> <b>void</b> configure(HttpSecurity http) throws Exception { SavedRequestAwareAuthenticationSuccessHandler successHandler = <b>new</b> SavedRequestAwareAuthenticationSuccessHandler(); successHandler.setTargetUrlParameter(<font>"redirectTo"</font><font>); successHandler.setDefaultTargetUrl(</font><font>"/"</font><font>); http.authorizeRequests() .antMatchers(</font><font>"/assets/**"</font><font>).permitAll() .antMatchers(</font><font>"/login"</font><font>).permitAll() .anyRequest().authenticated().and() .formLogin().loginPage(</font><font>"/login"</font><font>) .successHandler(successHandler).and() .logout().logoutUrl(</font><font>"/logout"</font><font>).and() .httpBasic().and() .csrf() .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()) .ignoringAntMatchers( </font><font>"/instances"</font><font>, </font><font>"/actuator/**"</font><font> ); } } </font>
它的作用是,它僅將管理UI限制為使用HTTP基本身份驗證和通過表單登入的經過身份驗證的使用者。登入頁面本身和靜態UI資源(javascript,HTML,CSS)是公共的。否則,您無法登入。然後有一個基於cookie的跨站點請求偽造保護。您可以看到CSRF保護中忽略了某些路徑 - 這是因為管理伺服器當前缺乏適當的支援 。
現在重啟後,您應該會看到一個很好的登入螢幕來保護您的管理伺服器
雲發現
Spring Boot Admin客戶端不是向伺服器註冊應用程式的唯一方法。Admin Server還支援Spring Cloud Service Discovery。您可以在官方文件 或Spring Boot Discovery中使用Spring Boot Admin 文章閱讀更多內容。
通知
一旦您進行了監控,您希望在出現問題時收到通知。好訊息是Spring Admin提供了各種各樣的通知選項。
如果您是第一次訪問“管理伺服器”頁面,它會要求您在計算機上顯示推送通知的許可權。每當出現問題時,您都會收到一條彈出訊息。
其他通知需要簡單的配置。只要在application.properties提供一些輸入配置。目前支援的服務包括:
配置電子郵件通知
如果要啟用電子郵件通知,則需要將Spring電子郵件依賴項新增到伺服器部分:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
然後,您需要定義SMTP伺服器,該伺服器將用於傳送電子郵件通知和憑據。更新application.properties管理郵件伺服器。
spring.mail.host=smtp.foo.com
spring.mail.username=smtp-server-user
spring.mail.password=smtp-server-password
然後,您需要定義收件人和發件人。
# Sender email address spring.boot.admin.notify.mail.from=<font>"Spring Boot Admin <[email protected]>"</font><font> # Comma-delimited list of recipient email addresses [email protected],[email protected] # Comma-delimited list of carbon copy recipient email addresses [email protected] </font>