一冬耿、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)晌该,只有health
和info
通過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暴露的只有health
和info
右莱。
以下是你可以通過應(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配置棍现。它使用叫做EndPointRequest
的ReqeustMatcher
工廠模式來配置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