1. 程式人生 > >一起來學SpringBoot | 第十五篇:actuator與spring-boot-admin 可以說的祕密

一起來學SpringBoot | 第十五篇:actuator與spring-boot-admin 可以說的祕密

SpringBoot 是為了簡化 Spring 應用的建立、執行、除錯、部署等一系列問題而誕生的產物,自動裝配的特性讓我們可以更好的關注業務本身而不是外部的XML配置,我們只需遵循規範,引入相關的依賴就可以輕易的搭建出一個 WEB 工程

一起來學SpringBoot | 第十四篇:強大的 actuator 服務監控與管理 中介紹了actuator 的作用,細心的朋友可能會發現通過http restful api的方式檢視資訊過於繁瑣也不夠直觀,效率低下,運維人員看到JSON資料更是一臉懵逼,當服務過多的時候檢視起來就過於操蛋了,每個服務都需要呼叫不同的介面來檢視監控資訊,備受各種困擾因素的我默默翻了下全球最大男性交友平臺

找到了spring-boot-admin

什麼是SBA

SBA 全稱 Spring Boot Admin 是一個管理和監控 Spring Boot 應用程式的開源專案。分為admin-serveradmin-client 兩個元件,admin-server通過採集 actuator 端點資料,顯示在 spring-boot-admin-ui 上,已知的端點幾乎都有進行採集,通過 spring-boot-admin 可以動態切換日誌級別、匯出日誌、匯出heapdump、監控各項指標 等等….

Spring Boot Admin 在對單一應用服務監控的同時也提供了叢集監控方案,支援通過eureka

consulzookeeper等註冊中心的方式實現多服務監控與管理…

匯入依賴

pom.xml 中新增 spring-boot-admin 的相關依賴,這裡只演示單機版本的,因此就自己監控自己了

<dependencies>
    <!-- 服務端:帶UI介面 -->
    <dependency>
        <groupId>de.codecentric</groupId>
        <artifactId>spring-boot-admin-starter-server</artifactId
>
<version>2.0.0</version> </dependency> <!-- 客戶端包 --> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-client</artifactId> <version>2.0.0</version> </dependency> <!-- 安全認證 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <!-- 端點 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- 在管理介面中與 JMX-beans 進行互動所需要被依賴的 JAR --> <dependency> <groupId>org.jolokia</groupId> <artifactId>jolokia-core</artifactId> </dependency> </dependencies>

注意事項

如果要訪問info介面想獲取maven中的屬性內容請記得新增如下內容

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>build-info</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

屬性配置

application.properties 檔案中配置actuator的相關配置,其中info開頭的屬性,就是訪問info端點中顯示的相關內容,值得注意的是Spring Boot2.x中,預設只開放了info、health兩個端點,剩餘的需要自己通過配置management.endpoints.web.exposure.include屬性來載入(有include自然就有exclude,不做詳細概述了)。這個management.endpoints.web.base-path屬性比較重要,因為Spring Boot2.x後每個端點預設的路徑是/actuator/endpointId這樣一來Spring Boot Admin是無法正常採集的

application.properties

# 描述資訊
info.blog-url=http://blog.battcn.com
info.author=Levin
# 如果 Maven 外掛沒配置此處請註釋掉
info.version[email protected].version@
info.name[email protected].artifactId@
# 選擇啟用對應環境的配置,如果是dev則代表不用認證就能訪問監控頁,prod代表需要認證
spring.profiles.active=prod

# 日誌檔案
logging.file=./target/admin-server.log

# 載入所有的端點/預設只加載了 info / health
management.endpoints.web.exposure.include=*
# 比較重要,預設 /actuator spring-boot-admin 掃描不到
management.endpoints.web.base-path=/
management.endpoint.health.show-details=always

spring.boot.admin.client.url=http://localhost:8080
# 不配置老喜歡用主機名,看著不舒服....
spring.boot.admin.client.instance.prefer-ip=true

application-dev.properties - 空

application-prod.properties

為了安全起見,應採用認證的方式

# 登陸所需的賬號密碼
spring.security.user.name=battcn
spring.security.user.password=battcn
# 便於客戶端可以在受保護的伺服器上註冊api
spring.boot.admin.client.username=battcn
spring.boot.admin.client.password=battcn
# 便伺服器可以訪問受保護的客戶端端點
spring.boot.admin.client.instance.metadata.user.name=battcn
spring.boot.admin.client.instance.metadata.user.password=battcn

