你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Log Analytics 监视 Azure 容器应用中的日志

Azure 容器应用与 Azure Monitor Log Analytics 集成,可监视和分析容器应用的日志。 当选择作为日志监视解决方案时,容器应用环境将包含一个 Log Analytics 工作区,该工作区提供一个公共位置来存储环境中运行的所有容器应用中的系统和应用程序日志数据。

可以通过 Azure 门户或使用 Azure CLI 的命令行界面查询 Log Analytics 表来访问日志条目。

容器应用有两种类型的日志。

  • 由应用发出的控制台日志。
  • 由容器应用服务发出的系统日志。

系统日志

容器应用服务在容器应用级别提供系统日志消息。 系统日志发出以下消息:

类型 消息
Dapr 信息 已成功使用范围 <dapr-component-scope> 创建 dapr 组件 <component-name>
Dapr 信息 已成功使用范围 <component-type> 更新 dapr 组件 <component-name>
Dapr 错误 创建 dapr 组件 <component-name> 时出错
卷装载 信息 已成功装载修订 <revision-scope> 的卷 <volume-name>
卷装载 错误 装载卷 <volume-name> 时出错
域绑定 信息 已成功将域 <domain> 绑定到容器应用 <container app name>
身份验证 信息 在应用上启用了身份验证。 正在创建身份验证配置
身份验证 信息 已成功创建身份验证配置
流量权重 信息 正在将修订 <revision-name\> 的流量权重设置为 <percentage>%
修订预配 信息 正在创建新的修订: <revision-name>
修订预配 信息 已成功预配修订 <name>
修订预配 信息 正在停用旧修订,因为“ActiveRevisionsMode=Single”
修订预配 错误 预配修订 <revision-name> 时出错。 错误代码: <[ErrImagePull]|[Timeout]|[ContainerCrashing]>

可以通过查询 ContainerAppSystemLogs_CL 表来访问系统日志数据。 表中最常用的容器应用特定列包括:

说明
ContainerAppName_s 容器应用名称
EnvironmentName_s 容器应用环境名称
Log_s 日志消息
RevisionName_s 修订名称

控制台日志

控制台日志源自容器应用和 Dapr 挎斗的容器中的 stderrstdout 消息。 可以通过查询 ContainerAppConsoleLogs_CL 表来查看控制台日志。

提示

使用定义完善的日志消息检测代码有助于了解代码的执行方式和调试问题。 若要详细了解最佳做法,请参阅运营设计

ContainerAppConsoleLogs_CL 中最常用的容器应用特定列包括:

说明
ContainerAppName_s 容器应用名称
ContainerGroupName_g 副本名称
ContainerId_s 容器标识符
ContainerImage_s 容器映像名称
EnvironmentName_s 容器应用环境名称
Log_s 日志消息
RevisionName_s 修订名称

使用 Log Analytics 查询日志

Log Analytics 是 Azure 门户中的工具,可用于查看和分析日志数据。 可以使用 Log Analytics 编写 Kusto 查询,然后在图表中对结果进行排序、筛选和可视化,以发现趋势并识别问题。 可以通过交互式方式处理查询结果,也可以将结果与其他功能(如警报、仪表板和工作簿)一起使用。

Azure 门户

从容器应用页上的边栏菜单中的“日志”启动 Log Analytics。 还可以从“监视”>“日志”启动 Log Analytics。

可以使用“表”选项卡的 CustomLogs 类别中列出的表来查询日志。此类别中的表为 ContainerAppSystemlogs_CLContainerAppConsoleLogs_CL 表。

Screenshot of the Log Analytics custom log tables.

下面是一个 Kusto 查询,显示了名为 album-api 的容器应用的控制台日志条目。

ContainerAppConsoleLogs_CL
| where ContainerAppName_s == 'album-api'
| project Time=TimeGenerated, AppName=ContainerAppName_s, Revision=RevisionName_s, Container=ContainerName_s, Message=Log_s
| take 100

下面是一个 Kusto 查询,显示了名为 album-api 的容器应用的系统日志条目。

ContainerAppSystemLogs_CL
| where ContainerAppName_s == 'album-api'
| project Time=TimeGenerated, EnvName=EnvironmentName_s, AppName=ContainerAppName_s, Revision=RevisionName_s, Message=Log_s
| take 100

有关 Log Analytics 和日志查询的详细信息,请参阅 Log Analytics 教程

Azure CLI/PowerShell

可以使用 Azure CLI 查询容器应用日志。

这些示例 Azure CLI 查询输出一个表,其中包含容器应用名称 album-api 的日志记录。 表列由 project 运算符后面的参数指定。 $WORKSPACE_CUSTOMER_ID 变量包含 Log Analytics 工作区的 GUID。

此示例查询 ContainerAppConsoleLogs_CL 表:

az monitor log-analytics query --workspace $WORKSPACE_CUSTOMER_ID --analytics-query "ContainerAppConsoleLogs_CL | where ContainerAppName_s == 'album-api' | project Time=TimeGenerated, AppName=ContainerAppName_s, Revision=RevisionName_s, Container=ContainerName_s, Message=Log_s, LogLevel_s | take 5" --out table

此示例查询 ContainerAppSystemLogs_CL 表:

az monitor log-analytics query --workspace $WORKSPACE_CUSTOMER_ID --analytics-query "ContainerAppSystemLogs_CL | where ContainerAppName_s == 'album-api' | project Time=TimeGenerated, AppName=ContainerAppName_s, Revision=RevisionName_s, Message=Log_s, LogLevel_s | take 5" --out table

后续步骤