注释
基本标准计划于 2025 年 3 月 17 日进入退休期。 有关详细信息,请参阅 Azure Spring Apps 停用公告。
标准消耗和专用计划于 2024 年 9 月 30 日进入停用期,并将在 2025 年 3 月底之前完全关闭。
从 Azure Spring Apps 过渡到 Azure 容器应用时,你会发现类似的可观测性功能,但存在一些主要差异。 本文重点介绍了这些差异,并介绍了如何在 Azure 容器应用中监视应用程序。
先决条件
- 现有的 Azure 容器应用。 更多信息,请参阅快速入门:使用 Azure 门户部署你的第一个应用程序。
- Azure CLI。
日志
配置日志记录选项
使用 Azure 容器应用可以在 Azure 容器应用环境中管理日志记录。
可以在 Azure Log Analytics 和 Azure Monitor 中存储日志。 如果选择 Azure Monitor,则可以在环境设置中找到诊断设置菜单,类似于 Azure Spring Apps 中的诊断设置菜单。
使用 Azure CLI 创建环境时,如以下示例所示,将预配自动生成的 Log Analytics 工作区。
az containerapp env create \
--resource-group MyResourceGroup \
--name MyContainerappEnvironment \
--location chinanorth2
还可以使用以下命令创建具有现有 Log Analytics 工作区的环境:
az containerapp env create \
--resource-group MyResourceGroup \
--name MyContainerappEnvironment \
--logs-workspace-id myLogsWorkspaceID \
--logs-workspace-key myLogsWorkspaceKey \
--location chinanorth2
分析日志
使用 Azure 容器应用可以从容器控制台流式传输日志。 以下列表描述了日志记录的主要差异:
控制台日志:对于控制台日志,请查询 Azure 容器应用中的
ContainerAppConsoleLogs_CL
表,而不是 Azure Spring Apps 中使用的ApplicationConsole
表。系统日志:Azure Spring Apps 为 Config Server、服务注册表、API 门户、应用程序配置服务和 Spring Cloud Gateway 提供
SystemLogs
。 在 Azure 容器应用中,需要将这些组件预配为单独的应用程序并在ContainerAppConsoleLogs_CL
表中查询其日志,在查询中指定每个应用的名称。生成日志:使用 Paketo Buildpack 从本地生成生成日志在 Azure 容器应用中不可用,这与 Azure Spring Apps 不同。
查看日志
默认情况下,Azure 容器应用将日志直接发送到 Azure Log Analytics。 但是,如果选择在 Azure Monitor 中存储日志,表名和列名可能不同。 在 Azure Monitor 中,表名和列名不包括后缀。 例如,在为 Azure Monitor 中存储的日志创建查询时,请使用 ContainerAppConsoleLogs
而不是 ContainerAppConsoleLogs_CL
,使用 Log
而不是 Log_s
。
若要查看 Azure 容器应用中的控制台日志,请使用以下查询作为示例:
ContainerAppConsoleLogs_CL
| limit 50
Azure Log Analytics 使用 Kusto 引擎运行,以便查询日志进行分析。 有关使用 Kusto 查询日志的简介,请参阅 Log Analytics 教程。
显示应用程序日志
若要查看应用程序日志列表(按时间排序,首先显示最新的日志),请使用以下查询:
ContainerAppConsoleLogs_CL
| project TimeGenerated, EnvironmentName_s, ContainerAppName_s, RevisionName_s, Log_s
| sort by TimeGenerated desc
显示包含错误或异常的日志条目
若要查看提及错误或异常的未排序日志条目,请使用以下查询:
ContainerAppConsoleLogs_CL
| project TimeGenerated, EnvironmentName_s, ContainerAppName_s, RevisionName_s, Log_s
| where Log_s contains "error" or Log_s contains "exception"
使用此查询查找错误,或修改查询词以查找特定的错误代码或异常。
显示应用程序在过去一小时内报告的错误和异常数
若要创建显示应用程序在过去一小时内记录的错误数和异常数的饼图,请使用以下查询:
ContainerAppConsoleLogs_CL
| where TimeGenerated > ago(1h)
| where Log_s contains "error" or Log_s contains "exception"
| summarize count_per_app = count() by ContainerAppName_s
| sort by count_per_app desc
| render piechart
显示 Spring Cloud Gateway 日志
若要查看 Spring Cloud Gateway 日志的日志条目,请使用以下查询:
ContainerAppSystemLogs_CL
| where ComponentType_s == "SpringCloudGateway"
| project TimeGenerated, ComponentType_s, EnvironmentName_s, ComponentName_s, Log_s
| limit 100
显示 Eureka 服务器日志
若要查看 Eureka 服务器日志的日志条目,请使用以下查询:
ContainerAppSystemLogs_CL
| where ComponentType_s == "SpringCloudEureka"
| project TimeGenerated, ComponentType_s, EnvironmentName_s, ComponentName_s, Log_s
| limit 100
指标
下表映射 Azure Spring Apps 和 Azure 容器应用之间的指标:
常见
Azure Spring Apps 指标名称 | Azure 容器应用指标名称 |
---|---|
应用 CPU 使用情况 | 无 |
应用内存使用情况 | 无 |
应用网络流入量 | 无 |
应用网络流出量 | 无 |
错误指标
Azure Spring Apps 指标名称 | Azure 容器应用指标名称 |
---|---|
tomcat.global.error |
无 |
性能指标
Azure Spring Apps 指标名称 | Azure 容器应用指标名称 |
---|---|
system.cpu.usage |
CPU 使用率百分比(预览版) |
process.cpu.usage |
无 |
应用内存使用情况 | 无 |
jvm.memory.committed |
jvm.memory.committed |
jvm.memory.used |
jvm.memory.used |
jvm.memory.max |
无 |
其他 JVM 指标 | 无 |
.NET 性能指标
Azure Spring Apps 指标名称 | Azure 容器应用指标名称 |
---|---|
CPU 使用率 | CPU 使用率百分比(预览版) |
工作集 | 内存工作集字节数 |
GC 堆大小 | 无 |
第 0 代 GC 计数 | 无 |
其他 GC 指标 | 无 |
请求指标
Azure Spring Apps 指标名称 | Azure 容器应用指标名称 |
---|---|
tomcat.global.sent |
无 |
tomcat.global.request.total.count |
请求 |
.NET 请求指标
Azure Spring Apps 指标名称 | Azure 容器应用指标名称 |
---|---|
每秒请求数 | 无 |
请求总数 | 请求 |
会话指标
Azure Spring Apps 指标名称 | Azure 容器应用指标名称 |
---|---|
tomcat.sessions.active.max |
无 |
tomcat.sessions.alive.max |
无 |
Azure 容器应用中 Java 应用的 Java 指标
如果选择 Java 作为 Azure 容器应用的开发堆栈,则监视 Java 虚拟机 (JVM) 指标对于确保应用程序的运行状况和性能至关重要。 有关详细信息,请参阅 Azure 容器应用中 Java 应用的 Java 指标。
托管组件
有关托管组件监视数据,请参阅以下文章:
整合
Azure 容器应用提供了多种内置可观测性功能,可帮助监视和诊断应用程序的状态。 但是,如果要使用 Azure Monitor Application Insights 或其他应用性能监控代理(APM),则需要将监测工具添加到应用程序代码中。
与应用程序性能监测集成
有关与 Azure Monitor Application Insights 或其他 APM 的集成,请参阅将应用程序性能监视集成到容器映像。
OpenTelemetry 代理(预览版)
可以通过将 OpenTelemetry 数据代理与 Azure 容器应用环境配合使用,将 OpenTelemetry 格式的可观测性数据发送到 Azure Monitor Application Insights、Datadog 或任何与 OTLP 兼容的端点等目标。 托管代理通过允许更改目标终结点来简化配置,而无需手动运行或重新配置代理。 若要进行设置,请使用 ARM 模板、Bicep 或 Azure CLI 在容器环境中配置代理,并通过安装 OpenTelemetry SDK 和为指标、日志或跟踪编写代码来准备应用程序。 请务必事先设置目标服务,例如 Application Insights。 每个目标都有特定要求,并且代理仅在正确配置和检测时才发送数据。 有关详细信息,请参阅在 Azure 容器应用中收集和读取 OpenTelemetry 数据。
自定义仪表板和警报
在 Azure 容器应用上部署应用程序时,自定义仪表板可以依赖于两种不同的数据溯源方法:
应用集成的 APM 代理:如果在生成过程中将第三方 APM 代理集成到应用程序中,这些代理会将指标和日志直接发送到 APM 平台。 在这种情况下,只要应用程序代码保持不变,就无需修改仪表板。
基于 Azure Monitor 的仪表板:如果仪表板使用 Azure Monitor 中的指标和日志(例如,通过 Application Insights API、Azure 事件中心或 Azure 存储),则可能需要更新它们以反映特定于 Azure 容器应用的指标名称、命名空间或日志结构。 请务必根据特定于 Azure 容器应用的指标映射和数据结构查看和更新仪表板。
仔细验证仪表板配置,以确保在过渡到 Azure 容器应用后保持准确。
故障排除
Azure 容器应用不提供 API 来为 Java 应用程序生成堆转储或线程转储。 若要创建这些转储,需要通过控制台连接到容器应用。 然后,使用 jmap
或 jstack
命令在容器中生成转储文件。 之后,将生成的文件复制到本地计算机以供进一步分析。
还可以使用 jcmd
命令在正在运行的应用程序中执行相同的操作并启动 Java Flight Recorder (JFR)。 有关如何通过控制台访问容器应用的详细信息,请参阅连接到 Azure 容器应用中的容器控制台。
已知的限制
- 结构化日志:Azure 容器应用不支持结构化应用程序日志。 如果应用程序日志遵循 Azure Spring Apps 架构,则完整的 JSON 字符串将显示在
Log_s
的ContainerAppConsoleLogs_CL
列中。 - 流入量日志:虽然 Azure Spring Apps 具有内置的流入量访问日志,但 Azure 容器应用没有。 需要在应用程序代码中实现访问日志记录来捕获此数据。
- Azure 容器应用不提供应用生命周期事件。
- Azure 容器应用没有对流入量指标的内置支持。 需要在应用程序中实现自定义跟踪。