主函式

新增上 @EnableAdminServer 註解即代表是Server端,整合UI的

package com.battcn;

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.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
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;


/**
 * @author Levin
 */
@SpringBootApplication
@EnableAdminServer
public class Chapter14Application {

    public static void main(String[] args) {
        SpringApplication.run(Chapter14Application.class, args);
    }

    /**
     * dev 環境載入
     */
    @Profile("dev")
    @Configuration
    public static class SecurityPermitAllConfig extends WebSecurityConfigurerAdapter {
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.authorizeRequests().anyRequest().permitAll()
                    .and().csrf().disable();
        }
    }

    /**
     * prod 環境載入
     */
    @Profile("prod")
    @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 {
            SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
            successHandler.setTargetUrlParameter("redirectTo");

            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().disable();
        }
    }
}

測試

完成準備事項後,啟動Chapter14Application 訪問 http://localhost:8080/login 看到登陸頁面則代表一切正常,接著輸入賬號密碼點選登陸即可…

首頁

由於篇幅原因大圖就不放太多了,有興趣的朋友可以直接fork程式碼執行即可

總結

目前很多大佬都寫過關於 SpringBoot 的教程了,如有雷同,請多多包涵,本教程基於最新的 spring-boot-starter-parent:2.0.2.RELEASE編寫,包括新版本的特性都會一起介紹…

說點什麼

  • 個人QQ:1837307557
  • battcn開源群(適合新手):391619659
  • 微信公眾號(歡迎調戲):battcn

公眾號

相關推薦

起來SpringBoot | actuatorspring-boot-admin 可以說的祕密

SpringBoot 是為了簡化 Spring 應用的建立、執行、除錯、部署等一系列問題而誕生的產物,自動裝配的特性讓我們可以更好的關注業務本身而不是外部的XML配置,我們只需遵循規範,引入相關的依賴就可以輕易的搭建出一個 WEB 工程 一起來學Spr

起來SpringBoot | 強大的 actuator 服務監控管理

SpringBoot 是為了簡化 Spring 應用的建立、執行、除錯、部署等一系列問題而誕生的產物,自動裝配的特性讓我們可以更好的關注業務本身而不是外部的XML配置,我們只需遵循規範,引入相關的依賴就可以輕易的搭建出一個 WEB 工程 actuato

起來SpringBoot | 輕鬆搞定資料驗證(

SpringBoot是為了簡化Spring應用的建立、執行、除錯、部署等一系列問題而誕生的產物,自動裝配的特性讓我們可以更好的關注業務本身而不是外部的XML配置,我們只需遵循規範,引入相關的依賴就可以輕易的搭建出一個 WEB 工程 對於任何一個

起來SpringBoot | 第二輕鬆搞定安全框架(Shiro)

SpringBoot 是為了簡化 Spring 應用的建立、執行、除錯、部署等一系列問題而誕生的產物,自動裝配的特性讓我們可以更好的關注業務本身而不是外部的XML配置,我們只需遵循規範,引入相關的依賴就可以輕易的搭建出一個 WEB 工程 Shiro 是

起來SpringBoot | 整合Swagger線上除錯

SpringBoot 是為了簡化 Spring 應用的建立、執行、除錯、部署等一系列問題而誕生的產物,自動裝配的特性讓我們可以更好的關注業務本身而不是外部的XML配置,我們只需遵循規範,引入相關的依賴就可以輕易的搭建出一個 WEB 工程 隨著網際網路技

起來SpringBoot)MybatisPlus的整合

MyBatis-Plus(簡稱 MP)是一個MyBatis的增強工具 ,在 MyBatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生。本篇文章介紹的是與springboot的整合。 特性 無侵入:只做增強不做改變,引入它不會對現有工程產生影響,

跟我SpringCloud | 微服務利劍之APM平臺()Skywalking

目錄 SpringCloud系列教程 | 第十五篇:微服務利劍之APM平臺(一)Skywalking 1. Skywalking概述 2. Skywalking主要功能 3. Skywalking主要特性

SpringBootswagger構建優雅文件

作者:追夢1819 原文:https://www.cnblogs.com/yanfei1819/p/11007470.html 版權宣告:本文為博主原創文章,轉載請附上博文連結! 引言   前面的十四篇文介紹了 SpringBoot 的一些基本和常用的功能。後面,我們將介紹 SpringBoot 的高階的功

