共用方式為


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

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

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

顯示 Spring Insights 儀錶板管理員概觀的螢幕快照。

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

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

如果您想要整合 Spring 的 Admin for Spring 與適用於 Spring 的 Eureka Server,請參閱 在 Container Apps 中將 Spring 的 Admin for Spring 與 Eureka Server 整合。

重要

本教學課程所使用的服務,可能會影響您的 Azure 帳單。 如果您決定要跟著操作,請務必刪除本文中精選的資源,以避免非預期的計費。

必要條件

  • 具有有效訂用帳戶的 Azure 帳戶。 如果您還沒有帳戶,您可以 免費建立一個。
  • Azure CLI

考量

當您在 Container Apps 中執行 Spring 元件的管理員時,請注意下列詳細數據:

項目 說明
範圍 元件會在與連線的容器應用程式相同的環境中執行。
調整大小 元件無法縮放。 縮放屬性 minReplicasmaxReplicas 都會設定為 1
資源 已修正元件的容器資源配置。 CPU 核心數目為 0.5,記憶體大小為 1 Gi。
定價 元件的計費會低於使用量型定價。 受控元件所取用的資源會以使用/閒置費率計費。 您可以刪除不再使用的元件來停止計費。
繫結 容器應用程式會透過繫結連線到元件。 繫結會將設定插入到容器應用程式的環境變數中。 建立系結之後,容器應用程式可以從環境變數讀取元件,並聯機到元件。

設定

開始使用 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 元件的 Admin for 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
    

繫結作業會將容器應用程式繫結至適用於 Spring 的管理員 JAVA 元件。 容器應用程式現在可以從環境變數讀取組態值,主要是 SPRING_BOOT_ADMIN_CLIENT_URL 屬性,並聯機到 Spring 元件的管理員。

繫結也會插入下列屬性:

"SPRING_BOOT_ADMIN_CLIENT_INSTANCE_PREFER-IP": "true",

這個屬性表示當您連線到 Spring 伺服器的管理員時,Spring 元件客戶端應該偏好容器應用程式實例的 IP 位址。

選擇性:從 Spring Java 元件的管理員解除系結您的容器應用程式

若要從容器應用程式中移除繫結,請使用 --unbind 選項。

az containerapp update \
    --name $APP_NAME \
    --unbind $JAVA_COMPONENT_NAME \
    --resource-group $RESOURCE_GROUP

檢視儀表板

重要

若要檢視儀表板,您必須至少將 Microsoft.App/managedEnvironments/write 角色指派給您在受控環境資源上的帳戶。 您可以在資源上明確指派 OwnerContributor 角色。 您也可以遵循步驟來建立自定義角色定義,並將它指派給您的帳戶。

  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

Dependency

當您在自己的容器應用程式中使用系統管理員元件時,您必須在pom.xml檔案中新增下列相依性。 將版本號碼取代為 Maven 存放庫 (英文) 上可用的最新版本。

<dependency>
    <groupId>de.codecentric</groupId>
    <version>3.3.2</version>
    <artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>

可設定的屬性

從 Spring Boot 2 開始,預設不會公開 和 info 以外的端點health。 您可以在 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 management-url 值由 DefaultServiceInstanceConverter 轉換時,附加至所探索服務 service-url 的值。 /actuator
spring.boot.admin.discovery.converter.health-endpoint-path health-url 值由 DefaultServiceInstanceConverter 轉換時,附加至所探索服務 management-url 的值。 "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 的受控管理員與適用於 Spring 的 Eureka 伺服器