您好,登錄后才能下訂單哦!
Spring Boot 2.x中Actuator的作用是什么,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
1. 前言
Spring Boot 提供了很多開箱即用的starter,其中有一款非常特別的starter——actuator 。它是用來對Spring Boot 應用進行監控、指標采集、管理,并提供一些很有用的端點(endpoint)來實現上述功能。這有助于我們對Spring Boot 應用進行監視和管理。我們本文將探討Spring Boot 2.x下的actuator的一些知識點。
2. 集成
像其它starter一樣,通過非常簡單的依賴集成即可開箱即用。我們通過在項目中引入(以maven為例):
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
3. endpoints
Actuator的核心是端點(endpoint),我們通過端點來獲取應用的一些監控信息或者通過端點來改變系統的一些狀態。Actuator中內置了非常多的端點:
id | 描述 | 默認是否啟用 |
---|---|---|
auditevents | 顯示當前應用程序的審計事件信息 | Yes |
beans | 顯示應用Spring Beans的完整列表 | Yes |
caches | 顯示可用緩存信息 | Yes |
conditions | 顯示自動裝配類的狀態及及應用信息 | Yes |
configprops | 顯示所有 @ConfigurationProperties 列表 | Yes |
env | 顯示 ConfigurableEnvironment 中的屬性 | Yes |
flyway | 顯示 Flyway 數據庫遷移信息 | Yes |
health | 顯示應用的健康信息(未認證只顯示status,認證顯示全部信息詳情) | Yes |
info | 顯示任意的應用信息 | Yes |
liquibase | 展示Liquibase 數據庫遷移 | Yes |
metrics | 展示當前應用的 metrics 信息 | Yes |
mappings | 顯示所有 @RequestMapping 路徑集列表 | Yes |
scheduledtasks | 顯示應用程序中的計劃任務 | Yes |
sessions | 允許從Spring會話支持的會話存儲中檢索和刪除用戶會話。 | Yes |
shutdown | 允許應用以優雅的方式關閉(默認情況下不啟用) | No |
threaddump | 執行一個線程dump | Yes |
httptrace | 顯示HTTP跟蹤信息(默認顯示最后100個HTTP請求 - 響應交換) | Yes |
heapdump | 返回一個GZip壓縮的hprof堆dump文件 | Yes |
prometheus | Prometheus服務器抓取的格式顯示metrics信息 | Yes |
3.1 啟用與關閉
默認情況下除了shutdown是關閉的其它端點都是啟用的。個別端點的啟用依賴其他組件,比如我們上篇文章介紹的Prometheus。我們可以在Spring Boot 配置文件中通過配置(id參見上表)management.endpoint.<id>.enabled來配置端點是否啟用。
另外我們可以通過management.endpoints.enabled-by-default來修改全局端口默認配置,以下示例啟用info端點并禁用所有其他端點:
# 先設置所有的端點默認為關閉 management.endpoints.enabled-by-default=false # 然后開啟info 端點 management.endpoint.info.enabled=true
3.2 開放與封閉
特別需要我們注意的是,以上只是我們開啟的端點功能,并不意味我們把這些端點暴露給應用之外的環境中去。暴露的配置規則是 management.endpoints.<web|jmx>.exposure.<include|exclude>我們以web為例,通過以下方式來暴露web端點:
# * 為暴露所有web端點,如果暴露的是一個列表請使用端點 id 并以逗號隔開 management.endpoints.web.exposure.include='*'
同樣的如果我們要排除一些web端點請用 management.endpoints.web.exposure.exclude來配置。我們可以通過/actuator來列舉暴露的端點。當然這個路徑取決于我們對management.endpoints.web.basePath的配置。
3.3 安全性
對于生產環境來說端點都是敏感的。我們當然不希望非法的訪問端點,特別如/shutdown這種端點。我們可以通過上面3.1、3.2進行關閉、封閉操作。也可直接配置management.server.port=-1 來關閉管理端點。或者確保在外面的安全框架諸如Spring security的控制之下。即保證 EndpointRequest.toAnyEndpoint()的安全性。
3.4 自定義端點
Spring Boot 2.x 開始,Actuator支持CRUD模型,而不是舊的RW(讀/寫)模型。我們可以按照兩種策略來自定義:
@Endpoint 同時支持JMX和http
@JmxEndpoint 只支持JMX技術
@WebEndpoint 只支持http
通過在一個端點類(必須是Spring Bean)上添加上面其中一個來表明該類是一個端點類。
在類的方法使用@ReadOperation,@WriteOperation或@DeleteOperation,這分別會映射到Http中的 GET、POST、DELETE(對http來說)。 以下是我們自定義的一個端點:
@Component @Endpoint(id = "features") public class FeaturesEndpoint { private Map<String, Feature> features = new ConcurrentHashMap<>(); @ReadOperation public Map<String, Feature> features() { return features; } @ReadOperation public Feature feature(@Selector String name) { return features.get(name); } @WriteOperation public void configureFeature(@Selector String name, Feature feature) { features.put(name, feature); } @DeleteOperation public void deleteFeature(@Selector String name) { features.remove(name); } public static class Feature { private Boolean enabled; // [...] getters and setters } }
注意請務必保證端點的id在該應用中唯一。
3.5 端點擴展
假設我們想要確保我們的應用程序的生產實例永遠不是SNAPSHOT版本。我們決定通過更改返回此信息的Actuator端點(/info)來完成此操作。如果我們的應用程序恰好是SNAPSHOT。我們將獲得不同的HTTP狀態代碼。
我們可以使用@EndpointExtension或其更具體的@EndpointWebExtension、@EndpointJmxExtension輕松擴展預定義端點的行為:
@Component @EndpointWebExtension(endpoint = InfoEndpoint.class) public class InfoWebEndpointExtension { private InfoEndpoint delegate; // standard constructor @ReadOperation public WebEndpointResponse<Map> info() { Map<String, Object> info = this.delegate.info(); Integer status = getStatus(info); return new WebEndpointResponse<>(info, status); } private Integer getStatus(Map<String, Object> info) { // return 5xx if this is a snapshot return 200; } }
3.6 Spring Boot metrics
運維應用監控依賴于對應用度量(metric)指標的抽取。Spring Boot 2.x中的Actuator 對Micrometer的自動配置。 甚至我們可以通過一個叫MeterRegistry的Spring Bean來注冊一個自定義的metric指標。我們可以通過/actuator/metrics端點獲取所有的metric指標。 也可以通過/actuator/metrics/{metricName} 來獲取具體度量的元數據。
Micrometer 是一個應用度量門面類庫,類似SLF4。后面我會專門寫一篇文章來介紹這個知識點。請關注我的公眾號:Felordcn 以保證第一時間獲取相關的知識。
關于Spring Boot 2.x中Actuator的作用是什么問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。