启用 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 的配置。 请将基于服务主体的群集迁移到托管标识以使用此体验。
- 在 Kubernetes 群集的“见解”部分中,从顶部工具栏中选择“监视设置”按钮
- 选择“编辑集合设置”以打开高级设置
- 选中“启用 ContainerLogV2”复选框,然后选择下面的“保存”按钮
- 摘要部分应显示消息“已启用 ContainerLogV2”,请单击“配置”按钮完成配置更改
配置现有的 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
下载新的 ConfigMap。 对于新下载的 ConfigMap,
containerlog_schema_version
的默认值为"v2"
。确保通过删除前面的
#
,还取消注释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"
配置完 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 异常堆栈跟踪的多行日志记录:
禁用多行日志记录的场景:
启用多行日志记录的场景:
同样,下面的屏幕截图描绘了 Java 和 Python 堆栈跟踪启用了多行日志记录的场景:
对于 Java,请执行以下命令:
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"