起來SpringBoot | 十三RabbitMQ延遲佇列

SpringBoot 是為了簡化 Spring 應用的建立、執行、除錯、部署等一系列問題而誕生的產物,自動裝配的特性讓我們可以更好的關注業務本身而不是外部的XML配置,我們只需遵循規範,引入相關的依賴就可以輕易的搭建出一個 WEB 工程 初探Rabbi

起來SpringBoot)快取的使用

Spring Framework支援透明地嚮應用程式新增快取。從本質上講,抽象將快取應用於方法,從而根據快取中可用的資訊減少執行次數。快取邏輯應用透明,不會對呼叫者造成任何干擾。只要通過@EnableCaching 註釋啟用了快取支援,Spring Boot就會

起來SpringBoot)定時任務的使用

Quartz是一個功能豐富的開源作業排程庫,幾乎可以整合在任何Java應用程式中 - 從最小的獨立應用程式到最大的電子商務系統。Quartz可用於建立簡單或複雜的計劃,以執行數十,數百甚至數萬個作業; 將任務定義為標準Java元件的作業,這些元件可以執行幾乎任何

轉載SpringBoot非官方教程 | Springboot整合RabbitMQ

這篇文章帶你瞭解怎麼整合RabbitMQ伺服器,並且通過它怎麼去傳送和接收訊息。我將構建一個springboot工程,通過RabbitTemplate去通過MessageListenerAdapter去訂閱一個POJO型別的訊息。 準備工作 15min ID

起來SpringBoot六)優雅的整合Shiro

Apache Shiro是一個功能強大且易於使用的Java安全框架,可執行身份驗證,授權,加密和會話管理。藉助Shiro易於理解的API,您可以快速輕鬆地保護任何應用程式 - 從最小的移動應用程式到最大的Web和企業應用程式。網上找到大部分文章都是以前Sprin

SpringBoot非官方教程 | Springboot整合RabbitMQ

這篇文章帶你瞭解怎麼整合RabbitMQ伺服器,並且通過它怎麼去傳送和接收訊息。我將構建一個springboot工程,通過RabbitTemplate去通過MessageListenerAdapter去訂閱一個POJO型別的訊息。 準備工作 15min ID

JavaScript 之 Dom操作

頁面 對象模型 面向 方法 bsp log gpo eva div 一、後臺管理頁面布局 二、JavaScript函數 三、eval以及時間操作 四、JavaScript作用域 五、JavaScript面向對象模型 六、DOM選擇器 七、DOM事件操作 八、DOM綁定事件的

前輩opencv學習入門經驗

首先,搞影象處理,熟悉影象演算法是必經之路,如果上過影象處理這門課的話,再好不過。如果沒有,我推薦中科院研究生院劉定生老師的數字影象處理與分析(視訊),這位老師上課引人入勝,值得推薦。其次,在這個階段,配套的書籍自然是《岡薩雷斯版數字影象處理》這本書,最好同時用matlab軟體,模擬每一個影象演算法案例,推薦

Python 學習 模塊搜索路徑和包導入

部分 blank 所有 python 環境變量 bsp 引入 html pytho 在導入自定義的模塊時,除了指定模塊名之外,也需要指定目錄,由於Python把目錄稱作包,因此,這類導入被稱為包導入。包導入把計算機上的目錄變成Python的命名空間,而目錄中所包含的子目錄和

SpringBoot整合jsp

作者:追夢1819 原文:https://www.cnblogs.com/yanfei1819/p/10953600.html 版權宣告:本文為博主原創文章,轉載請附上博文連結! 引言   SpringBoot 雖然官方推薦使用 thymelaf 模板引擎,但是也支援jsp,只不過需要做一些修改。本文將講解

SpringBoot統一異常處理

作者:追夢1819 原文:https://www.cnblogs.com/yanfei1819/p/10984081.html 版權宣告:本文為博主原創文章,轉載請附上博文連結! 引言   本文將談論 SpringBoot 的預設錯誤處理機制,以及如何自定義錯誤響應。 版本資訊 JDK:1.8 Spri

SpringBoot自定義starter

作者:追夢1819 原文:https://www.cnblogs.com/yanfei1819/p/11058502.html 版權宣告:本文為博主原創文章,轉載請附上博文連結! 前言   這一段時間專案趕進度,故該系列部落格更新沒有之前那麼頻繁,望諒解。   SpringBoot 用起來方便,它預設集成了