springboot 優雅集成spring-boot-admin 實現程序監控

前言

我們知道項目的監控是尤為重要的,但是我們如果用jdk 自帶的jconsole 和jvisualvm 的話會非常繁瑣,且界面不是很友好。之前我們使用了spring boot 項目,但是都沒有對項目有一個很好的監控。在spring 家族中有 spring-boot-admin 可以很好的幫我們起到監控微服務項目的作用。

spring-boot-admin 是一個針對 Spring Boot 的 Actuator 接口進行 UI 美化封裝的監控工具,它可以在列表中瀏覽所有被監控 spring-boot 項目的基本信息、詳細的 Health 信息、內存信息、JVM 信息、垃圾回收信息、各種配置信息(比如數據源、緩存列表和命中率)等,還可以直接修改 logger 的 level。

spring-boot-admin 分為服務端和客戶端。服務端是一個單獨的微服務,用來查看監控的項目的運行情況,客戶端是我們一個個的微服務項目。所以要想讓我們的項目被服務端監控到,就需要將我們的服務註冊到服務端去。

好了,我們來動手試試吧。

admin-server

我們先來搭建spring-boot-admin 的服務端,上面說了服務端是一個單獨的項目。所以我們創建一個新的springboot 項目。創建好後,我們做一下修改。

pom.xml

在pom 文件中,我們引入 如下依賴

<code><project>    <modelversion>4.0.0/<modelversion>    <parent>        <groupid>org.springframework.boot/<groupid>        <artifactid>spring-boot-starter-parent/<artifactid>        <version>2.2.2.RELEASE/<version>        <relativepath>     /<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>/<code>

上面是我整個的pom 文件,可以看到我引入了web 、admin-starter-server、security。如果考慮其他的,可以只引用admin-starter-server 就可以實現效果。

啟動類

在我們的啟動類上加入@EnableAdminServer 註解,如果不加的話,項目可以正常啟動,但是看不到任何東西。@EnableAdminServer 註解的作用就是啟動監控。

<code>@SpringBootApplication@EnableAdminServerpublic class SpringbootadminApplication {    public static void main(String[] args) {        SpringApplication.run(SpringbootadminApplication.class, args);    }}/<code>


配置 security

這樣配置好之後,就可以啟動項目啦,但是我們這裡先不啟動,因為上一節我們學習了,spring-boot-security .這裡我們將它用起來。我們前面已經引入了 security ,接下來,我們在application中增加配置

<code>spring.security.user.name=adminspring.security.user.password=123456/<code>

表示這個用戶才能訪問。另外我們創建一個 SecurityConfig 類 繼承 WebSecurityConfigurerAdapter 重寫 configure(HttpSecurity http) 方法。代碼如下:

<code>@Configurationpublic 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/**"                );    }}/<code>

現在我們啟動一下項目看看。啟動項目後輸入

<code>http://localhost:8080/<code>

會跳轉到 登錄界面,進入主頁現在是什麼都沒有的。

springboot 優雅集成spring-boot-admin 實現程序監控

admin-client

到此我們服務端的配置就已經可以了,現在我們來配置一下客戶端,我們隨便找一個Springboot 項目,或者自己創建一個新的項目都可以。

pom.xml

我們先在pom 文件中加入admin-client 依賴,注意這裡的版本需要和server 的版本一致。

<code>        <dependency>            <groupid>de.codecentric/<groupid>            <artifactid>spring-boot-admin-starter-client/<artifactid>            <version>2.2.1/<version>        /<dependency>/<code>


application.properties

然後我們在 application.properties 文件中加入如下配置。

<code>spring.boot.admin.client.url=http://localhost:8080management.endpoints.web.exposure.include=*spring.application.name=sdwlzlapp-filespring.boot.admin.client.username=adminspring.boot.admin.client.password=123456/<code>

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 中啦,我們啟動一下項目。

springboot 優雅集成spring-boot-admin 實現程序監控

現在還有一個問題,如果我們項目本身就集成的安全框架,比如security ,沒有登錄的話不能訪問接口,那這樣的項目怎麼被admin-server 監控到呢?比如就我們上節將的security 的demo ,我們註冊進來,雖然監控到了,但是是一個失敗的狀態。

springboot 優雅集成spring-boot-admin 實現程序監控

可以看到,不難發現問題,那就是監控的接口也被項目本身攔截了,所以才導致是失敗的狀態,那要怎麼修改了呢,其實也好處理,將這幾個接口放開就可以了。我們在項目的SecurityConfig 類中configure(HttpSecurity http)加上

springboot 優雅集成spring-boot-admin 實現程序監控

代碼如下:

<code>@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();    }/<code>

這樣我們重啟項目,就發現可以監控成功了。

springboot 優雅集成spring-boot-admin 實現程序監控

番外

到此為止,我們也算是將spring-boot-admin的大致功能演示了下。

代碼上傳到github:https://github.com/QuellanAn/springbootadmin

轉載自:http://www.spring4all.com/article/19379


分享到:


相關文章: