筆者寄語: 筆者最近去醫院檢查了一下,脂肪肝,反思了筆者之前的惡習,在這裏給廣大程序猿朋友們一些建議:
- 少熬夜
- 少久坐,多運動
- 少點外賣,儘量自己做飯
Spring Boot Actuator主要用於監控和度量SpringBoot應用程序。主要有三種觀察Actuator信息的方式:
Web端點
、遠程shell
、JMX
。本文主要介紹相對常用的方式:通過Web端點(即:通過瀏覽器訪問URL)觀察Actuator的統計信息。
聲明: 以下內容基於SpringBoot2.x。
Spring Boot Actuator的使用:
第一步:在SpringBoot項目的pom.xml中引入actuator依賴。
<!-- actuator監控 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
第二步:配置application.yml或application.properties,使actuator端點可訪問。
actuator端點可訪問的前提是:目標端點已啓用
且已暴露
。但由於默認情況下,Actuator已啓用了除shutdown之外的所有端點,所以如果想訪問的端點不是shutdown的話,我們只需要保證該端點已暴露即可。
-
啓用/禁用端點: 通過配置
management.endpoint.<端點id>.enabled
爲true/false
來啓用/禁用
端點,如:# 啓用shutdown對應的端點 management.endpoint.shutdown.enabled=true # 禁用端點id爲<health>的端點 management.endpoint.health.enabled=false
提示一:在下文中,會羅列出Actuator所有的端點id及相應的說明。
提示二:Actuator會默認啓用除shutdown之外的所有端點,如果嫌默認啓用的端點過多,只想啓用其中一兩個端點的話,我們可以先設置默認關閉所有端點(management.endpoints.enabled-by-default=false),然後再指定啓用我們需要的端點(management.endpoint.<端點id>.enabled=true),如:
-
暴露/隱藏端點: 通過配置
management.endpoints.web.exposure.include=xxx
來暴露Web端點
;通過配置management.endpoints.web.exposure.exclude=xxx
來隱藏(不暴露)Web端點
。其中xxx
可以是一個端點id
,也可以是通配符*(表示所有端點id)
,還可以是多個端點id(多個端點id之間使用逗號分割)
,如:# 暴露所有端點 management.endpoints.web.exposure.include=* # 隱藏(不暴露)端點 # management.endpoints.web.exposure.exclude=info # 隱藏(不暴露)端點 management.endpoints.web.exposure.exclude=env,beans
注:這裏暴露/隱藏端點的方式是針對Web端點的,如果是jmx的話,key是management.endpoints.jmx.exposure.include或management.endpoints.jmx.exposure.exclude。
注:Web端點默認暴露的有info、health。
第三步:訪問Web端點(ip
:端口
/${management.endpoints.web.base-path}
/${端點-id}
),觀察監控信息。
示例訪問(端點id爲)env的端點信息:
注:低版本SpringBoot的management.endpoints.web.base-path值默認爲/,高版本SpringBoot
的management.endpoints.web.base-path
值默認爲actuator
。可通過主動設置其值來改變uri
,如設置management.endpoints.web.base-path=/abc後
,觀察env信息,就需要訪問ip:端口/abc/env
了。
注:如果訪問Web端點時,需要跨域的話,那麼可參考這樣配置:
# 以下配置允許來自 example.com 域的 GET 和 POST 調用
management.endpoints.web.cors.allowed-origins=http://example.com
management.endpoints.web.cors.allowed-methods=GET,POST
Actuator端點ID及說明:
端點ID | 說明 | 已默認開啓 | Web端點已默認暴露 |
---|---|---|---|
auditevents | 暴露當前應用程序的審計事件信息。 | 是 | 否 |
beans | 顯示應用程序中所有 Spring bean 的完整列表。 | 是 | 否 |
conditions | 顯示在配置和自動配置類上評估的條件以及它們匹配或不匹配的原因。 | 是 | 否 |
configprops | 顯示所有 @ConfigurationProperties 的校對清單。 | 是 | 否 |
env | 暴露全部環境屬性。 | 是 | 否 |
flyway | 顯示已應用的 Flyway 數據庫遷移。 | 是 | 否 |
health | 報告應用程序的健康指標,這些值由HealthIndicator的實現類提供。 注:health有三個標準: never(默認):默認不顯示細節信息。 when-authorized:當鑑權通過時,才顯示細節信息。 always:總是顯示細節信息。 注:可在配置文件中形如management.endpoint.health.show-details=always來配置使用哪一個標準。 注:health的細節信息可包含的東西較全,如:磁盤、數據庫、RabbitMQ、Solr、MongoDB、Redis、jms、mail等等。 |
是 | 是 |
httptrace | 顯示 HTTP 追蹤信息(默認情況下,最後 100 個 HTTP 請求/響應交換)。 | 是 | 否 |
info | 獲取應用程序的定製信息,這些信息由info打頭的屬性提供。 注:可自定義,如:info.key=value。 |
是 | 是 |
integrationgraph | 顯示 Spring Integration 圖。 | 是 | 否 |
loggers | 顯示和修改應用程序中日誌記錄器的配置。 | 是 | 否 |
liquibase | 顯示已應用的 Liquibase 數據庫遷移。 | 是 | 否 |
metrics | 報告各種應用程序度量信息,比如內存用量和HTTP請求計數。 | 是 | 否 |
mappings | 描述全部的URI路徑,以及它們和控制器(包含Actuator端點)的映射關係。 | 是 | 否 |
scheduledtasks | 顯示應用程序中的調度任務。 | 是 | 否 |
sessions | 允許從 Spring Session 支持的會話存儲中檢索和刪除用戶會話。當使用 Spring Session 的響應式 Web 應用程序支持時不可用。 | 是 | 否 |
shutdown | 正常關閉應用程序。 | 否 | 否 |
threaddump | 執行線程 dump。 | 是 | 否 |
如果使用web應用(Spring MVC, Spring WebFlux, 或者 Jersey),還有附加端點:
端點ID | 說明 | 已默認開啓 | Web端點已默認暴露 |
---|---|---|---|
heapdump | 返回一個堆dump 文件。 | 是 | 否 |
jolokia | 通過 HTTP 暴露 JMX bean(當 Jolokia 在 classpath 上時,不適用於 WebFlux)。 | 是 | 否 |
logfile | 返回日誌文件的內容(如果已設置logging.file 或 logging.path 屬性)。支持使用 HTTP Range 頭來檢索部分日誌文件的內容。 注:在SpringBoot高版本里,使用logging.file.path代替logging.path;使用logging.file.name代替logging.file。 注:logging.file.name可具體指定到哪一個日誌文件名;logging.file.path只能指定到日誌文件所在的目錄,會默認指向該目錄下名爲Spring.log的日誌文件。 |
是 | 否 |
prometheus | 以可以由 Prometheus 服務器抓取的格式暴露指標。 | 是 | 否 |
Actuator常用端點使用示例:
-
env端點(訪問ip:端口/actuator/env): 查看所有配置屬性(系統屬性、環境變量、應用配置等等)。
注:如果想要單獨查看env下某一項的配置,那麼可訪問/actuator/env/xxx即可,如:
-
beans端點(訪問ip:端口/actuator/beans): 查看Spring中Ioc的beans。
-
conditions端點(訪問ip:端口/actuator/conditions): SpringBoot中,autoconfig的一些類及其條件信息(含:哪些自動配置成功,哪些自動配置失敗,哪些無條件自動配置)。
展開一個,觀察一下:
爲了方便理解,可看一下MybatisPlusAutoConfiguration類的源碼:
-
mappings端點(訪問ip:端口/actuator/mappings): 描述全部的URI路徑,以及它們和控制器(包含Actuator端點)的映射關係。
-
metrics端點(訪問ip:端口/actuator/metrics): 報告各種應用程序度量信息,比如內存、系統、jdbc、http、tomcat等等。
示例查看cpu數量:
-
httptrace端點(訪問ip:端口/actuator/httptrace): 查看(最近100條)HTTP請求信息。
-
threaddump端點(訪問ip:端口/actuator/threaddump): 查看線程dump信息。
-
health端點(訪問ip:端口/actuator/health): 查看應用的健康信息。
-
info端點(訪問ip:端口/actuator/info): 定製info信息。
比如在application.properties文件中配置有信息:
那麼訪問/actuator/info就可看到:
-
logfile端點(訪問ip:端口/actuator/logfile): 用瀏覽器直接查看日誌文件的內容。
在系統配置文件中,使用logging.file(或logging.file.name)指定日誌文件:
然後,訪問/actuator/logfile:
-
configprops端點(訪問ip:端口/actuator/configprops): 顯示所有 @ConfigurationProperties 的校對清單。
爲了方便理解,可看一下HttpTraceProperties類的源碼:
聲明: 本文只是Actuator入門,更多Actuator用法與細節可自行查閱相關文檔資料。
^_^ 如有不當之處,歡迎指正
^_^ 參考資料
《Spring Boot實戰》Craig Walls 著,丁雪豐 譯
《深入淺出Spring Boot》楊開振 著
^_^ 參考鏈接
https://docs.spring.io/spring-boot/docs…
https://docshome.gitbooks.io/springboot…
^_^ 本文已經被收錄進《程序員成長筆記(六)》,筆者JustryDeng