亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

一、介紹

1、SBA簡介

官網(wǎng)參考文檔

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

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

2、SBA工程介紹

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

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

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

首先新建一個(gè)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è)置好端口后,在啟動(dòng)類上添加注解@EnableAdminServer,啟動(dòng)項(xiàng)目打開瀏覽器訪問//ip:port即可訪問

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

2.1 Spring Security賬號登錄

SBA 默認(rèn)是沒有權(quán)限驗(yàn)證的,而生產(chǎn)環(huán)境一定要配置權(quán)限驗(yàn)證,我們這里通過添加 Spring Security 框架來實(shí)現(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è)置賬號密碼

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

編寫配置類

/**
 * Security安全配置
 */
@Configuration
public class SecuritySecureConfig extends WebSecurityConfigurerAdapter {
    //項(xiàng)目應(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注冊時(shí)需要使用
                .httpBasic().and()
                .csrf()
                //開啟基于cookie的csrf保護(hù)
                .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
                //忽略這些路徑的csrf保護(hù)以便admin-client注冊
                .ignoringAntMatchers(
                        adminContextPath + "/instances",
                        adminContextPath + "/actuator/**"
                );
    }
}

2.2 客戶端actuator端口保護(hù)

另外客戶端是要暴露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 自帶郵件報(bào)警通知

首先引入郵件相關(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
# 配置郵箱的賬戶名(這個(gè)是上面配置發(fā)送郵件的賬戶名)
spring.mail.username=xxx@qq.com

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

3.2 自定義通知

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

/**
 * 自定義通知
 * 繼承 AbstractStatusChangeNotifier 類,實(shí)現(xiàn)了 doNotify 方法,
 * 當(dāng)應(yīng)用狀態(tài)改變的時(shí)候會回調(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("實(shí)例名稱:"+instance.getRegistration().getName());
                System.out.println("實(shí)例服務(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)控所有項(xiàng)
management:
  endpoints:
    #公開所有端點(diǎn)web接口
    web:
      exposure:
        include: '*'
  endpoint:
    health:
      #顯示db、redis、rabbti連接情況等
      show-details: always
    #啟用端點(diǎn),默認(rèn)情況下,除shutdown以外的所有端點(diǎn)均已啟用
    shutdown: true
    # 具體的日志路徑
    logfile:
      external-file: xxx
#添加描述
info:
  describe: SpringBootAdmin,Test Client Service!
  author: shawn
  version: 1.0.0

配置完啟動(dòng)后就可以查看相關(guān)監(jiān)控項(xiàng),具體客戶端的監(jiān)控首頁,有我們在客戶端寫的info信息、磁盤監(jiān)控、堆、非堆內(nèi)存監(jiān)控、進(jì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端口受保護(hù)! 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)組件中去,同時(shí)把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)文章

  • Spring Boot構(gòu)建優(yōu)雅的RESTful接口過程詳解

    Spring Boot構(gòu)建優(yōu)雅的RESTful接口過程詳解

    這篇文章主要介紹了spring boot構(gòu)建優(yōu)雅的RESTful接口過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Spring Boot Admin(監(jiān)控工具)的使用

    Spring Boot Admin(監(jiān)控工具)的使用

    今天我們將會講解一個(gè)優(yōu)秀的監(jiān)控工具Spring Boot Admin。 它采用圖形化的界面,讓我們的Spring Boot管理更加簡單,需要的朋友可以參考下
    2020-02-02
  • 淺談Java中static關(guān)鍵字的作用

    淺談Java中static關(guān)鍵字的作用

    這篇文章主要介紹了Java中static關(guān)鍵字的作用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • SpringCloud微服務(wù)踩坑記錄分享

    SpringCloud微服務(wù)踩坑記錄分享

    本文記錄了作者在使用SpringCloud微服務(wù)時(shí)遇到的問題,首先,作者嘗試修改配置文件中的service-name和instance-id,但仍然無法解決問題,后來,作者嘗試更換SpringCloud版本為2.2.5,并搭配Hoxton.SR3版本,問題得以解決
    2024-11-11
  • Spring MVC Interceptor 實(shí)現(xiàn)性能監(jiān)控的功能代碼

    Spring MVC Interceptor 實(shí)現(xiàn)性能監(jiān)控的功能代碼

    本篇文章主要介紹了Spring MVC Interceptor 實(shí)現(xiàn)性能監(jiān)控的功能代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • Java中實(shí)現(xiàn)分布式定時(shí)任務(wù)的方法

    Java中實(shí)現(xiàn)分布式定時(shí)任務(wù)的方法

    這篇文章主要介紹了Java中實(shí)現(xiàn)分布式定時(shí)任務(wù),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • Java實(shí)現(xiàn)的微信圖片處理工具類【裁剪,合并,等比例縮放等】

    Java實(shí)現(xiàn)的微信圖片處理工具類【裁剪,合并,等比例縮放等】

    這篇文章主要介紹了Java實(shí)現(xiàn)的微信圖片處理工具類,可實(shí)現(xiàn)針對圖片的裁剪、合并、等比例縮放、旋轉(zhuǎn)、識別等各種常見的圖片處理功能,需要的朋友可以參考下
    2017-11-11
  • SpringBoot自定義啟動(dòng)界面的實(shí)現(xiàn)代碼

    SpringBoot自定義啟動(dòng)界面的實(shí)現(xiàn)代碼

    實(shí)現(xiàn)自定義啟動(dòng)動(dòng)畫是一項(xiàng)有趣的任務(wù),雖然Spring Boot本身不提供內(nèi)置的動(dòng)畫功能,但可以通過一些技巧來實(shí)現(xiàn),本文主要以Demo的形式展示,再者下面的Demo都可以聯(lián)合使用,需要的朋友可以參考下
    2024-07-07
  • Java的MybatisPlus詳解

    Java的MybatisPlus詳解

    這篇文章主要介紹了Java的MybatisPlus詳解,MyBatis-Plus是一個(gè) MyBatis的增強(qiáng)工具,在MyBatis的基礎(chǔ)上只做增強(qiáng)不做改變,為簡化開發(fā)、提高效率而生,需要的朋友可以參考下
    2023-07-07
  • java 實(shí)現(xiàn)局域網(wǎng)文件傳輸?shù)膶?shí)例

    java 實(shí)現(xiàn)局域網(wǎng)文件傳輸?shù)膶?shí)例

    這篇文章主要介紹了java 實(shí)現(xiàn)局域網(wǎng)文件傳輸?shù)膶?shí)例的相關(guān)資料,這里提供了實(shí)現(xiàn)代碼可以幫助大家理解TCP及文件讀寫的知識,需要的朋友可以參考下
    2017-07-07

最新評論