启用 ContainerLogV2 架构

Azure Monitor 容器见解为容器日志提供了一个名为 ContainerLogV2 的架构。 在此架构中,有字段可以用于创建常用查询来查看 Azure Kubernetes 服务 (AKS) 和已启用 Azure Arc 的 Kubernetes 数据。 此外,此架构兼容基本日志,后者与标准分析日志相比,是成本较低的替代方案。

注意

对于 CLI 2.54.0 及更高版本,ContainerLogV2 将通过 ConfigMap 成为默认架构。 对于使用 ARM、Bicep、Policy 和门户加入功能通过托管标识身份验证加入容器见解的客户,ContainerLogV2 将是默认引入格式。 ContainerLogV2 可以使用数据收集设置通过 CLI 2.51.0 或更高版本实现显式启用。

新字段为:

  • ContainerName
  • PodName
  • PodNamespace

ContainerLogV2 架构

 Computer: string,
 ContainerId: string,
 ContainerName: string,
 PodName: string,
 PodNamespace: string,
 LogMessage: dynamic,
 LogSource: string,
 TimeGenerated: datetime

启用 ContainerLogV2 架构

客户可以通过群集的数据收集规则 (DCR) 或 ConfigMap 在群集级别启用 ContainerLogV2 架构。 若要启用 ContainerLogV2 架构,请配置群集的 ConfigMap。 详细了解 Kubernetes 文档Azure Monitor 文档中的 ConfigMap。 按照说明配置现有的 ConfigMap 或使用新的 ConfigMap。

注意

由于 ContainerLogV2 可以通过 DCR 和 ConfigMap 启用,因此当两者都启用时,ConfigMap 的 ContainerLogV2 设置将优先。 仅当 DCR 和 ConfigMap 都明确设置为关闭时,Stdout 和 stderr 日志才会引入到 ContainerLog 表。

通过现有数据收集规则 (DCR) 进行配置

注意

基于服务主体的群集不支持基于 DCR 的配置。 请将基于服务主体的群集迁移到托管标识以使用此体验。

  1. 在 Kubernetes 群集的“见解”部分中,从顶部工具栏中选择“监视设置”按钮

Screenshot that shows monitoring settings.

  1. 选择“编辑集合设置”以打开高级设置

Screenshot that shows advanced collection settings.

  1. 选中“启用 ContainerLogV2”复选框,然后选择下面的“保存”按钮

Screenshot that shows ContainerLogV2 checkbox.

  1. 摘要部分应显示消息“已启用 ContainerLogV2”,请单击“配置”按钮完成配置更改

Screenshot that shows ContainerLogV2 enabled.

配置现有的 ConfigMap

这适用于已为 AKS 群集启用容器见解并已使用 ConfigMap“container-azm-ms-agentconfig.yaml”配置代理数据收集设置的方案。 如果此 ConfigMap 还没有 log_collection_settings.schema 字段,则需要在此现有 ConfigMap .yaml 文件中追加以下部分:

[log_collection_settings.schema]
          # In the absence of this ConfigMap, the default value for containerlog_schema_version is "v1"
          # Supported values for this setting are "v1","v2"
          # See documentation at https://docs.azure.cn/azure-monitor/containers/container-insights-logging-v2 for benefits of v2 schema over v1 schema before opting for "v2" schema
          containerlog_schema_version = "v2"

配置新的 ConfigMap

  1. 下载新的 ConfigMap。 对于新下载的 ConfigMap,containerlog_schema_version 的默认值为 "v2"

  2. 确保通过删除前面的 #,还取消注释 containerlog_schema_version"v2"[log_collection_settings.schema]

    [log_collection_settings.schema]
        # In the absence of this ConfigMap, the default value for containerlog_schema_version is "v1"
        # Supported values for this setting are "v1","v2"
        # See documentation at https://docs.azure.cn/azure-monitor/containers/container-insights-logging-v2 for benefits of v2 schema over v1 schema before opting for "v2" schema
        containerlog_schema_version = "v2"
    
  3. 配置完 ConfigMap 后,请运行以下 kubectl 命令:kubectl apply -f <configname>

    示例: kubectl apply -f container-azm-ms-agentconfig.yaml

注意

  • 可能需要几分钟才能完成配置更改,然后配置更改才会生效。 群集中的所有 ama-logs Pod 都将重启。
  • 重启是针对所有 ama-logs Pod 的滚动式重启。 它不会同时重启所有 Pod。

容器见解中的多行日志记录

Azure Monitor 容器见解现在支持多行日志记录。 启用此功能后,以前的拆分容器日志将拼接在一起,并作为单个条目发送到 ContainerLogV2 表。 客户可以看到最多 64KB 的容器日志行(高于现在的 16KB 限制)。 如果拼接的日志行大于 64 KB,则由于 Log Analytics 限制,它将被截断。 此外,该功能还增加了对 .NET、Go、Python 和 Java 堆栈跟踪的支持,这些跟踪在 ContainerLogV2 表中显示为单个条目,而不是拆分为多个条目。

下面是两个屏幕截图,演示了 Go 异常堆栈跟踪的多行日志记录:

禁用多行日志记录的场景:

Screenshot that shows Multi-line logging disabled.

启用多行日志记录的场景:

Screenshot that shows Multi-line enabled.

同样,下面的屏幕截图描绘了 Java 和 Python 堆栈跟踪启用了多行日志记录的场景:

对于 Java,请执行以下命令:

Screenshot that shows Multi-line enabled for Java.

Python 模型:

Screenshot that shows Multi-line enabled for Python.

先决条件

客户必须启用 ContainerLogV2,多行日志记录功能才能正常使用。

如何启用

可通过在配置映射中的 [log_collection_settings.enable_multiline_logs] 部分下将“启用”标志设置为“true”来启用多行日志记录功能

[log_collection_settings.enable_multiline_logs]
# fluent-bit based multiline log collection for go (stacktrace), dotnet (stacktrace)
# if enabled will also stitch together container logs split by docker/cri due to size limits(16KB per log line)
  enabled = "true"

后续步骤