咱們知道項目的監控是尤其重要的,可是咱們若是用jdk 自帶的jconsole 和jvisualvm 的話會很是繁瑣,且界面不是很友好。以前咱們使用了spring boot 項目,可是都沒有對項目有一個很好的監控。在spring 家族中有 spring-boot-admin 能夠很好的幫咱們起到監控微服務項目的做用。java
spring-boot-admin 是一個針對 Spring Boot 的 Actuator 接口進行 UI 美化封裝的監控工具,它能夠在列表中瀏覽全部被監控 spring-boot 項目的基本信息、詳細的 Health 信息、內存信息、JVM 信息、垃圾回收信息、各類配置信息(好比數據源、緩存列表和命中率)等,還能夠直接修改 logger 的 level。linux
spring-boot-admin 分爲服務端和客戶端。服務端是一個單獨的微服務,用來查看監控的項目的運行狀況,客戶端是咱們一個個的微服務項目。因此要想讓咱們的項目被服務端監控到,就須要將咱們的服務註冊到服務端去。git
好了,咱們來動手試試吧。程序員
咱們先來搭建spring-boot-admin 的服務端,上面說了服務端是一個單獨的項目。因此咱們建立一個新的springboot 項目。建立好後,咱們作一下修改。github
在pom 文件中,咱們引入 以下依賴web
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.2.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.quellanan</groupId> <artifactId>springbootadmin</artifactId> <version>0.0.1-SNAPSHOT</version> <name>springbootadmin</name> <description>springbootadmin project for Spring Boot</description> <properties> <java.version>1.8</java.version> <spring-boot-admin.version>2.2.1</spring-boot-admin.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-dependencies</artifactId> <version>${spring-boot-admin.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
上面是我整個的pom 文件,能夠看到我引入了web 、admin-starter-server、security。
若是考慮其餘的,能夠只引用admin-starter-server 就能夠實現效果。spring
在咱們的啓動類上加入@EnableAdminServer 註解,若是不加的話,項目能夠正常啓動,可是看不到任何東西。@EnableAdminServer 註解的做用就是啓動監控。apache
@SpringBootApplication @EnableAdminServer public class SpringbootadminApplication { public static void main(String[] args) { SpringApplication.run(SpringbootadminApplication.class, args); } }
這樣配置好以後,就能夠啓動項目啦,可是咱們這裏先不啓動,由於上一節咱們學習了,spring-boot-security .這裏咱們將它用起來。
咱們前面已經引入了 security ,接下來,咱們在application中增長配置緩存
spring.security.user.name=admin spring.security.user.password=123456
表示這個用戶才能訪問。另外咱們建立一個 SecurityConfig 類 繼承 WebSecurityConfigurerAdapter 重寫 configure(HttpSecurity http) 方法。代碼以下:安全
@Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler(); successHandler.setTargetUrlParameter("redirectTo"); successHandler.setDefaultTargetUrl("/"); http.authorizeRequests() .antMatchers("/assets/**").permitAll() .antMatchers("/login").permitAll() .anyRequest().authenticated().and() .formLogin().loginPage("/login") .successHandler(successHandler).and() .logout().logoutUrl("/logout").and() .httpBasic().and() .csrf() .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()) .ignoringAntMatchers( "/instances", "/actuator/**" ); } }
如今咱們啓動一下項目看看。啓動項目後輸入
http://localhost:8080
會跳轉到 登陸界面,進入主頁如今是什麼都沒有的。
到此咱們服務端的配置就已經能夠了,如今咱們來配置一下客戶端,咱們隨便找一個Springboot 項目,或者本身建立一個新的項目均可以。
咱們先在pom 文件中加入admin-client 依賴,注意這裏的版本須要和server 的版本一致。
<dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-client</artifactId> <version>2.2.1</version> </dependency>
而後咱們在 application.properties 文件中加入以下配置。
spring.boot.admin.client.url=http://localhost:8080 management.endpoints.web.exposure.include=* spring.application.name=sdwlzlapp-file spring.boot.admin.client.username=admin spring.boot.admin.client.password=123456
spring.boot.admin.client.url 指向咱們服務端的項目接口路徑。
management.endpoints.web.exposure.include 表示將全部端口都暴露出來,能夠被監控到。
spring.application.name 表示改項目在spring-boot-admin 上的的顯示名稱。
spring.boot.admin.client.username 和password 就是設置的用戶名和密碼了,這裏須要注意的是,若是admin-server 中沒有集成 security 的話,不用配置用戶名和密碼也能夠註冊進去,在服務端能夠監控到,但若是admin-server 集成了security,就須要保證client 中配置的用戶名和server 中配置的用戶名密碼保持一致。
配置了上面這些,就就能夠將項目註冊到admin-server 中啦,咱們啓動一下項目。
如今還有一個問題,若是咱們項目自己就集成的安全框架,好比security ,沒有登陸的話不能訪問接口,那這樣的項目怎麼被admin-server 監控到呢?好比就咱們上節將的security 的demo ,咱們註冊進來,雖然監控到了,可是是一個失敗的狀態。
能夠看到,不難發現問題,那就是監控的接口也被項目自己攔截了,因此才致使是失敗的狀態,那要怎麼修改了呢,其實也好處理,將這幾個接口放開就能夠了。咱們在項目的SecurityConfig 類中configure(HttpSecurity http)加上
代碼以下:
@Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/", "/hello").permitAll() .antMatchers( "/actuator/**").permitAll() .antMatchers( "/instances").permitAll() .anyRequest().authenticated() .and() .formLogin() //.loginPage("/login") .permitAll() .and() .logout() .permitAll(); }
這樣咱們重啓項目,就發現能夠監控成功了。
到此爲止,咱們也算是將spring-boot-admin的大體功能演示了下。
代碼上傳到github:
https://github.com/QuellanAn/springbootadmin
後續加油♡
歡迎你們關注我的公衆號 "程序員愛酸奶"
分享各類學習資料,包含java,linux,大數據等。資料包含視頻文檔以及源碼,同時分享本人及投遞的優質技術博文。
若是你們喜歡記得關注和分享喲❤