SpringBoot之Actuator

一冬耿、Spring Boot Actuator作用

1.1 Spring Boot Actuator作用:

  • 健康檢查
  • 審計(jì)
  • 統(tǒng)計(jì)
  • 監(jiān)控
  • HTTP追蹤

? Actuator同時還可以與外部應(yīng)用監(jiān)控系統(tǒng)整合微服,比如 Prometheus, Graphite, DataDog, Influx, Wavefront, New Relic等。這些系統(tǒng)提供了非常好的儀表盤更舞、圖標(biāo)蝗肪、分析和告警等功能,使得你可以通過統(tǒng)一的接口輕松的監(jiān)控和管理你的應(yīng)用幸乒。

? Actuator使用Micrometer來整合上面提到的外部應(yīng)用監(jiān)控系統(tǒng)胀葱。這使得只要通過非常小的配置就可以集成任何應(yīng)用監(jiān)控系統(tǒng)党涕。

? 以下是一些非常有用的actuator endpoints列表,可以在official documentation上面看到完整的列表巡社。

Endpoint ID Description
auditevents 顯示應(yīng)用暴露的審計(jì)事件 (比如認(rèn)證進(jìn)入、訂單失敗)
info 顯示應(yīng)用的基本信息
health 顯示應(yīng)用的健康狀態(tài)
metrics 顯示應(yīng)用多樣的度量信息
loggers 顯示和修改配置的loggers
logfile 返回log file中的內(nèi)容(如果logging.file或者logging.path被設(shè)置)
httptrace 顯示HTTP足跡手趣,最近100個HTTP request/repsponse
env 顯示當(dāng)前的環(huán)境特性
flyway 顯示數(shù)據(jù)庫遷移路徑的詳細(xì)信息
liquidbase 顯示Liquibase 數(shù)據(jù)庫遷移的纖細(xì)信息
shutdown 讓你逐步關(guān)閉應(yīng)用
mappings 顯示所有的@RequestMapping路徑
scheduledtasks 顯示應(yīng)用中的調(diào)度任務(wù)
threaddump 執(zhí)行一個線程dump
heapdump 返回一個GZip壓縮的JVM堆dump

1.2 打開和關(guān)閉Actuator Endpoints

默認(rèn)晌该,只有healthinfo通過HTTP暴露了出來

默認(rèn),上述所有的endpoints都是打開的绿渣,除了shutdown endpoint朝群。

你可以通過設(shè)置management.endpoint..enabled to true or false(id是endpoint的id)來決定打開還是關(guān)閉一個actuator endpoint。

舉個例子中符,要想打開shutdown endpoint姜胖,增加以下內(nèi)容在你的application.properties文件中:

management.endpoint.shutdown.enabled=true

1.3 暴露Actuator Endpoints

默認(rèn),素偶偶的actuator endpoint通過JMX被暴露淀散,而通過HTTP暴露的只有healthinfo右莱。

以下是你可以通過應(yīng)用的properties可以通過HTTP和JMX暴露的actuator endpoint。

  • 通過HTTP暴露Actuator endpoints档插。

    # Use "*" to expose all endpoints, or a comma-separated list to expose selected ones
    management.endpoints.web.exposure.include=health,info 
    management.endpoints.web.exposure.exclude=
    
    
  • 通過JMX暴露Actuator endpoints慢蜓。

    # Use "*" to expose all endpoints, or a comma-separated list to expose selected ones
    management.endpoints.jmx.exposure.include=*
    management.endpoints.jmx.exposure.exclude=
    
    

1.4 使用Spring Security來保證Actuator Endpoints安全

Actuator endpoints是敏感的,必須保障進(jìn)入是被授權(quán)的郭膛。如果Spring Security是包含在你的應(yīng)用中晨抡,那么endpoint是通過HTTP認(rèn)證被保護(hù)起來的。

如果沒有则剃, 你可以增加以下以來到你的應(yīng)用中去:

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

接下去看一下如何覆寫spring security配置耘柱,并且定義你自己的進(jìn)入規(guī)則。下面的例子展示了一個簡單的spring security配置棍现。它使用叫做EndPointRequestReqeustMatcher工廠模式來配置Actuator endpoints進(jìn)入規(guī)則调煎。

package com.example.actuator.config;

import org.springframework.boot.actuate.autoconfigure.security.servlet.EndpointRequest;
import org.springframework.boot.actuate.context.ShutdownEndpoint;
import org.springframework.boot.autoconfigure.security.servlet.PathRequest;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
public class ActuatorSecurityConfig extends WebSecurityConfigurerAdapter {

