最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot的Admin服務(wù)監(jiān)控詳解

 更新時間:2024年01月27日 10:23:02   作者:魅Lemon  
這篇文章主要介紹了SpringBoot的Admin服務(wù)監(jiān)控詳解,Spring Boot Admin(SBA)是一個開源的社區(qū)項目,用于管理和監(jiān)控 Spring Boot 應(yīng)用程序,需要的朋友可以參考下

一、介紹

1、SBA簡介

官網(wǎng)參考文檔

Spring Boot Admin(SBA)是一個開源的社區(qū)項目,用于管理和監(jiān)控 Spring Boot 應(yīng)用程序。應(yīng)用程序可以通過 http 的方式,或 Spring Cloud 服務(wù)發(fā)現(xiàn)機制注冊到 SBA 中,然后就可以實現(xiàn)對 Spring Boot 項目的可視化管理和查看了。

Spring Boot Admin 可以監(jiān)控 Spring Boot 單機或集群項目,它提供詳細的健康 (Health)信息、內(nèi)存信息、JVM 系統(tǒng)和環(huán)境屬性、垃圾回收信息、日志設(shè)置和查看、定時任務(wù)查看、Spring Boot 緩存查看和管理等功能。

2、SBA工程介紹

Spring Boot Admin分為服務(wù)端和客戶端,服務(wù)端、客戶端都是獨立的web項目,服務(wù)端是監(jiān)控程序,客戶端是被監(jiān)控的程序,這里需要創(chuàng)建兩個SpringBoot工程,一個對應(yīng)服務(wù)端,一個對應(yīng)客戶端

二、SBA服務(wù)端構(gòu)建

1、SBA服務(wù)端簡單構(gòu)建

首先新建一個SpringBoot工程,在pom.xml中導(dǎo)入相關(guān)依賴

<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-server</artifactId>
    <!--2.2.0后admin的管理頁面支持中文-->
    <version>2.6.6</version>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

其次在配置文件設(shè)置好端口后,在啟動類上添加注解@EnableAdminServer,啟動項目打開瀏覽器訪問//ip:port即可訪問

2、服務(wù)端訪問權(quán)限設(shè)置

2.1 Spring Security賬號登錄

SBA 默認是沒有權(quán)限驗證的,而生產(chǎn)環(huán)境一定要配置權(quán)限驗證,我們這里通過添加 Spring Security 框架來實現(xiàn)權(quán)限攔截。首先引入相關(guān)依賴

<!--springboot security 安全相關(guān)-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

在application.properties里設(shè)置賬號密碼

#配置一個賬號和密碼
spring.security.user.name=admin
spring.security.user.password=123456

編寫配置類

/**
 * Security安全配置
 */
@Configuration
public class SecuritySecureConfig extends WebSecurityConfigurerAdapter {
    //項目應(yīng)用路徑
    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");
        successHandler.setDefaultTargetUrl(adminContextPath + "/");
        http.authorizeRequests()
                //無需登錄即可訪問
                .antMatchers(adminContextPath + "/assets/**").permitAll()
                .antMatchers(adminContextPath + "/login").permitAll()
                //.antMatchers(adminContextPath + "/instances/**").permitAll()
                .anyRequest().authenticated()
                .and()
                //登錄和登出路徑
                .formLogin().loginPage(adminContextPath + "/login").successHandler(successHandler).and()
                .logout().logoutUrl(adminContextPath + "/logout").and()
                //開啟http basic支持,admin-client注冊時需要使用
                .httpBasic().and()
                .csrf()
                //開啟基于cookie的csrf保護
                .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
                //忽略這些路徑的csrf保護以便admin-client注冊
                .ignoringAntMatchers(
                        adminContextPath + "/instances",
                        adminContextPath + "/actuator/**"
                );
    }
}

2.2 客戶端actuator端口保護

另外客戶端是要暴露actuator的web端口的,為了安全,客戶端只允許服務(wù)端請求actuator的web接口,為了方便客戶端區(qū)分請求來源,我們在請求頭注入自定義參數(shù)

/**
 * 注入額外的請求頭,方便客戶端區(qū)分請求來源
 */
@Component
public class HttpHeadersProviderConfig implements HttpHeadersProvider {
    @Value("${server.port}")
    private String port;
    @Override
    public HttpHeaders getHeaders(Instance instance) {
        HttpHeaders httpHeaders = new HttpHeaders();
        //設(shè)置約定好的請求頭參數(shù)
        httpHeaders.add("spring-boot-admin-service", port);
        return httpHeaders;
    }
}

