教程:在 Azure 容器应用中连接到适用于 Spring 的管理控制台
适用于 Spring 的控制台托管组件为公开执行器终结点的 Spring Boot Web 应用程序提供了一个管理界面。 作为 Azure 容器应用中的托管组件,可以轻松地将容器应用绑定到适用于 Spring 的控制台,以便无缝集成和管理。
本教程介绍如何创建适用于 Spring 的控制台 Java 组件并将其绑定到容器应用,以便轻松监视和管理 Spring 应用程序。
本教程介绍如何执行下列操作:
- 创建适用于 Spring 的控制台 Java 组件。
- 将容器应用绑定到适用于 Spring 的控制台 Java 组件。
若要将适用于 Spring 的控制台与 Eureka Server for Spring 集成,请参阅在容器应用中将适用于 Spring 的控制台与 Eureka Server for Spring 服务器集成。
重要
本教程使用的服务可能会影响 Azure 帐单。 如果你决定按步骤操作,请确保删除本文中特别推荐的资源,以避免意外计费。
先决条件
注意事项
在 Azure 容器应用中运行适用于 Spring 的控制台组件时,请注意以下详细信息:
项 | 说明 |
---|---|
范围 | 组件与连接的容器应用在同一环境中运行。 |
缩放 | 组件无法缩放。 缩放属性 minReplicas 和 maxReplicas 都设置为 1 。 |
资源 | 为组件分配的容器资源是固定的。 CPU 核心数为 0.5,内存大小为 1Gi。 |
定价 | 组件计费低于基于消耗量的定价。 托管组件消耗的资源按活动/空闲费率计费。 可以删除不再使用的组件以停止计费。 |
Binding | 容器应用通过绑定连接到组件。 绑定将配置注入容器应用环境变量。 建立绑定后,容器应用可以从环境变量读取配置值并连接到该组件。 |
安装
在开始使用适用于 Spring 的控制台组件之前,首先需要创建所需的资源。
以下命令可帮助你创建资源组和容器应用环境。
创建变量来支持应用程序配置。 这些值是为了本课程的目的而向你提供的。
export LOCATION=chinaeast 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 cloud set -n AzureChinaCloud az login # az cloud set -n AzureCloud //means return to Public Azure.
创建资源组。
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
绑定操作将容器应用绑定到适用于 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
角色。 可以在资源上显式分配 Owner
或 Contributor
角色。 也可按照以下步骤创建自定义角色定义,并将其分配给你的帐户。
创建自定义角色定义。
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>"] }'
确保将
<>
括号中的占位符替换为你的值。将自定义角色分配给托管环境资源上的帐户。
获取托管环境的资源 ID:
export ENVIRONMENT_ID=$(az containerapp env show \ --name $ENVIRONMENT --resource-group $RESOURCE_GROUP \ --query id \ --output tsv)
将角色分配给帐户。
运行此命令之前,请将
<>
括号指示的占位符替换为用户或服务主体 ID 以及角色名称。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>
可配置属性
从 Spring Boot 2 开始,默认情况下,不会公开除 health
和 info
以外的终结点。 可通过在 application.properties 文件中添加以下配置来公开它们。
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always
“适用于 Spring 的控制台”的允许配置列表
以下列表详细介绍了可为应用配置的控制台组件属性。 有关详细信息,请参阅 Spring Boot 控制台。
属性名称 | 说明 | 默认值 |
---|---|---|
spring.boot.admin.server.enabled |
启用 Spring Boot 控制台服务器。 | true |
spring.boot.admin.context-path |
管理为服务器静态资产和 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 输出中清理)的键的元数据值。 从 Spring Boot 3 开始,默认屏蔽所有执行器值。 有关如何配置取消清理过程的详细信息,请参阅清理敏感值。 | ".*password$", ".*secret$", ".*key$", ".*token$", ".*credentials.*", ".*vcap_services$" |
spring.boot.admin.probed-endpoints |
对于 Spring Boot 1.x 客户端应用程序,Spring Boot 控制台使用 OPTIONS 请求探测指定终结点。 如果路径与 ID 不同,可将此值指定为 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 |
启用或禁用 toast 通知。 | false |
spring.boot.admin.ui.title |
浏览器的窗口标题值。 | "" |
spring.boot.admin.ui.brand |
导航标头中呈现的 HTML 代码,默认为 Spring Boot 控制台标签。 默认情况下,Spring Boot 控制台徽标后跟其名称。 | "" |
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
写入日志文件。