前言
??Spring Boot Actuator 是 spring-boot 自帶監控功能 ,可以幫助實現對程序內部運行情況監控,比如監控狀況、Bean 加載情況、環境變量、日志信息、線程信息等。
Spring Boot Admin是一個針對 spring-boot 的 actuator 接口進行 UI 美化封裝的監控工具。他可以:
- 在列表中瀏覽所有被監控 spring-boot 項目的基本信息,
- 詳細的Health信息、內存信息、JVM 信息、垃圾回收信息、各種配置信息(比如數據源、緩存列表和命中率)等,
- 還可以直接修改 logger 的 level。
搭建
創建子module spring-cloud-alibaba-2021-admin
,pom.xml 內容如下
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>spring-cloud-alibaba-2021</artifactId><groupId>org.example</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>spring-cloud-alibaba-2021-admin</artifactId><packaging>pom</packaging><modules><module>admin-client</module><module>admin-server</module></modules><properties><admin.version>2.5.3</admin.version></properties><dependencyManagement><dependencies><!-- SpringBoot Admin 服務端 --><dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-server</artifactId><version>${admin.version}</version></dependency><!-- SpringBoot Admin 客戶端 --><dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-client</artifactId><version>${admin.version}</version></dependency></dependencies></dependencyManagement><dependencies><!-- web支持 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies>
</project>
創建二級子module
創建 監控中心服務端server
在 spring-cloud-alibaba-2021-admin
工程下在創建子module admin-server
, pom.xml 內容如下
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>spring-cloud-alibaba-2021-admin</artifactId><groupId>org.example</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>admin-server</artifactId><dependencies><!-- SpringBoot Admin 服務端依賴 --><dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-server</artifactId></dependency><!-- spring security --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><!-- nacos 服務注冊發現(客戶端)依賴 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!-- nacos-config 配置中心依賴 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!--spring-cloud-dependencies 2020.0.0 版本不在默認加載bootstrap.yml 文件,如果需要加載bootstrap 文件需要手動添加依賴--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId></dependency></dependencies>
</project>
application.yml
配置文件如下
server:port: 7001spring:# 后面的bean會覆蓋前面相同名稱的beanmain:allow-bean-definition-overriding: true# 安全認證security:user:# 賬號name: admin# 密碼password: 123456boot:admin:ui:# 網頁標題title: spring-cloud-alibaba-2021微服務監控
bootstrap.yml
配置文件內容如下
spring:application:name: admin-server-demoprofiles:active: yexindong_activenacos-server-addr: http://chn520.cn:8848cloud:nacos:discovery:server-addr: ${spring.profiles.nacos-server-addr} # 服務注冊中心地址namespace: public # 注冊到nacos的名稱空間,默認為publicconfig:
# namespace: public # 如果是默認的public,則不需要指定名稱空間,否則控制臺會一直打印日志file-extension: yaml # 指定yaml格式的配置, 必須要放到bootstrao.yml 才會生效,放到application下不會生效server-addr: ${spring.profiles.nacos-server-addr} #配置中心地址group: DEFAULT_GROUP# 指定配置文件,可指定多個shared-configs[0]:data-id: spring-cloud-alibaba-config.yamlrefresh: true # 是否自動刷新
監控中心服務端配置類WebSecurityConfig.java
package com.alibaba.cloud.config;import de.codecentric.boot.admin.server.config.AdminServerProperties;
import org.springframework.context.annotation.Configuration;
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;/*** 監控權限配置**/
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {/*** 上下文路徑*/private final String contextPath;/*** 構造函數* @param adminServerProperties*/public WebSecurityConfig(AdminServerProperties adminServerProperties) {this.contextPath = adminServerProperties.getContextPath();}@Overrideprotected void configure(HttpSecurity http) throws Exception {SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();successHandler.setTargetUrlParameter("redirectTo");successHandler.setDefaultTargetUrl(contextPath + "/");http.headers().frameOptions().disable().and().authorizeRequests().antMatchers(contextPath + "/assets/**", contextPath + "/login", contextPath + "/actuator/**", contextPath + "/instances/**").permitAll().anyRequest().authenticated().and().formLogin().loginPage(contextPath + "/login").successHandler(successHandler).and().logout().logoutUrl(contextPath + "/logout").and().httpBasic().and().csrf().disable();}
}
啟動類 AdminServerApp.java
package com.alibaba.cloud;import de.codecentric.boot.admin.server.config.EnableAdminServer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@EnableAdminServer
public class AdminServerApp {/*** 啟動后訪問地址: http://localhost:7001 即可查看監控信息* @param args*/public static void main(String[] args) {SpringApplication.run(AdminServerApp.class, args);}
}
啟動main
方法,在瀏覽器輸入http://localhost:7001
, 因為已經將當前服務注冊到了nacos,而admin監控中心會自動去nacos取所有的服務地址,所以可以看到監控中心有自己的服務;
創建監控中心客戶端 client
在 spring-cloud-alibaba-2021-admin
工程下在創建子module admin-client
, pom.xml 內容如下
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>spring-cloud-alibaba-2021-admin</artifactId><groupId>org.example</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>admin-client</artifactId><dependencies><!-- SpringBoot Admin 客戶端 --><dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-client</artifactId></dependency><!-- SpringBoot Actuator 依賴,admin就是對Actuator封裝了一層,增加了一些功能 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!-- nacos 服務注冊發現(客戶端)依賴 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!-- nacos-config 配置中心依賴 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!--spring-cloud-dependencies 2020.0.0 版本不在默認加載bootstrap.yml 文件,如果需要加載bootstrap 文件需要手動添加依賴--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId></dependency></dependencies>
</project>
application.yml
內容如下
server:port: 9001spring:boot:
# admin: # 若已將服務注冊到nacos,則這里不需要指定,監控中心會自動去nacos取服務列表
# client:
# # 監控中心地址
# url:
# - http://localhost:7001# 暴露我們的所有監控信息
management:endpoints:web:exposure:include: '*'
bootstrap.yml
內容如下
spring:application:name: admin-client-demo # 取pom文件中 artifactId 標簽的值profiles:active: yexindong_activenacos-server-addr: http://chn520.cn:8848cloud:nacos:discovery:server-addr: ${spring.profiles.nacos-server-addr} # 服務注冊中心地址namespace: public # 注冊到nacos的名稱空間,默認為publicconfig:
# namespace: public # 如果是默認的public,則不需要指定名稱空間,否則控制臺會一直打印日志file-extension: yaml # 指定yaml格式的配置, 必須要放到bootstrao.yml 才會生效,放到application下不會生效server-addr: ${spring.profiles.nacos-server-addr} #配置中心地址group: DEFAULT_GROUP# 指定配置文件,可指定多個shared-configs[0]:data-id: spring-cloud-alibaba-config.yamlrefresh: true # 是否自動刷新
啟動類 AdminClientApp.java
package com.libaba.cloud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class AdminClientApp {public static void main(String[] args) {SpringApplication.run(AdminClientApp.class, args);}
}
啟動 main
方法,然后再次訪問 http://localhost:7001
,監控中心顯示如下,可以看到,已經對客戶端進行監控了
接著我們點進去,就可以看到該服務的所有監控信息
項目結構圖
整體項目結構如下
在來張展開后的結構圖