    /*
        This spring security configuration does the following

        1. Restrict access to the Shutdown endpoint to the ACTUATOR_ADMIN role.
        2. Allow access to all other actuator endpoints.
        3. Allow access to static resources.
        4. Allow access to the home page (/).
        5. All other requests need to be authenticated.
        5. Enable http basic authentication to make the configuration complete.
           You are free to use any other form of authentication.
     */

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                    .requestMatchers(EndpointRequest.to(ShutdownEndpoint.class))
                        .hasRole("ACTUATOR_ADMIN") // 角色
                    .requestMatchers(EndpointRequest.toAnyEndpoint())
                        .permitAll()
                    .requestMatchers(PathRequest.toStaticResources().atCommonLocations())
                        .permitAll()
                    .antMatchers("/")
                        .permitAll()
                    .antMatchers("/**")
                        .authenticated()
                .and()
                .httpBasic();
    }
}

為了能夠測試以上的配置,你可以在application.yaml中增加spring security用戶己肮。

# Spring Security Default user name and password
spring:
  security:
    user:
      name: actuator
      password: actuator
      roles: ACTUATOR_ADMIN

完整代碼見 Github

二汛蝙、如何使用

啟用 Actuator 最簡單方式是添加 spring-boot-starter-actuator ‘Starter’依賴烈涮。

注意:不同版本對應(yīng)的yaml或者properties參數(shù)不同。

1窖剑、pom.xml

<!-- 2坚洽、監(jiān)控 —— Actuator插件 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

2、application.yml

spring-boot-starter-actuator對應(yīng)2.0版本以上

management:
  endpoints:
    # 暴露 EndPoint 以供訪問西土,有jmx和web兩種方式讶舰,exclude 的優(yōu)先級高于 include
    jmx:
      exposure:
        exclude: '*'
        include: '*'
    web:
      exposure:
      # exclude: '*'
        include: ["health","info","beans","mappings","logfile","metrics","shutdown","env"]
      base-path: /actuator  # 配置 Endpoint 的基礎(chǔ)路徑
      cors: # 配置跨域資源共享
        allowed-origins: http://example.com
        allowed-methods: GET,POST
    enabled-by-default: true # 修改全局 endpoint 默認(rèn)設(shè)置
  endpoint:
    auditevents: # 1、顯示當(dāng)前引用程序的審計(jì)事件信息需了,默認(rèn)開啟
      enabled: true
      cache:
        time-to-live: 10s # 配置端點(diǎn)緩存響應(yīng)的時間
    beans: # 2跳昼、顯示一個應(yīng)用中所有 Spring Beans 的完整列表,默認(rèn)開啟
      enabled: true
    conditions: # 3肋乍、顯示配置類和自動配置類的狀態(tài)及它們被應(yīng)用和未被應(yīng)用的原因鹅颊,默認(rèn)開啟
      enabled: true
    configprops: # 4、顯示一個所有@ConfigurationProperties的集合列表墓造,默認(rèn)開啟
      enabled: true
    env: # 5堪伍、顯示來自Spring的 ConfigurableEnvironment的屬性,默認(rèn)開啟
      enabled: true
    flyway: # 6觅闽、顯示數(shù)據(jù)庫遷移路徑帝雇,如果有的話,默認(rèn)開啟
      enabled: true
    health: # 7蛉拙、顯示健康信息尸闸,默認(rèn)開啟
      enabled: true
      show-details: always
    info: # 8、顯示任意的應(yīng)用信息孕锄,默認(rèn)開啟
      enabled: true
    liquibase: # 9吮廉、展示任何Liquibase數(shù)據(jù)庫遷移路徑,如果有的話畸肆,默認(rèn)開啟
      enabled: true
    metrics: # 10茧痕、展示當(dāng)前應(yīng)用的metrics信息,默認(rèn)開啟
      enabled: true
    mappings: # 11恼除、顯示一個所有@RequestMapping路徑的集合列表踪旷,默認(rèn)開啟
      enabled: true
    scheduledtasks: # 12、顯示應(yīng)用程序中的計(jì)劃任務(wù)豁辉,默認(rèn)開啟
      enabled: true
    sessions: # 13令野、允許從Spring會話支持的會話存儲中檢索和刪除(retrieval and deletion)用戶會話。使用Spring Session對反應(yīng)性Web應(yīng)用程序的支持時不可用徽级。默認(rèn)開啟气破。
      enabled: true
    shutdown: # 14、允許應(yīng)用以優(yōu)雅的方式關(guān)閉餐抢,默認(rèn)關(guān)閉
      enabled: true
    threaddump: # 15现使、執(zhí)行一個線程dump
      enabled: true
    # web 應(yīng)用時可以使用以下端點(diǎn)
    heapdump: # 16低匙、    返回一個GZip壓縮的hprof堆dump文件,默認(rèn)開啟
      enabled: true
    jolokia: # 17碳锈、通過HTTP暴露JMX beans(當(dāng)Jolokia在類路徑上時顽冶,WebFlux不可用),默認(rèn)開啟
      enabled: true
    logfile: # 18售碳、返回日志文件內(nèi)容(如果設(shè)置了logging.file或logging.path屬性的話)强重,支持使用HTTP Range頭接收日志文件內(nèi)容的部分信息,默認(rèn)開啟
      enabled: true
    prometheus: #19贸人、以可以被Prometheus服務(wù)器抓取的格式顯示metrics信息间景,默認(rèn)開啟
      enabled: true

