Spring Boot 的生產級特性--Actuator監控端點

Spring Boot 生產級的特性java

Spring Boot 有許多開箱即用的模塊或者說插件,其中 spring-boot-actuator 提供了大量的生產級的特性。添加 spring-boot-starter-actuator 的 maven 依賴:web

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

端點

Actuator 模塊提供一系列的 HTTP 請求,這些請求都是 GET 類型的,不帶任何請求參數,可用經過他們獲取 Spring Boot 應用程序的相關信息。這些入口就是 端點 (Endpoint)spring

ID 描述
auditevents 公開當前應用程序的審計事件信息
beans 獲取 Spring bean 的完整列表
caches 獲取可用的緩存
conditions 顯示自動配置類的評估和配置條件,以及它們匹配或不匹配的緣由。
configprops 顯示配置項信息(經過@ConfigurationProperties配置)
env 獲取 Spring 應用的環境變量信息 ConfigurableEnvironment
flyway 顯示已應用的Flyway數據庫遷移信息
health 顯示應用健康檢查信息
httptrace 顯示HTTP跟蹤信息(默認狀況下,最新100個HTTP請求)
info 顯示當前應用信息
integrationgraph 顯示 Spring 集成圖
loggers 顯示和修改應用程序中記錄器的配置
liquibase 顯示已應用的Liquibase數據庫遷移的信息
metrics 顯示當前應用程序的「度量」指標信息
mappings 顯示全部@RequestMapping的映射路徑信息
scheduledtasks 顯示應用程序中的任務計劃
sessions 容許從Spring Session支持的會話存儲中檢索和刪除用戶會話。使用Spring Session對響應式Web應用程序的支持時不可用
shutdown 容許應用程序正常關閉(默認狀況下不開啓這個端點)
threaddump 執行線程轉儲

訪問這些端點須要 前綴 /actuator/ + 加上端點ID(spring boot 2.0以後須要加上 /actuator/),如 health 端點映射路徑爲 /actuator/health數據庫

端點啓用和關閉

默認狀況下,除 shutdown 的全部端點都是開啓的,咱們能夠根據實際狀況自由的控制哪些端點啓用,哪些關閉,甚至還能夠修改默認的端點名稱。瀏覽器

配置端點的啓用緩存

management.endpoint.<id>.enabled,如啓用 shutdown 端點安全

management.endpoint.shutdown.enabled=true

若是想要端點啓用是選擇加入而不是選擇退出,將management.endpoints.enabled-by-default屬性設置 爲false,並使用各個端點 enabled 屬性從新加入。如下示例啓用info端點並禁用全部其餘端點session

management.endpoints.enabled-by-default=false
management.endpoint.info.enabled=true

暴露端點

暴露端點

咱們啓動了 spring boot 以後,在瀏覽器地址欄中分別輸入:app

http://localhost:8080/actuator/healthmaven

http://localhost:8080/actuator/beans

前面說默認狀況下大部分端點都是開啓的,那爲什麼端點 health 是能夠訪問到的,而端點 beans 確不行呢?

緣由是這些端點每每顯示的都是項目的敏感信息,默認狀況下,在 Web 下,Spring Boot 只會暴露 info h和 health 這兩個端點,其他的都不暴露

想要改變暴露的端點,要使用 includeexclude 屬性

屬性 默認
management.endpoints.jmx.exposure.exclude
management.endpoints.jmx.exposure.include *
management.endpoints.web.exposure.exclude
management.endpoints.web.exposure.include info, health

爲了讓 Actuator 暴露端點,能夠配置

management.endpoints.web.exposure.include=health,info,beans

這樣就能夠訪問 beans 端點了(http://localhost:8080/actuator/beans

暴露端點的安全性問題

在默認狀況下,Actuator 對敏感信息是除了health 和 info 端點, 其他端點都是不暴露的。雖然能夠經過配置 application.properties 這樣的方式能夠進行訪問,可是這樣的方式從安全的角度來講是很是不利的

可使用 Spring Security 配置用戶和角色,來解決這些敏感信息的訪問權限問題,引入spring-boot-starter-security , 而後配置用戶和角色

@Configuration
public class ActuatorSecurity extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.requestMatcher(EndpointRequest.toAnyEndpoint()).authorizeRequests()
                .anyRequest().hasRole("ENDPOINT_ADMIN")
                .and()
            .httpBasic();
    }

}

上面的示例用於 EndpointRequest.toAnyEndpoint() 將請求與任何端點進行匹配,而後確保全部端點都具備該ENDPOINT_ADMIN角色。其餘幾種匹配方法也可用EndpointRequest

這個時候能夠配置application.properties:

management.endpoints.web.exposure.include=*

經過這樣的配置就能夠把全部的端點都暴露出來,只是在Spring Security 中,對應保護的端點需 要擁有對應的權限才能夠進行訪問

相關文章
相關標籤/搜索