Spring Boot 探索 | 服務監控與管理 Actuator
先在這裡
宣告
一下:這一系列的文章都是自己查詢網上資料學習而來,不可避免有些內容從其他地方copy過來,如有侵犯請聯絡我刪除,謝謝!(引用部分都會添加註腳
)
本系列文章的寫作環境為:
Spring Boot 2.0.7.RELEASE
、JDK 1.8.0_131
、IntelliJ IDEA ULTIMATE 2018.1
。並沒有使用最新版本的Spring Boot進行學習,新版本還不穩定,存在很多問題,不要把時間花費在無謂的BUG上。
微服務的特點決定了功能模組的部署是分散式的,大部分功能模組都是執行在不同的機器上,彼此通過服務呼叫進行互動,前後臺的業務流會經過很多個微服務的處理和傳遞,出現了異常如何快速定位是哪個環節出現了問題?1
在這種框架下,微服務的監控顯得尤為重要。本文主要結合Spring Boot Actuator,跟大家一起分享微服務Spring Boot Actuator的常見用法,方便我們在日常中對我們的微服務進行監控治理。
1 Actuator 介紹
Actuator
是Spring Boot
專案中非常強大一個功能,有助於對應用程式進行監視和管理,通過 restful api
請求來監管、審計、收集應用的執行情況,針對微服務而言它是必不可少的一個環節…2
2 Actuator 配置過程
2.1 pom.xml 新增依賴
Actuator監控只需要新增以下依賴就可以完成:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId >spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
注意:spring-boot-starter-web依賴是必須要新增的。否則會報如下錯誤:
2.2 配置啟動類
啟動類不需要進行任何新增或修改。
2.3 application.yml基礎配置
Actuator 不需要新增或修改任何配置,新增完成後直接啟動應用即可。在這裡只說明一下最基本的配置:
server.port: 8080
management.server.port: 8088
配置解釋:
server.port
:服務例項(應用本身,即未新增Actuator前)的監聽埠;management.server.port
:為了安全一般都啟用獨立的埠來訪問後端的監控資訊,預設與server.port
相同;
配置完成之後,啟動專案就可以繼續驗證各個監控功能了。
2.4 Controller、Service等
Actuator監控不需要Controller、Service等,只需簡單配置就可以。
2.5 配置/測試/展示結果
關於端點大家可以看我的這篇文章:Spring Boot 探索 | Actuator 端點詳細說明
2.5.1 禁用/開啟和暴露端點
要更改暴露的端點,可以使用include和exclude屬性:
屬性 | 預設 |
---|---|
management.endpoints.web.exposure.exclude |
|
management.endpoints.web.exposure.include |
info, health |
include 屬性列出了暴露的端點的 id,exclude 屬性列出不應暴露的端點的id,exclude 屬性優先於 include 屬性。
以開啟 shutdown 端點為例,在application.yml檔案中新增如下配置項:
management.endpoint.shutdown.enabled: true # 啟用端點
management.endpoints.web.exposure.include: info,health,shutdown # 暴露端點
重新啟動應用,訪問結果如下(因為是post請求,我們使用postman):
注意:只有
啟用埠
並暴露埠
才能正常訪問 shutdown 端點。
2.5.2 修改端點對映路徑
預設情況下,通過使用端點的ID在/actuator路徑下通過HTTP公開端點,例如,health端點在/actuator/health下公開(如下圖所示)。
如果希望將端點對映到不同的路徑,可以使用management.endpoints.web.path-mapping
屬性。例如,在application.yml檔案中新增如下配置項:
management.endpoints.web.path-mapping.health: healthcheck # 將 health 端點重新對映為 healthcheck
此時,對映路徑為/actuator/healthcheck(如下圖所示):
2.5.3 修改基本路徑
如果你想要更改基本路徑,你可以使用management.endpoints.web.base-path
。例如,在application.yml檔案中新增如下配置項:
management.endpoints.web.base-path: /monitor
此時,對映路徑全部以/monitor為字首(如下圖所示):
這裡需要注意一點:
- 如果沒有設定
management.server.port
,management.endpoints.web.base-path
是相對於server.servlet.context-path
的; - 如果設定了
management.server.port
,management.endpoints.web.base-path
是相對於management.server.servlet.context-path
的;
不理解的小夥伴可以自己嘗試一下就好了。
4 附加補充
4.1 其他引數
# 禁用HTTP端點。如果不希望通過HTTP公開端點,則可以將管理埠設定為-1
management.port: -1
# 端點為不帶任何引數的讀取操作自動快取響應,下面的示例將beans端點快取的生存時間設定為10秒
management.endpoint.beans.cache.time-to-live: 10s
# 暴露所有端點。*在YAML中有特殊的含義,所以如果要包含(或排除)所有端點,請務必新增引號
management.endpoints.web.exposure.include: "*"
# 設定端點是否啟用的預設值。示例為禁用所有的端點
management.endpoints.enabled-by-default: false
4.2 其他功能介紹3
4.2.1 CORS支援
跨源資源共享(CORS)是W3C規範,允許你靈活地指定授權的跨域請求型別,如果你使用Spring MVC或Spring WebFlux,可以配置Actuator的web端點來支援這些場景。
CORS支援在預設情況下是禁用的,並且只在management.endpoints.web.cors.allowed-origins
屬性已設定時才啟用,以下配置允許從example.com域GET和POST呼叫:
management.endpoints.web.cors.allowed-origins: http://example.com
management.endpoints.web.cors.allowed-methods: GET,POST
4.2.2 健康資訊
health 端點公開的資訊取決於management.endpoint.health.show-details
屬性,可以取如下的值:
never
:不顯示細節;when-authorized
:詳細資訊只顯示給授權使用者,可以使用management.endpoint.health.roles
配置授權角色;always
:詳細資訊顯示給所有使用者
預設值是 never,當用戶處於端點配置的一個或多個角色中時,就被認為是經過授權的。如果端點沒有配置角色(預設),則認為所有經過身份驗證的使用者都是經過授權的。
健康資訊是從你的ApplicationContext中定義的所有HealthIndicator bean中收集的,Spring Boot包括許多自動配置的HealthIndicators(如下面表格所示),並且你也可以自己寫。
以下的 HealthIndicators 在適當的時候,Spring Boot會自動配置:
檢查器型別 | 描述 |
---|---|
CassandraHealthIndicator | 檢查Cassandra資料庫是否已啟動 |
DiskSpaceHealthIndicator | 檢查低磁碟空間 |
DataSourceHealthIndicator | 檢查能否獲得到DataSource 的連線 |
ElasticsearchHealthIndicator | 檢查Elasticsearch叢集是否已啟動 |
InfluxDbHealthIndicator | 檢查InfluxDB服務是否已啟動 |
JmsHealthIndicator | 檢查JMS代理是否已啟動 |
MailHealthIndicator | 檢查郵件服務是否已啟動 |
MongoHealthIndicator | 檢查Mongo資料庫是否已啟動 |
Neo4jHealthIndicator | 檢查Neo4j服務是否已經啟動 |
RabbitHealthIndicator | 檢查Rabbit服務是否已經啟動 |
RedisHealthIndicator | 檢查Redis服務是否已啟動 |
SolrHealthIndicator | 檢查Solr服務是否已啟動 |
可以通過設定
management.health.defaults.enabled
屬性來禁用它們所有。
4.2.3 自定義管理伺服器地址
可以通過設定management.server.address
屬性來指定管理端點使用的IP地址(一臺物理機可以安裝多塊網絡卡,或虛擬出多個IP)。
注意:只有當管理埠與應用本身(服務提供者)使用埠不同時,才能監聽不同的地址。
比如我的機器有兩個IP地址,分別為:192.168.1.10 和 192.168.1.11。其中,應用本身使用192.168.1.10地址。我們在 application.yml 檔案中新增如下配置項:
management.server.port: 8081
management.server.address: 192.168.1.11
其他服務消費者呼叫服務時仍然呼叫192.168.1.10上的服務,要使用 Actuator 需要使用 192.168.1.11 地址。
4.2.4 配置管理特定SSL
當配置為使用自定義埠時,管理伺服器還可以使用各種management.server.ssl.*
屬性配置自己的SSL。例如,這樣做可以讓管理伺服器通過HTTP可用,而主應用程式使用HTTPS,如下面的屬性設定所示:
server.port: 8443
server.ssl.enabled: true
server.ssl.key-store: classpath:store.jks
server.ssl.key-password: secret
management.server.port: 8080
management.server.ssl.enabled: false
或者,主伺服器和管理伺服器都可以使用SSL,但金鑰儲存不同,如下所示:
server.port: 8443
server.ssl.enabled: true
server.ssl.key-store: classpath:main.jks
server.ssl.key-password: secret
management.server.port: 8080
management.server.ssl.enabled: true
management.server.ssl.key-store: classpath:management.jks
management.server.ssl.key-password: secret
4.2.3 Actuator 在 Spring Boot 1.X 和Spring Boot 2.X 的差異
配置Key之間的變化:
1.X 屬性 | 2.X 屬性 |
---|---|
endpoints..* | management.endpoint..* |
endpoints.cors.* | management.endpoints.web.cors.* |
endpoints.jmx.* | management.endpoints.jmx.* |
management.address | management.server.address |
management.context-path | management.server.servlet.context-path |
management.ssl.* | management.server.ssl.* |
management.port | management.server.port |
根節點發生了變化:
2.X 比1.X 多了一個根路徑: /actuator 。當然你也可以通過 management.endpoints.web.base-path 設定一個根節點。如果你設定 management.server.servlet.context-path=/management 和 management.endpoints.web.base-path=/application,你就可以使用下面的路徑訪問 /health 端點:/management/application/health 。
注意:context-path只有在設定了 management.server.port 時才有效。
一些端點發生變化(API):
- /autoconfig:更名為 /conditions;
- /docs:被廢棄;
- /trace:更名為 /httptrace;
- /dump:更名為 /threaddump。
4.3 遺留問題
暫無,不過需要分析原始碼。
4.4 原始碼地址
原始碼:https://gitee.com/liupeifeng3514/SpringBoot-Learning
接下文……,我們詳細的說明一下 Actuator 內建的端點。