1. 程式人生 > >Spring Boot 探索 | 服務監控與管理 Actuator

Spring Boot 探索 | 服務監控與管理 Actuator

先在這裡宣告一下:這一系列的文章都是自己查詢網上資料學習而來,不可避免有些內容從其他地方copy過來,如有侵犯請聯絡我刪除,謝謝!(引用部分都會添加註腳

本系列文章的寫作環境為:Spring Boot 2.0.7.RELEASEJDK 1.8.0_131IntelliJ IDEA ULTIMATE 2018.1。並沒有使用最新版本的Spring Boot進行學習,新版本還不穩定,存在很多問題,不要把時間花費在無謂的BUG上。

微服務的特點決定了功能模組的部署是分散式的,大部分功能模組都是執行在不同的機器上,彼此通過服務呼叫進行互動,前後臺的業務流會經過很多個微服務的處理和傳遞,出現了異常如何快速定位是哪個環節出現了問題?1

在這種框架下,微服務的監控顯得尤為重要。本文主要結合Spring Boot Actuator,跟大家一起分享微服務Spring Boot Actuator的常見用法,方便我們在日常中對我們的微服務進行監控治理。

1 Actuator 介紹


ActuatorSpring 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.portmanagement.endpoints.web.base-path是相對於server.servlet.context-path的;
  • 如果設定了 management.server.portmanagement.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 內建的端點。


  1. springboot(十九):使用Spring Boot Actuator監控應用 ↩︎

  2. 一起來學SpringBoot | 第十四篇:強大的 actuator 服務監控與管理 ↩︎

  3. Spring Boot 參考指南(端點) ↩︎