本文是Spring Cloud專欄的第十三篇文章,瞭解前十二篇文章內容有助於更好的理解本文:html
Spring Cloud第七篇 | 聲明式服務調用Feignspringboot
Spring Boot Admin 是一個管理和監控你的 Spring Boot 應用程序的應用程序。這些應用程序經過 Spring Boot Admin Client(經過 HTTP)註冊或者使用 Spring Cloud(例如 Eureka)發現。UI只是 Spring Boot Actuator 端點上的一個 AngularJs 應用程序。
原理:Spring Boot Actuator 模塊爲監控Spring Boot 應用程序暴露的大量的管理端點[ENDPOINT],在Spring Boot Actuator的基礎上提供簡潔的可視化WEB UI,是用來管理 Spring Boot 應用程序的一個簡單的界面。
1-一、創鍵springboot admin服務端模塊(springboot-admin-server)
1-二、添加springboot admin服務端依賴
<dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-server</artifactId> <version>2.1.0</version> </dependency>
1-三、在主類上添加註解@EnableAdminServer
1-四、在application.yml文件中添加配置,而後啓動
server: port: 8788 spring: application: name: springboot-admin-server
2-一、建立springboot admin客戶端模塊(springcloud-admin-client)
2-二、添加springboot admin客戶端依賴
<dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-client</artifactId> <version>2.1.0</version>
</dependency>
2-三、在application.yml文件中添加配置,而後啓動
server: port: 8080 spring: application: name: springcloud-admin-client boot: admin: client: #springboot admin client鏈接 spring boot admin server 端點地址springboot admin client鏈接 spring boot admin server 端點地址 url: http://localhost:8788 instance: #默認使用的是主機名註冊,改成使用ip註冊 prefer-ip: true management: endpoints: web: exposure: #開放全部頁面節點 默認只開啓了health、info兩個節點 include: '*' endpoint: health: #顯示健康具體信息 默認不會顯示詳細信息 show-details: always # 利用info端點,加入版本等信息 info: versin: @project.version@ name: @project.artifactId@ group: @project.groupId@ description: @project.description@ #還能夠自定義信息 author: Coding Farmer blog: http://www.coding-farmer.cn
2-四、啓動訪問spring boot admin服務端頁面http://localhost:8788,顯示以下
3-i-一、在生產環境中,爲了數據的安全,仍是須要加上安全認證的,具體的能夠查看官方文檔:https://codecentric.github.io/spring-boot-admin/2.1.0/#_securing_spring_boot_admin_server,相對比較簡單,簡單來講就是加入spring-boot-starter-security進行安全認證。
3-i-二、在admin服務端(springboot-admin-server)模塊添加依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
3-i-三、在application.yml中添加用戶名、密碼
spring: security: user: name: coding-farmer password: 123456
3-i-四、編輯SpringbootAdminServerApplication.java文件,修改成
package com.springcloudlearn; import de.codecentric.boot.admin.server.config.AdminServerProperties; import de.codecentric.boot.admin.server.config.EnableAdminServer; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; 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; @EnableAdminServer @SpringBootApplication public class SpringbootAdminServerApplication { public static void main(String[] args) { SpringApplication.run(SpringbootAdminServerApplication.class, args); } @Configuration public static 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/**" ); // @formatter:on } } }
3-i-五、訪問http://localhost:8788
3-ii-一、因爲服務端配置了密碼,客戶端訪問的時候須要密碼,這是基於SBA訪問模式,也就是所謂的直接鏈接springboot admin服務端模式,在application.yml文件中添加username,password
spring: application: name: springcloud-admin-client boot: admin: client: #springboot admin client鏈接 spring boot admin server 端點地址springboot admin client鏈接 spring boot admin server 端點地址 url: http://localhost:8788 instance: #默認使用的是主機名註冊,改成使用ip註冊 prefer-ip: true username: coding-farmer password: 123456
3-ii-二、而後啓動客戶端(springboot-admin-client)模塊,訪問http://localhost:8788,查看客戶端服務註冊到了admin服務端上
當咱們監控微服務的時候,服務數量衆多,咱們確定想統一管理微服務,我能夠將服務所有註冊到註冊中心上,admin會本身拉取Eureka上註冊的應用信息,主動去註冊。這也是惟一區別以前手動註冊(SBA鏈接方式)的地方,就是client端不須要admin-client的依賴,也不須要配置admin地址了,一切所有由admin-server本身實現。這樣的設計對環境變化很友好,不用改了admin-server後去改全部應用的配置了。
1-一、添加依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
1-二、在啓動類上添加Eureka的註解@EnableEurekaClient
1-三、修改後application.yml配置文件以下,而後啓動
server: port: 8788 spring: application: name: springboot-admin-server security: user: name: coding-farmer password: 123456 eureka: client: service-url: defaultZone: http://localhost:8700/eureka #客戶端每隔30秒從Eureka服務上更新一次服務信息 registry-fetch-interval-seconds: 30 #須要將個人服務註冊到eureka上 register-with-eureka: true #須要檢索服務 fetch-registry: true #心跳檢測檢測與續約時間 instance: #告訴服務端,若是我10s以內沒有給你發心跳,就表明我故障了,將我剔除掉,默認90s #Eureka服務端在收到最後一次心跳以後等待的時間上限,單位爲秒,超過則剔除(客戶端告訴服務端按照此規則等待本身) lease-expiration-duration-in-seconds: 10 #每隔2s向服務端發送一次心跳,證實自已依然活着,默認30s #Eureka客戶端向服務端發送心跳的時間間隔,單位爲秒(客戶端告訴服務端本身會按照該規則) lease-renewal-interval-in-seconds: 2 # 啓用ip配置 這樣在註冊中心列表中看見的是以ip+端口呈現的 prefer-ip-address: true # 實例名稱 最後呈現地址:ip:2002 instance-id: ${spring.cloud.client.ip-address}:${server.port} health-check-url-path: /actuator/health #Eureka 中的 metadataMap 是專門用來存放一些自定義的數據, # 當註冊中心或者其餘服務須要此服務的某些配置時能夠在 metadataMap 裏取。 # 實際上,每一個 instance 都有各自的 metadataMap,map 中存放着須要用到的屬性。 # 例如,上面配置中的 eureka.instance.metadata-map.username,當這個服務成功註冊到 Eureka 上, # Spring Boot Admin 就會取拿到這個 instance,進而拿到 metadataMap 裏的屬性, # 而後放入請求頭,向此服務發送請求,訪問此服務的 Actuator 開放的端點。 #說白了,這個爲了鏈接到本身,把密碼告訴eureka,spring boot admin server 拿着密碼去鏈接客戶端應用,監控信息 metadata-map: user.name: ${spring.security.user.name} user.password: ${spring.security.user.password} #使用註冊中心後,他admin也能夠監控自身服務情況 management: endpoints: web: exposure: #開放全部頁面節點 默認只開啓了health、info兩個節點 include: '*' endpoint: health: #顯示健康具體信息 默認不會顯示詳細信息 show-details: always # 利用info端點,加入版本等信息 info: versin: @project.version@ name: @project.artifactId@ group: @project.groupId@ description: @project.description@ #還能夠自定義信息 author: Coding Farmer blog: http://www.coding-farmer.cn
1-四、訪問以下http://localhost:8788,使用註冊中心以後他也能夠監控自身服務的情況
2-一、添加依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
2-二、在啓動類上添加註解@EnableEurekaClient
2-三、啓動Admin客戶端,而後訪問Admin服務端http://localhost:8788,你會看到還有Admin服務端已被監控了
詳細參考案例源碼:https://gitee.com/coding-farmer/springcloud-learn
原文出處:https://www.cnblogs.com/coding-farmer/p/12309272.html