3、數(shù)據(jù)監(jiān)控與通知

3.1 自帶郵件報警通知

首先引入郵件相關(guān)依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

在 SBA 的配置文件 application.properties 中添加以下收、發(fā)郵箱的配置

# 配置發(fā)送郵箱
spring.boot.admin.notify.mail.from=xxx@qq.com
# 配置接收郵箱
spring.boot.admin.notify.mail.to=xxx@qq.com
# 配置郵箱 smtp 地址(qq 發(fā)送郵箱的固定 host 是 smtp.qq.com)
spring.mail.host=smtp.qq.com
# 配置郵箱授權(quán)碼(此處為授權(quán)碼,而非密碼,獲取授權(quán)碼本文下一步有說明),需要開啟郵箱SMTP服務(wù)
spring.mail.password=xxxxxx
# 配置郵箱的賬戶名(這個是上面配置發(fā)送郵件的賬戶名)
spring.mail.username=xxx@qq.com

經(jīng)過以上配置之后,無需添加任何代碼,就可以實現(xiàn)項目狀態(tài)改變的郵件提醒功能了。

3.2 自定義通知

自定義通知,當(dāng)實例狀態(tài)發(fā)生改變,及時通知(發(fā)郵件、企業(yè)微信、釘釘都可以,自己實現(xiàn))

/**
 * 自定義通知
 * 繼承 AbstractStatusChangeNotifier 類,實現(xiàn)了 doNotify 方法,
 * 當(dāng)應(yīng)用狀態(tài)改變的時候會回調(diào) doNotify 方法。
 */
@Component
public class CustomNotifierConfig extends AbstractStatusChangeNotifier {
    public CustomNotifierConfig(InstanceRepository repository) {
        super(repository);
    }
    @Override
    protected Mono<Void> doNotify(InstanceEvent event, Instance instance) {
        return Mono.fromRunnable(() -> {
            if (event instanceof InstanceStatusChangedEvent) {
                System.out.println("實例名稱:"+instance.getRegistration().getName());
                System.out.println("實例服務(wù)地址:"+instance.getRegistration().getServiceUrl());
                String status = ((InstanceStatusChangedEvent) event).getStatusInfo().getStatus();
                switch (status) {
                    case "DOWN":
                        System.out.println("健康檢查沒通過!");
                        break;
                    case "OFFLINE":
                        System.out.println("服務(wù)離線!");
                        break;
                    case "UP":
                        System.out.println("服務(wù)上線!");
                        break;
                    case "UNKNOWN":
                        System.out.println("服務(wù)未知異常!");
                        break;
                    default:
                        System.out.println(status);
                        break;
                }
            }
        });
    }
}

三、SBA客戶端構(gòu)建

1、簡單構(gòu)建

新建工程,導(dǎo)入相關(guān)依賴

<dependency>
  <groupId>de.codecentric</groupId>
  <artifactId>spring-boot-admin-starter-client</artifactId>
  <version>2.6.6</version>
</dependency>

<!--查看狀態(tài)信息的-->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

在application.yml中配置

spring:  
  # Spring Boot Admin 監(jiān)控服務(wù)器端地址
  boot:
    admin:
      client:
        port: 9000
        url: http://localhost:${spring.boot.admin.client.port}
        # 如果設(shè)置了賬號密碼就需要
        username: admin
        password: 123456
# 開啟監(jiān)控所有項
management:
  endpoints:
    #公開所有端點web接口
    web:
      exposure:
        include: '*'
  endpoint:
    health:
      #顯示db、redis、rabbti連接情況等
      show-details: always
    #啟用端點,默認情況下,除shutdown以外的所有端點均已啟用
    shutdown: true
    # 具體的日志路徑
    logfile:
      external-file: xxx
#添加描述
info:
  describe: SpringBootAdmin,Test Client Service!
  author: shawn
  version: 1.0.0

配置完啟動后就可以查看相關(guān)監(jiān)控項,具體客戶端的監(jiān)控首頁,有我們在客戶端寫的info信息、磁盤監(jiān)控、堆、非堆內(nèi)存監(jiān)控、進程、線程監(jiān)控、垃圾回收監(jiān)控

在這里插入圖片描述

2、actuator的web端口安全設(shè)置

客戶端是要暴露actuator的web端口的,為了安全,客戶端只允許服務(wù)端請求actuator的web接口(通過約定好的請求頭來判斷)

/**
 * 針對actuator接口做安全限制,只允許服務(wù)端調(diào)用
 */
