适用于 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 的控制台组件之前,首先需要创建所需的资源。
要创建为创建容器应用所必要的每个资源,请遵照以下步骤:
在 Azure 门户中搜索“容器应用”,然后选择“创建”。
在“基本信息”选项卡上,输入下列值:
属性 值 订阅 选择 Azure 订阅。 资源组 选择“新建”来创建一个名为 my-resource-group
的新资源组。容器应用名称 输入 sample-admin-client。 部署源 选择“容器映像”。 区域 选择离你最近的区域。 容器应用环境 选择“新建”以创建新环境。 在“创建容器应用环境”窗口中,输入以下值:
属性 Value 环境名称 输入“my-environment”。 区域冗余 选择“已禁用”。 选择“创建”,然后选择“容器”选项卡。
在“容器”选项卡中,输入以下值:
属性 值 名称 输入 sample-admin-client。 映像源 选择“Docker Hub 或其他注册表”。 图像类型 选择“公共”。 注册表登录服务器 输入 mcr.microsoft.com。 映像和标记 输入 javacomponents/samples/sample-admin-for-spring-client:latest。 选择“入口”选项卡。
在“入口”选项卡中,输入以下值,并在窗体的其余部分中填充默认值。
属性 Value 流入量 选择启用。 入口流量 选择“接受来自任何位置的流量”。 入口类型 选择 HTTP。 目标端口 输入“8080”。 选择“查看 + 创建”。
验证检查通过后,选择“创建”以创建容器应用。
有了现有的环境和管理员客户端容器应用后,你现在可以创建适用于 Spring 的控制台 Java 组件实例。
在门户中转到你的容器应用的环境。
在服务菜单上的“服务”下,选择“服务”。
选择“配置”下拉列表,然后选择“Java 组件”。
在“配置 Java 组件”面板中,输入以下值:
属性 Value Java 组件类型 选择“适用于 Spring 的控制台”。 Java 组件名称 输入 admin。 选择下一步。
在“查看”选项卡中,选择“配置”。
在门户中转到你的容器应用环境。
在服务菜单上的“服务”下,选择“服务”。
从列表中选择“管理员”。
在“绑定”下,选择“应用名称”下拉列表,然后选择 sample-admin-client。
选择“审阅”选项卡。
选择配置。
在门户中返回到你的容器应用。 将你的应用的 URL 复制到文本编辑器,以便在下一步中使用。
绑定操作将容器应用绑定到适用于 Spring 的控制台 Java 组件。 容器应用现在可以从环境变量(主要是 SPRING_BOOT_ADMIN_CLIENT_URL
属性)读取配置值并连接到适用于 Spring 的控制台组件。
绑定还会注入以下属性:
"SPRING_BOOT_ADMIN_CLIENT_INSTANCE_PREFER-IP": "true",
此属性指示连接到适用于 Spring 的控制台服务器时,适用于 Spring 的控制台组件客户端应首选容器应用实例的 IP 地址。
在门户中转到你的容器应用环境。
在服务菜单上的“服务”下,选择“服务”。
从列表中选择“管理员”。
在“绑定”下,找到 sample-admin-client 行,将其选中,然后选择“删除”。
选择下一步。
选择“审阅”选项卡。
选择配置。
重要
要查看仪表板,至少需要在托管环境资源上向你的帐户分配 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 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
写入日志文件。