共用方式為


在 Azure 容器應用程式中連線到適用於 Spring 的受控管理員

適用於 Spring 的管理員受控元件會提供 Spring Boot Web 應用程式的系統管理介面,此介面會公開 Actuator 端點。 作為 Azure 容器應用程式中的受控元件,您可以輕鬆地將容器應用程式繫結至適用於 Spring 的管理員,以進行無縫整合和管理。

本教學課程說明如何建立適用於 Spring 的管理員 Java 元件,並將其繫結至您的容器應用程式,以便您可以輕鬆地監視和管理 Spring 應用程式。

螢幕擷取畫面:顯示適用於 Spring 的管理員深入解析儀表板概觀。

在本教學課程中,您會了解如何:

  • 建立適用於 Spring 的管理員 Java 元件。
  • 將容器應用程式繫結至適用於 Spring 的管理員 Java 元件。

如果您想要整合適用於 Spring 的管理員與適用於 Spring 的 Eureka 伺服器,請改為參閱在容器應用程式中整合適用於 Spring 的管理員與適用於 Spring 的 Eureka 伺服器 (部分機器翻譯)。

重要事項

本教學課程所使用的服務,可能會影響您的 Azure 帳單。 如果您決定跟著一起操作,請務必刪除本文中介紹的資源,以免產生非預期的帳單。

先決條件

考量

當您在容器應用程式中執行適用於 Spring 的管理員元件時,請注意下列詳細資料:

Item 說明
Scope 元件會在與連線的容器應用程式相同的環境中執行。
調整大小 元件無法擴展。 縮放屬性 minReplicasmaxReplicas 都會設定為 1
資源 已修正元件的容器資源配置。 CPU 核心數為 0.5,記憶體容量為 1 GB。
定價 元件的計費會低於使用量型定價。 受管理元件所消耗的資源會依據資源使用量,依據主動或閒置費率計費。 您可以刪除不再使用的元件來停止計費。
繫結 容器應用程式會透過繫結連線到元件。 繫結會將設定插入到容器應用程式的環境變數中。 建立繫結之後,容器應用程式就可以從環境變數中讀取設定值,並連線到元件。

安裝程式

在開始使用 Admin for Spring 元件之前,您必須建立必要的資源。

下列命令可協助您建立資源群組和容器應用程式環境。

  1. 建立變數以支援您的應用程式設定。 這些值是針對本課程的目的而向您提供的。

    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 容器應用程式中所使用的容器映像。
  2. 使用 Azure CLI 登入 Azure。

    az login
    
  3. 建立資源群組。

    az group create \
        --name $RESOURCE_GROUP \
        --location $LOCATION \
        --query "properties.provisioningState"
    

    當您使用 --query 參數時,回應會簡化為僅顯示成功或失敗的訊息。

  4. 建立容器應用程式環境。

    az containerapp env create \
        --name $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --location $LOCATION
    

使用元件

現在您已擁有現有的環境,接下來您可以建立容器應用程式,並將其繫結至適用於 Spring 的管理員元件的 Java 元件執行個體。

  1. 建立適用於 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
    
  2. 更新適用於 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 元件

  1. 建立容器應用程式,並將其繫結至適用於 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 角色。 您可以在該資源上明確指派 OwnerContributor 角色。 您也可以依照步驟建立自訂角色定義,並將該定義指派給您的帳戶。

附註

儀錶板無法在 21Vianet 營運的 Azure 中使用。

  1. 建立自訂角色定義。

    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>"]
    }'
    

    請務必將 <> 括號之間的預留位置取代為您的值。

  2. 將自訂角色指派給您在受控環境資源上的帳戶。

    取得受控環境的資源識別碼:

    export ENVIRONMENT_ID=$(az containerapp env show \
        --name $ENVIRONMENT --resource-group $RESOURCE_GROUP \ 
        --query id \
        --output tsv)
    
  3. 將角色指派給您的帳戶。

    在執行此命令之前,請將角括弧 <> 所示的預留位置,取代為您使用者或服務主體的識別碼或角色名稱。

    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 中指派的名稱。

  4. 取得適用於 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。 透過該儀表板,您也可以查看容器應用程式,如下列螢幕擷取畫面所示。

    螢幕擷取畫面:顯示適用於 Spring 的管理員儀表板概觀。

清除資源

您在本教學課程中建立的資源會影響您的 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 開始,healthinfo 以外的端點預設為不公開。 您可以在 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 失敗要求的預設重試次數。 不會重試修改資料(PUTPOSTPATCHDELETE)的要求。 您可以使用 spring.boot.admin.monitor.retries.* 覆寫特定端點的個別值。 0
spring.boot.admin.monitor.retries.* 包含每個 endpointId 重試次數的索引鍵/值組。 不會重試修改資料(PUTPOSTPATCHDELETE)的要求。 預設為 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"

一般設定

  • 記錄相關設定:

限制

  • Spring Boot 系統管理儀錶板無法在 21Vianet 營運的 Azure 中使用。

整合適用於 Spring 的受控管理員與適用於 Spring 的 Eureka 伺服器