@WebFilter
@ServletComponentScan
@Component
public class ActuatorFilter implements Filter {
    @Value("${spring.boot.admin.client.port}")
    private String adminServicePort;
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        //判斷約定好的請求頭參數(shù)
        if (request.getRequestURI().contains("/actuator") && !adminServicePort.equals(request.getHeader("spring-boot-admin-service"))){
            throw new RuntimeException("抱歉,你無權(quán)限訪問,Actuator端口受保護! Sorry, you have no permission to access it,Actuator port protected!");
        }
        filterChain.doFilter(servletRequest, servletResponse);
    }
}

四、總結(jié)

SpringBoot-Admin監(jiān)控Client有兩種模式:

Client端引入spring-boot-admin-starter-client依賴,配置好Server的相關(guān)信息。

將所有Client端注冊到服務(wù)發(fā)現(xiàn)(Eureka)組件中去,同時把Server端也注冊,這樣Server端就可以監(jiān)控所有Client端了,不用對Client都添加依賴。

到此這篇關(guān)于SpringBoot的Admin服務(wù)監(jiān)控詳解的文章就介紹到這了,更多相關(guān)Admin服務(wù)監(jiān)控內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • ActiveMQ結(jié)合Spring收發(fā)消息的示例代碼

    ActiveMQ結(jié)合Spring收發(fā)消息的示例代碼

    這篇文章主要介紹了ActiveMQ結(jié)合Spring收發(fā)消息的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10
  • 解決SpringBoot整合RocketMQ遇到的坑

    解決SpringBoot整合RocketMQ遇到的坑

    這篇文章主要介紹了解決SpringBoot整合RocketMQ遇到的坑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Spring中ClassPath指的是哪些地方

    Spring中ClassPath指的是哪些地方

    在Spring應(yīng)用中,ClassPath指的是應(yīng)用程序的類加載路徑,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • SpringBoot+Vue項目部署上線的實現(xiàn)示例

    SpringBoot+Vue項目部署上線的實現(xiàn)示例

    本文主要介紹了SpringBoot+Vue項目部署上線的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-02-02
  • HttpClient 請求 URL字符集轉(zhuǎn)碼問題

    HttpClient 請求 URL字符集轉(zhuǎn)碼問題

    這篇文章主要介紹了HttpClient 請求 URL字符集轉(zhuǎn)碼問題,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • 使用SpringMVC響應(yīng)json格式返回的結(jié)果類型

    使用SpringMVC響應(yīng)json格式返回的結(jié)果類型

    這篇文章主要介紹了使用SpringMVC響應(yīng)json格式返回的結(jié)果類型,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java實現(xiàn)的兩種常見簡單查找算法示例【快速查找與二分查找】

    Java實現(xiàn)的兩種常見簡單查找算法示例【快速查找與二分查找】

    這篇文章主要介紹了Java實現(xiàn)的兩種常見簡單查找算法,結(jié)合具體實例形式分析了java快速查找與二分查找的原理與簡單實現(xiàn)技巧,需要的朋友可以參考下
    2017-09-09
  • mybatis簡介與配置_動力節(jié)點Java學(xué)院整理

    mybatis簡介與配置_動力節(jié)點Java學(xué)院整理

    這篇文章主要介紹了mybatis簡介與配置,介紹了MyBatis+Spring+MySql簡單配置,有興趣的可以了解一下
    2017-09-09
  • Java基于中介者模式實現(xiàn)多人聊天室功能示例

    Java基于中介者模式實現(xiàn)多人聊天室功能示例

    這篇文章主要介紹了Java基于中介者模式實現(xiàn)多人聊天室功能,詳細分析了中介者模式的概念、原理以及使用中介模式實現(xiàn)多人聊天的步驟、操作技巧與注意事項,需要的朋友可以參考下
    2018-05-05
  • springcloud下hibernate本地化方言配置方式

    springcloud下hibernate本地化方言配置方式

    這篇文章主要介紹了springcloud下hibernate本地化方言配置方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09

最新評論

全州县| 鄂托克前旗| 新巴尔虎右旗| 富蕴县| 平原县| 乌拉特后旗| 唐山市| 丹棱县| 衡阳县| 腾冲县| 乡宁县| 株洲市| 永靖县| 时尚| 枞阳县| 千阳县| 巴楚县| 奈曼旗| 家居| 太仆寺旗| 江门市| 南阳市| 漳平市| 浮山县| 佛坪县| 靖边县| 乐安县| 苍山县| 靖江市| 贡觉县| 龙江县| 六枝特区| 丰顺县| 陵川县| 广水市| 甘肃省| 漳浦县| 林周县| 柏乡县| 汝州市| 博白县|