適用於 Spring 的管理員受控元件會提供 Spring Boot Web 應用程式的系統管理介面,此介面會公開 Actuator 端點。 作為 Azure 容器應用程式中的受控元件,您可以輕鬆地將容器應用程式繫結至適用於 Spring 的管理員,以進行無縫整合和管理。
本教學課程說明如何建立適用於 Spring 的管理員 Java 元件,並將其繫結至您的容器應用程式,以便您可以輕鬆地監視和管理 Spring 應用程式。
在本教學課程中,您會了解如何:
- 建立適用於 Spring 的管理員 Java 元件。
- 將容器應用程式繫結至適用於 Spring 的管理員 Java 元件。
如果您想要整合適用於 Spring 的管理員與適用於 Spring 的 Eureka 伺服器,請改為參閱在容器應用程式中整合適用於 Spring 的管理員與適用於 Spring 的 Eureka 伺服器 (部分機器翻譯)。
重要事項
本教學課程所使用的服務,可能會影響您的 Azure 帳單。 如果您決定跟著一起操作,請務必刪除本文中介紹的資源,以免產生非預期的帳單。
先決條件
考量
當您在容器應用程式中執行適用於 Spring 的管理員元件時,請注意下列詳細資料:
| Item | 說明 |
|---|---|
| Scope | 元件會在與連線的容器應用程式相同的環境中執行。 |
| 調整大小 | 元件無法擴展。 縮放屬性 minReplicas 與 maxReplicas 都會設定為 1。 |
| 資源 | 已修正元件的容器資源配置。 CPU 核心數為 0.5,記憶體容量為 1 GB。 |
| 定價 | 元件的計費會低於使用量型定價。 受管理元件所消耗的資源會依據資源使用量,依據主動或閒置費率計費。 您可以刪除不再使用的元件來停止計費。 |
| 繫結 | 容器應用程式會透過繫結連線到元件。 繫結會將設定插入到容器應用程式的環境變數中。 建立繫結之後,容器應用程式就可以從環境變數中讀取設定值,並連線到元件。 |
安裝程式
在開始使用 Admin for Spring 元件之前,您必須建立必要的資源。
下列命令可協助您建立資源群組和容器應用程式環境。
建立變數以支援您的應用程式設定。 這些值是針對本課程的目的而向您提供的。
export LOCATION=eastus export RESOURCE_GROUP=my-resource-group export ENVIRONMENT=my-environment export JAVA_COMPONENT_NAME=admin export APP_NAME=sample-admin-client export IMAGE="mcr.microsoft.com/javacomponents/samples/sample-admin-for-spring-client:latest"變數 描述 LOCATION您在其中建立容器應用程式和 Java 元件的 Azure 區域位置。 ENVIRONMENT示範應用程式的容器應用程式環境名稱。 RESOURCE_GROUP示範應用程式的 Azure 資源群組名稱。 JAVA_COMPONENT_NAME針對容器應用程式所建立 Java 元件的名稱。 在本案例中,您會建立適用於 Spring 的管理員 Java 元件。 IMAGE容器應用程式中所使用的容器映像。 使用 Azure CLI 登入 Azure。
az login建立資源群組。
az group create \ --name $RESOURCE_GROUP \ --location $LOCATION \ --query "properties.provisioningState"當您使用
--query參數時,回應會簡化為僅顯示成功或失敗的訊息。建立容器應用程式環境。
az containerapp env create \ --name $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --location $LOCATION
使用元件
現在您已擁有現有的環境,接下來您可以建立容器應用程式,並將其繫結至適用於 Spring 的管理員元件的 Java 元件執行個體。
建立適用於 Spring 的管理員 Java 元件。
az containerapp env java-component admin-for-spring create \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $JAVA_COMPONENT_NAME \ --min-replicas 1 \ --max-replicas 1更新適用於 Spring 的管理員 JAVA 元件。
az containerapp env java-component admin-for-spring update \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $JAVA_COMPONENT_NAME \ --min-replicas 2 \ --max-replicas 2
將容器應用程式繫結至適用於 Spring 的管理員 JAVA 元件
建立容器應用程式,並將其繫結至適用於 Spring 的管理員元件。
az containerapp create \ --name $APP_NAME \ --resource-group $RESOURCE_GROUP \ --environment $ENVIRONMENT \ --image $IMAGE \ --min-replicas 1 \ --max-replicas 1 \ --ingress external \ --target-port 8080 \ --bind $JAVA_COMPONENT_NAME
繫結作業會將容器應用程式連線至 Admin for Spring Java 元件。 容器應用程式現在可以從環境變數中讀取設定值 (主要是 SPRING_BOOT_ADMIN_CLIENT_URL 屬性),並連線至適用於 Spring 的管理員元件。
繫結也會插入下列屬性:
"SPRING_BOOT_ADMIN_CLIENT_INSTANCE_PREFER-IP": "true",
此屬性指出當您連線到 Admin for Spring 伺服器時,Admin for Spring 元件用戶端應該使用容器應用程式執行個體的 IP 位址。
選用:將您的容器應用程式與適用於 Spring 的管理員 Java 元件解除繫結
若要從容器應用程式中移除繫結,請使用 --unbind 選項。
az containerapp update \
--name $APP_NAME \
--unbind $JAVA_COMPONENT_NAME \
--resource-group $RESOURCE_GROUP
檢視儀表板
重要事項
若要檢視儀表板,您的帳戶至少需要在受控環境資源上具有 Microsoft.App/managedEnvironments/write 角色。 您可以在該資源上明確指派 Owner 或 Contributor 角色。 您也可以依照步驟建立自訂角色定義,並將該定義指派給您的帳戶。
附註
儀錶板無法在 21Vianet 營運的 Azure 中使用。
建立自訂角色定義。
az role definition create --role-definition '{ "Name": "<ROLE_NAME>", "IsCustom": true, "Description": "Can access managed Java Component dashboards in managed environments", "Actions": [ "Microsoft.App/managedEnvironments/write" ], "AssignableScopes": ["/subscriptions/<SUBSCRIPTION_ID>"] }'請務必將
<>括號之間的預留位置取代為您的值。將自訂角色指派給您在受控環境資源上的帳戶。
取得受控環境的資源識別碼:
export ENVIRONMENT_ID=$(az containerapp env show \ --name $ENVIRONMENT --resource-group $RESOURCE_GROUP \ --query id \ --output tsv)將角色指派給您的帳戶。
在執行此命令之前,請將角括弧
<>所示的預留位置,取代為您使用者或服務主體的識別碼或角色名稱。az role assignment create \ --assignee <USER_OR_SERVICE_PRINCIPAL_ID> \ --role "<ROLE_NAME>" \ --scope $ENVIRONMENT_ID附註
<USER_OR_SERVICE_PRINCIPAL_ID>值應該是您用來存取 Azure 入口網站的身分識別。<ROLE_NAME>值是您在步驟 1 中指派的名稱。取得適用於 Spring 的管理員儀表板 URL。
az containerapp env java-component admin-for-spring show \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $JAVA_COMPONENT_NAME \ --query properties.ingress.fqdn \ --output tsv此命令會傳回可用來存取適用於 Spring 的管理員儀表板的 URL。 透過該儀表板,您也可以查看容器應用程式,如下列螢幕擷取畫面所示。
清除資源
您在本教學課程中建立的資源會影響您的 Azure 帳單。 如果您不打算長期使用這些服務,請執行下列命令來移除您在本教學課程中建立的所有內容。
az group delete --resource-group $RESOURCE_GROUP
相依性
當您在自己的容器應用程式中使用管理元件時,請在 pom.xml 檔案中新增下列相依性。 將版本號碼取代為 Maven 存放庫 (英文) 上可用的最新版本。
<dependency>
<groupId>de.codecentric</groupId>
<version>3.3.2</version>
<artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>
附註
如果您在 Azure CLI 中執行下列命令,在容器應用程式中啟用 Java 代理程式,則不需要新增 Spring Boot 管理員的系統管理員入門用戶端相依性:
az containerapp update --enable-java-agent \
--resource-group $RESOURCE_GROUP \
--name $APP_NAME
可設定的屬性
從 Spring Boot 2 開始,health 和 info 以外的端點預設為不公開。 您可以在 application.properties 檔案中新增下列設定將這些端點公開。
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always
Spring 管理員允許的設定清單
下列清單詳細說明您可以為應用程式設定的管理員元件屬性。 如需詳細資訊,請參閱 Spring Boot Admin (英文)。
| 屬性名稱 | 描述 | 預設值 |
|---|---|---|
spring.boot.admin.server.enabled |
啟用 Spring Boot Admin Server。 | true |
spring.boot.admin.context-path |
提供 Admin Server 靜態資產和 API 的路徑前置詞。 相對於 Dispatcher-Servlet。 | |
spring.boot.admin.monitor.status-interval |
檢查執行個體狀態的時間間隔 (毫秒)。 | 10,000ms |
spring.boot.admin.monitor.status-lifetime |
狀態的存留期 (毫秒)。 只要上一個狀態未過期,狀態就不會更新。 | 10,000 毫秒 |
spring.boot.admin.monitor.info-interval |
檢查執行個體資訊的時間間隔 (毫秒)。 | 1m |
spring.boot.admin.monitor.info-lifetime |
資訊存留期 (分鐘)。 只要上一個資訊未過期,資訊就不會更新。 | 1m |
spring.boot.admin.monitor.default-timeout |
提出要求時的預設逾時。 您可以使用 spring.boot.admin.monitor.timeout.* 覆寫特定端點的個別值。 |
10,000 |
spring.boot.admin.monitor.timeout.* |
包含每個 endpointId 逾時的索引鍵/值組。 |
預設為 default-timeout 值。 |
spring.boot.admin.monitor.default-retries |
失敗要求的預設重試次數。 不會重試修改資料(PUT、POST、PATCH、DELETE)的要求。 您可以使用 spring.boot.admin.monitor.retries.* 覆寫特定端點的個別值。 |
0 |
spring.boot.admin.monitor.retries.* |
包含每個 endpointId 重試次數的索引鍵/值組。 不會重試修改資料(PUT、POST、PATCH、DELETE)的要求。 |
預設為 default-retries 值。 |
spring.boot.admin.metadata-keys-to-sanitize |
用於清理所有 JSON 輸出中符合這些 RegEx 模式的索引鍵中繼資料值。 從 Spring Boot 3 開始,所有傳動器值預設都會遮罩。 如需如何設定取消清理流程的詳細資訊,請參閱清理敏感值 (英文)。 | ".*password$", ".*secret$", ".*key$", ".*token$", ".*credentials.*", ".*vcap_services$" |
spring.boot.admin.probed-endpoints |
針對 Spring Boot 1.x 用戶端應用程式,Spring Boot Admin 會使用 OPTIONS 要求來探查指定的端點。 如果路徑與識別碼不同,您可以將此值指定為 id:path (例如:health:ping)。 |
"health", "env", "metrics", "httptrace:trace", "threaddump:dump", "jolokia", "info", "logfile", "refresh", "flyway", "liquibase", "heapdump", "loggers", "auditevents" |
spring.boot.admin.instance-proxy.ignored-headers |
對用戶端提出要求時,不要轉送標頭。 | "Cookie", "Set-Cookie", "Authorization" |
spring.boot.admin.ui.title |
顯示的頁面標題。 | "Spring Boot Admin" |
spring.boot.admin.ui.poll-timer.cache |
擷取新快取資料的輪詢持續時間 (毫秒)。 | 2500 |
spring.boot.admin.ui.poll-timer.datasource |
擷取新資料來源資料的輪詢持續時間 (毫秒)。 | 2500 |
spring.boot.admin.ui.poll-timer.gc |
擷取新 gc 資料的輪詢持續時間 (毫秒)。 | 2500 |
spring.boot.admin.ui.poll-timer.process |
擷取新程序資料的輪詢持續時間 (毫秒)。 | 2500 |
spring.boot.admin.ui.poll-timer.memory |
擷取新記憶體資料的輪詢持續時間 (毫秒)。 | 2500 |
spring.boot.admin.ui.poll-timer.threads |
擷取新執行緒資料的輪詢持續時間 (毫秒)。 | 2500 |
spring.boot.admin.ui.poll-timer.logfile |
擷取新記錄檔資料的輪詢持續時間 (毫秒)。 | 1000 |
spring.boot.admin.ui.enable-toasts |
啟用或停用快顯通知。 | false |
spring.boot.admin.ui.title |
瀏覽器的視窗標題值。 | "" |
spring.boot.admin.ui.brand |
在瀏覽標頭中轉譯的 HTML 程式碼,預設為 Spring Boot Admin 標籤。 根據預設,Spring Boot Admin 標誌後面接著其名稱。 | "" |
management.scheme |
用來存取執行器端點的服務 URL 中所取代的值。 | |
management.address |
用來存取執行器端點的服務 URL 中所取代的值。 | |
management.port |
用來存取執行器端點的服務 URL 中所取代的值。 | |
management.context-path |
用來存取執行器端點的服務 URL 所附加的值。 | ${spring.boot.admin.discovery.converter.management-context-path} |
health.path |
用於健康狀態檢查的服務 URL 所附加的值。
EurekaServiceInstanceConverter 會忽略這個項目。 |
${spring.boot.admin.discovery.converter.health-endpoint} |
spring.boot.admin.discovery.enabled |
啟用管理伺服器的 DiscoveryClient 支援。 |
true |
spring.boot.admin.discovery.converter.management-context-path |
當 service-url 值由 management-url 轉換時,附加至所探索服務 DefaultServiceInstanceConverter 的值。 |
/actuator |
spring.boot.admin.discovery.converter.health-endpoint-path |
當 management-url 值由 health-url 轉換時,附加至所探索服務 DefaultServiceInstanceConverter 的值。 |
"health" |
spring.boot.admin.discovery.ignored-services |
使用探索且未註冊為應用程式時會忽略的服務。 支援簡單模式,例如 "foo*"、"*bar" 與 "foo*bar*"。 |
|
spring.boot.admin.discovery.services |
使用探索並註冊為應用程式時所包含的服務。 支援簡單模式,例如 "foo*"、"*bar" 與 "foo*bar*"。 |
"*" |
spring.boot.admin.discovery.ignored-instances-metadata |
如果服務包含至少一個符合此清單內模式的中繼資料專案,則會忽略這些服務。 支援的模式,例如 "discoverable=false"。 |
|
spring.boot.admin.discovery.instances-metadata |
如果服務包含至少一個符合清單內模式的中繼資料專案,則會包含這些服務。 支援的模式,例如 "discoverable=true"。 |
一般設定
- 記錄相關設定:
- logging.level.* (英文)
- logging.group.* (英文)
- 命名空間下的
logging.*任何其他組態。 例如,請勿用於logging.file寫入記錄檔。
限制
- Spring Boot 系統管理儀錶板無法在 21Vianet 營運的 Azure 中使用。