SpringBoot應用監(jiān)控Actuator使用隱患及解決方案
Actuator介紹
SpringBoot的Actuator 模塊提供了生產級別的功能,比如健康檢查,審計,指標收集,HTTP 跟蹤等,幫助我們監(jiān)控和管理Spring Boot 應用。這個模塊是一個采集應用內部信息暴露給外部的模塊,如自動化配置信息、創(chuàng)建的Spring beans信息、系統(tǒng)環(huán)境變量的配置信息以及Web請求的詳細信息等(上述的功能都可以通過HTTP 和 JMX 訪問)。如果使用不當或者一些不經意的疏忽,可能造成信息泄露等嚴重的安全隱患。(PS:樓主這里就因為某同事的疏忽上線后被檢測到未授權訪問然后勒令整改的)
Actuator核心是:Endpoints,它用來監(jiān)視應用程序及交互,actuator中內置了非常多的Endpoints(如:health、info、beans、httptrace等等),但同時也允許用戶根據(jù)自己需求自定義端點。
Endpoints 主要分成兩類:原生端點和用戶自定義端點;自定義端點主要是指擴展性,用戶可以根據(jù)自己的實際應用,定義一些比較關心的指標,在運行期進行監(jiān)控。
常見端點如下表格所示
EndPoints | 描述 |
---|---|
auditevents | 公開當前應用程序的審核事件信息。 |
beans | 顯示應用程序中所有Spring bean的完整列表。 |
caches | 暴露可用的緩存。 |
conditions | 顯示在配置和自動配置類上評估的條件以及它們匹配或不匹配的原因。 |
configprops | 顯示所有的整理列表@ConfigurationProperties,查看配置屬性,包括默認配置 |
env | 露出Spring的屬性的各種環(huán)境變量,后面可跟/{name}查看具體的值 |
flyway | 顯示已應用的任何Flyway數(shù)據(jù)庫遷移。 |
health | 顯示應用健康信息,2.0以后需要在配置里show-details打開開關 |
httptrace | 顯示HTTP跟蹤信息,2.0以后需要手動打開 |
info | 顯示任意應用信息,是在配置文件里自己定義的 |
integrationgraph | 顯示Spring Integration圖。 |
loggers | 顯示和修改應用程序中記錄器的配置。 |
liquibase | 顯示已應用的任何Liquibase數(shù)據(jù)庫遷移。 |
scheduledtasks | 顯示應用程序中的計劃任務。 |
感興趣的小伙伴可自行查閱
使用Actuator
使用Actuator監(jiān)控只需要在Maven中引入依賴“spring-boot-starter-actuator”即可
<!-- 監(jiān)控端點--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
在YML配置文件中配置actuator的訪問路徑,開放端口
management: endpoints: web: # actuator的訪問路徑,默認/actuator base-path: /actuator # 設置是否暴露端點 默認只有health和info可見 exposure: # 如需暴漏指定端口,在下方輸入,端口名稱,多個端點之間用“,”分割。如:env,session。開放所 # 有用*號表示,如下所示 include: "*" #新開監(jiān)控端口,不設置采取項目端口(默認) server: port: 8081 endpoint: health: # 顯示db、redis、rabbti連接情況等 show-details: always shutdown: enabled: true
到這里引入Actuator已完成,啟動項目在瀏覽器地址欄輸入項目路徑后拼上/actuator后即可訪問(注:如果上面配置過地址這里就不應輸入/actuator,應該為你配置的地址。如需查詢某一個端點就在/actuator后面拼接上。如env:localhost:8080/actuator/env)
配置Actuator可視化界面
看上圖所列出的讓人看得不是很清楚,這時候可以使用monitor來構建界面,使用也很簡單,只需要引入“spring-boot-monitor”即可
<dependency> <groupId>cn.pomit</groupId> <artifactId>spring-boot-monitor</artifactId> <version>0.0.4</version> </dependency>
引入完成后啟動項目,這個時候就不是訪問/actuator而是/monitor來進行訪問。
Actuator配置安全訪問
需要使用Actuator監(jiān)控服務端點情況時,如果在本地的話問題不大,但是放到線上就會有問題。這個時候我們需要對Actuator進行保護。
比如說限制開放某一端點,我們可以在yml中配置(env舉例):
endpoint: env: enabled: false
也可以通過搭配security模塊來進行登錄限制。
首先引入maven依賴“spring-boot-starter-security”依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
在yml配置文件中定義賬號密碼(注:也可以不在配置文件中定義,在配置類中定義)
spring: security: user: name: root password: 123456 roles: ADMIN
編寫配置類(注:SpringBoot2.0拋棄了之前的引用方式,故此使用配置類方法,該實例只針對actuator進行攔截,各位可根據(jù)實際情況調整)
@Configuration @EnableWebSecurity public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) { http.csrf().disable(); http.formLogin().and() .authorizeRequests() .antMatchers("/**actuator/**","/**monitor/**") .authenticated() .anyRequest() .permitAll() .and() .httpBasic(); } //添加賬號、密碼、權限 @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder()) .withUser("root") .password(new BCryptPasswordEncoder().encode("123456")) .roles("ADMIN"); } }
啟動項目訪問該地址會自動跳轉到登錄界面,使用配置好的賬號密碼登錄即可。
注:也可更改驗證步驟搭配數(shù)據(jù)庫進行登錄,在此就不多說了感興趣的小伙伴可自行研究展開了
Actuator安全建議
- 設置Actuator獨立端口,并且不對外開放
- 設置特定訪問IP地址,非設定IP自動攔截
- 設置訪問路徑不采取默認路徑
- 按需開放端點
- 搭配security模塊進行訪問加密
以上就是SpringBoot應用監(jiān)控Actuator使用隱患及解決方案的詳細內容,更多關于SpringBoot Actuator使用隱患的資料請關注腳本之家其它相關文章!
相關文章
Jenkins集成sonarQube實現(xiàn)代碼質量檢查過程圖解
這篇文章主要介紹了Jenkins集成sonarQube實現(xiàn)代碼質量檢查過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-09-09Springboot轉發(fā)重定向實現(xiàn)方式解析
這篇文章主要介紹了springboot轉發(fā)重定向實現(xiàn)方式解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-03-03詳解springboot通過Async注解實現(xiàn)異步任務及回調的方法
這篇文章主要介紹了springboot通過Async注解實現(xiàn)異步任務及回調,文中通過一個簡單示例來直觀的理解什么是同步調用,在單元測試用例中,注入?SyncTask?對象,并在測試用例中執(zhí)行?doTaskOne(),doTaskTwo(),doTaskThree()?三個方法,具體實現(xiàn)方式跟隨小編一起看看吧2022-05-05seata-1.4.0安裝及在springcloud中使用詳解
這篇文章主要介紹了seata-1.4.0安裝及在springcloud中使用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12IDEA下使用MyBatisCodeHelper插件的方法詳解
這篇文章主要介紹了IDEA下使用MyBatisCodeHelper插件的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09