? 這大抵就是全部默認(rèn)的 Endpoint 的配置了,怎么樣艺智?強(qiáng)大吧倘要!之前做了一個網(wǎng)絡(luò)監(jiān)控的項(xiàng)目,就是能夠?qū)崟r查看服務(wù)器的 CPU十拣、內(nèi)存封拧、磁盤、IO 這些(基于 sigar.jar 實(shí)現(xiàn))父晶,然后現(xiàn)在發(fā)現(xiàn) Spring-Boot 就這樣輕松支持了,還更強(qiáng)大弄跌,更簡便......

? 默認(rèn)的 Endpoint 映射前綴是 /actuator(2.0版本以上已經(jīng)默認(rèn)沒有base-path為"/"了甲喝,注意),可以通過如上 base-path 自定義設(shè)置铛只。

? 每個 Endpoint 都可以配置開啟或者禁用埠胖。但是僅僅開啟 Endpoint 是不夠的,還需要通過 jmx 或者 web 暴露他們淳玩,通過 exclude 和 include 屬性配置直撤。

三、深入學(xué)習(xí)資料

1蜕着、官網(wǎng)地址

Spring Boot Actuator: Production-ready Features 見 https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-features.html#production-ready-endpoints

2谋竖、Spring Boot Actuator: Production-ready features

3、Micrometer: Spring Boot 2’s new application metrics collector

附 參考文章:

1承匣、http://www.reibang.com/p/d5943e303a1f

2蓖乘、Spring Boot Actuator: Health check, Auditing, Metrics gathering and Monitoring

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市韧骗,隨后出現(xiàn)的幾起案子嘉抒,更是在濱河造成了極大的恐慌,老刑警劉巖袍暴,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件些侍,死亡現(xiàn)場離奇詭異隶症,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)岗宣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門蚂会,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人狈定,你說我怎么就攤上這事颂龙。” “怎么了纽什?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵措嵌,是天一觀的道長。 經(jīng)常有香客問我芦缰,道長企巢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任让蕾,我火速辦了婚禮浪规,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘探孝。我一直安慰自己笋婿,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布顿颅。 她就那樣靜靜地躺著缸濒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪粱腻。 梳的紋絲不亂的頭發(fā)上庇配,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天,我揣著相機(jī)與錄音绍些,去河邊找鬼捞慌。 笑死,一個胖子當(dāng)著我的面吹牛柬批,可吹牛的內(nèi)容都是我干的啸澡。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼氮帐,長吁一口氣:“原來是場噩夢啊……” “哼锻霎!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起揪漩,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤旋恼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體冰更,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡产徊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蜀细。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舟铜。...
    茶點(diǎn)故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖奠衔,靈堂內(nèi)的尸體忽然破棺而出谆刨,到底是詐尸還是另有隱情,我是刑警寧澤归斤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布痊夭,位于F島的核電站,受9級特大地震影響脏里,放射性物質(zhì)發(fā)生泄漏她我。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一迫横、第九天 我趴在偏房一處隱蔽的房頂上張望番舆。 院中可真熱鬧,春花似錦矾踱、人聲如沸恨狈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽禾怠。三九已至,卻和暖如春圣蝎,著一層夾襖步出監(jiān)牢的瞬間刃宵,已是汗流浹背衡瓶。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工徘公, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人哮针。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓关面,卻偏偏與公主長得像,于是被迫代替她去往敵國和親十厢。 傳聞我的和親對象是個殘疾皇子等太,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評論 2 344