在容器见解中配置日志收集

本文详细介绍了如何在加入 Kubernetes 群集后在容器见解中配置数据收集。 有关在群集上启用容器见解的指导,请参阅为 Kubernetes 群集启用监视

配置方法

有两种方法可用于配置和筛选容器见解中收集的数据。 取决于设置,你可以在这两种方法之间进行选择,或者可能需要使用一种或另一种方法。 下表介绍了这两种方法,以下各节中提供了详细信息。

方法 说明
数据收集规则 (DCR) 数据收集规则是一系列支持使用 Azure Monitor 管道进行数据收集的指令。 启用容器见解时会创建一个 DCR,你可以使用 Azure 门户或其他方法修改此 DCR 中的设置。
ConfigMap ConfigMap 是一种 Kubernetes 机制,可用于存储非机密数据,例如配置文件或环境变量。 容器见解会在每个群集上查找 ConfigMap,其中包含定义它应收集的数据的特定设置。

使用 DCR 配置数据收集

容器见解创建的 DCR 名为 MSCI-<cluster-region>-<cluster-name>。 你可以与订阅中的其他人一起查看此 DCR,并且可以使用在 Azure Monitor 中创建和编辑数据收集规则 (DCR) 中所述的方法对其进行编辑。 虽然你可以直接修改 DCR 以进行特定的自定义,但你也可以使用下面所述的方法执行大多数必需的配置。 有关直接编辑 DCR 以实现更高级的配置的详细信息,请参阅容器见解中的数据转换

重要

AKS 群集必须使用系统分配的或用户分配的托管标识。 如果群集使用的是服务主体,则必须将群集更新为使用系统分配的托管标识用户分配的托管标识

使用 Azure 门户配置 DCR

使用 Azure 门户时,可以在容器见解中从数据收集的多个预设配置中进行选择。 这些配置包括不同的表集和收集频率,具体取决于你的特定优先级。 还可以自定义设置以仅收集所需的数据。 启用容器见解后,可以使用 Azure 门户在现有群集上自定义配置,也可以在群集上启用容器见解时执行此配置。

  1. 在 Azure 门户中选择群集。

  2. 在菜单的“监视”部分中选择“见解”选项。

  3. 如果群集上已启用容器见解,请选择“监视设置”按钮。 如果未启用,请选择“配置监视”,并参阅使用 Azure Monitor 在 Kubernetes 群集上启用监视以详细了解如何启用监视。

    AKS 群集的屏幕截图,其中显示了“监视设置”按钮。

  4. 对于已启用 AKS 和 Arc 的 Kubernetes,如果尚未将群集迁移至托管标识身份验证,则选择“使用托管标识”。

  5. 选择一个成本预设。

    显示加入选项的屏幕截图。

    成本预设 收集频率 命名空间筛选器 Syslog 收集 收集的数据
    Standard 1 m 未启用 所有标准容器见解表
    成本优化 5 m 排除 kube-system、gatekeeper-system、azure-arc 未启用 所有标准容器见解表
    Syslog 1 m 默认情况下启用 所有标准容器见解表
    日志和事件 1 m 未启用 ContainerLog/ContainerLogV2
    KubeEvents
    KubePodInventory
  6. 如果要自定义设置,请单击“编辑集合设置”。

    显示集合设置选项的屏幕截图。

    名称 描述
    收集频率 确定代理收集数据的频率。 有效值为 1m - 30m,间隔为 1m。默认值为 1m。
    命名空间筛选 :收集所有命名空间上的数据。
    Include:只会从命名空间字段中的值收集数据。
    Exclude:会从所有命名空间收集数据,但命名空间字段中的值除外。

    逗号分隔的 Kubernetes 命名空间数组负责收集库存,并根据 namespaceFilteringMode 这些命名空间的清单和性能数据。 例如,如果在使用 Include 设置的情况下指定 namespaces = ["kube-system", "default"],则只收集这两个命名空间的数据。 如果使用Exclude设置,代理会从除kube-systemdefault之外的所有其他命名空间收集数据。
    收集到的数据 定义要收集的容器见解表。 有关每个分组的说明,请参阅下文。
    启用 ContainerLogV2 用于启用 ContainerLogV2 架构的布尔标志。 如果设置为 true,则 stdout/stderr 日志将引入到 ContainerLogV2 表。 否则,除非在 ConfigMap 中另有指定,否则容器日志将引入到 ContainerLog 表。 指定单个流时,必须包含 ContainerLog 或 ContainerLogV2 的相应表。
    启用 Syslog 收集 从群集启用 Syslog 收集。

    通过“收集的数据”选项,可选择为群集填充的表。 这些表按最常见的方案进行分组。 若要指定单个表,必须使用其他方法修改 DCR。

    屏幕截图显示了收集的数据选项。

    分组 说明
    全部(默认值) 所有标准容器见解表 需要它才能启用默认容器见解可视化效果
    性能 性能, InsightsMetrics
    日志和事件 ContainerLog 或 ContainerLogV2,KubeEvents,KubePodInventory 如果已启用托管 Prometheus 指标,建议使用
    工作负载,部署和 HPA InsightsMetrics, KubePodInventory, KubeEvents, ContainerInventory, ContainerNodeInventory, KubeNodeInventory, KubeServices
    永久卷 InsightsMetrics, KubePVInventory
  7. 单击“配置”以保存设置。

DCR 适用的表和指标

DCR 中收集频率命名空间筛选的设置不应用于所有容器见解数据。 下表列出了容器见解使用的 Log Analytics 工作区中的表和它收集的指标,以及应用于每个指标的设置。

表名称 间隔? 命名空间? 备注
ContainerInventory
ContainerNodeInventory 数据收集的命名空间设置不适用,因为 Kubernetes 节点不是命名空间范围的资源
KubeNodeInventory 数据收集的命名空间设置不适用,因为 Kubernetes 节点不是命名空间范围的资源
KubePodInventory
KubePVInventory
KubeServices
KubeEvents 数据收集的间隔设置不适用于 Kubernetes 事件
性能 数据收集的命名空间设置不适用于与 Kubernetes 节点相关的指标,因为 Kubernetes 节点不是命名空间范围的对象。
InsightsMetrics 数据收集设置仅适用于收集以下命名空间的指标:container.azm.ms/kubestate、container.azm.ms/pv 和 container.azm.ms/gpu
指标命名空间 间隔? 命名空间? 备注
Insights.container/nodes 节点不是命名空间范围的资源
Insights.container/pods
Insights.container/containers
Insights.container/persistentvolumes

DCR 中的流值

当指定要使用 CLI 或 ARM 收集的表时,请指定与 Log Analytics 工作区中的特定表相对应的流名称。 下表列出了每个表的流名称。

注意

如果你熟悉数据收集规则的结构,则你应该知道此表中的流名称在 DCR 的数据流节中指定。

Stream 容器见解表
Microsoft-ContainerInventory ContainerInventory
Microsoft-ContainerLog ContainerLog
Microsoft-ContainerLogV2 ContainerLogV2
Microsoft-ContainerLogV2-HighScale ContainerLogV2(高缩放模式)1
Microsoft-ContainerNodeInventory ContainerNodeInventory
Microsoft-InsightsMetrics InsightsMetrics
Microsoft-KubeEvents KubeEvents
Microsoft-KubeMonAgentEvents KubeMonAgentEvents
Microsoft-KubeNodeInventory KubeNodeInventory
Microsoft-KubePodInventory KubePodInventory
Microsoft-KubePVInventory KubePVInventory
Microsoft-KubeServices KubeServices
Microsoft-Perf 性能

1 不应在同一 DCR 中使用 Microsoft-ContainerLogV2 和 Microsoft-ContainerLogV2-HighScale。 这将导致出现重复数据。

与多个群集共享 DCR

在 Kubernetes 群集上启用容器见解时,将为该群集创建新的 DCR,并且可以单独修改每个群集的 DCR。 如果有多个群集具有自定义监视配置,则可能需要与多个群集共享单个 DCR。 然后,你可以对自动为与之关联的任何群集实现的单个 DCR 进行更改。

DCR 与包含数据收集规则关联 (DCRA) 的群集相关联。 使用预览 DCR 体验查看和移除每个群集的现有 DCR 关联。 然后,可以使用此功能将一个关联添加到多个群集的单个 DCR。

使用 ConfigMap 配置数据收集

ConfigMap 是一种 Kubernetes 机制,可用于存储非机密数据,例如配置文件或环境变量。 容器见解会在每个群集上查找 ConfigMap,其中包含定义它应收集的数据的特定设置。

重要

ConfigMap 是一个全局列表,只能将一个 ConfigMap 应用到容器见解的代理。 应用另一个 ConfigMap 会否决以前的 ConfigMap 收集设置。

先决条件

  • 支持从容器工作负荷收集 stdout、stderr 和环境变量的最低代理版本为 ciprod06142019 或以上。

配置和部署 ConfigMap

按照以下过程配置 ConfigMap 配置文件并将其部署到群集:

  1. 如果你还没有用于容器见解的 ConfigMap,请下载模板 ConfigMap YAML 文件,并在编辑器中打开它。

  2. 使用你的自定义编辑 ConfigMap YAML 文件。 该模板包含所有有效设置及其说明。 若要启用设置,请移除注释字符 (#) 并设置其值。

  3. 运行以下 kubectl 命令创建 ConfigMap:

    kubectl config set-context <cluster-name>
    kubectl apply -f <configmap_yaml_file.yaml>
    
    # Example: 
    kubectl config set-context my-cluster
    kubectl apply -f container-azm-ms-agentconfig.yaml
    

    配置更改可能需要几分钟才能完成,然后才会生效。 然后,群集中的所有 Azure Monitor 代理 Pod 都将重启。 所有 Azure Monitor 代理 Pod 的重启是轮流式的,因此它们不会一次性全部重启。 重启完成后,你将收到类似于以下结果的消息:

    configmap "container-azm-ms-agentconfig" created`.
    

验证配置

若要验证配置是否已成功应用于群集,请使用以下命令查看代理 Pod 的日志。

kubectl logs ama-logs-fdf58 -n kube-system -c ama-logs

如果 Azure Monitor 代理 Pod 存在配置错误,输出中会显示类似于以下的错误:

***************Start Config Processing******************** 
config::unsupported/missing config schema version - 'v21' , using defaults

使用以下选项对配置更改执行其他故障排除:

  • 使用代理 Pod 中的相同 kubectl logs 命令。

  • 查看实时日志,了解类似于以下情况的错误:

    config::error::Exception while parsing config map for log collection/env variable settings: \nparse error on value \"$\" ($end), using defaults, please check config map for errors
    
  • 对于配置错误,数据每小时都会发送到你的 Log Analytics 工作区中的 KubeMonAgentEvents 表,并包含错误严重性。 如果没有错误,表中的条目将包含严重性为“信息”的数据,这些数据不会报告错误。 Tags 列包含有关发生错误的 Pod 和容器 ID 的详细信息、第一次发生错误的 Pod 和容器 ID、最后一次发生错误的 Pod 和容器 ID 以及最后一小时内的错误计数。

验证架构版本

Azure Monitor 代理 Pod 上以 Pod 注释(架构-版本)的形式提供了支持的配置架构版本。 可以使用以下 kubectl 命令查看它们。

kubectl describe pod ama-logs-fdf58 -n=kube-system.

ConfigMap 设置

下表描述了可以使用 ConfigMap 配置的用于控制数据收集的设置。

设置 数据类型 说明
schema-version 字符串(区分大小写) v1 在分析此 ConfigMap 时由代理使用。 当前支持的架构版本为 v1。 不支持修改此值,评估 ConfigMap 时会拒绝修改的值。
config-version 字符串 允许在源代码管理系统/存储库中跟踪此配置文件的版本。 允许的最大字符数为 10,所有其他字符将会截掉。
[log_collection_settings]
[stdout]
enabled
布尔 true
false
控制是否启用 stdout 容器日志收集。 如果设置为 true 且未在 stdout 日志收集中排除任何命名空间,则会从群集的所有 pod 和节点中的所有容器收集 stdout 日志。 如果未在 ConfigMap 中指定,默认值为 true
[stdout]
exclude_namespaces
字符串 逗号分隔的数组 不收集其 stdout 日志的 Kubernetes 命名空间数组。 仅当 enabled 设置为 true 时,此设置才会生效。 如果未在 ConfigMap 中指定,默认值为
["kube-system","gatekeeper-system"]
[stderr]
enabled
布尔 true
false
控制是否启用 stderr 容器日志收集。 如果设置为 true 且未在 stderr 日志收集中排除任何命名空间,则会从群集的所有 pod 和节点中的所有容器收集 stderr 日志。 如果未在 ConfigMap 中指定,默认值为 true
[stderr]
exclude_namespaces
字符串 逗号分隔的数组 不收集其 stderr 日志的 Kubernetes 命名空间数组。 仅当 enabled 设置为 true 时,此设置才会生效。 如果未在 ConfigMap 中指定,默认值为
["kube-system","gatekeeper-system"]
[env_var]
enabled
布尔 true
false
控制群集中所有 Pod 和节点的环境变量收集。 如果未在 ConfigMap 中指定,默认值为 true
[enrich_container_logs]
enabled
布尔 true
false
控制容器日志扩充,以填充写入群集中所有容器日志的 ContainerLog 表的每条日志记录的 NameImage 属性值。 如果未在 ConfigMap 中指定,默认值为 false
[collect_all_kube_events]
enabled
布尔 true
false
控制是否收集所有类型的 Kube 事件。 默认情况下,不收集 Normal 类型的 Kube 事件。 当此设置为 true 时,不再筛选 Normal 事件,并将收集所有事件。 如果未在 ConfigMap 中指定,默认值为 false
[schema]
containerlog_schema_version
字符串(区分大小写) v2
v1
设置日志引入格式。 如果为 v2,则使用 ContainerLogV2 表。 如果为 v1,则使用 ContainerLog 表(此表已弃用)。 对于使用 Azure CLI 2.54.0 或更高版本启用容器见解的群集,默认设置为 v2。 有关详细信息,请参阅容器见解日志架构
[enable_multiline_logs]
enabled
布尔 true
false
控制是否启用多行容器日志。 有关详细信息,请参阅容器见解中的多行日志记录。 如果未在 ConfigMap 中指定,默认值为 false。 这要求 schema 设置为 v2
[metadata_collection]
enabled
布尔 true
false
控制是否在 ContainerLogV2 表的 KubernetesMetadata 列中收集元数据。
[metadata_collection]
include_fields
字符串 逗号分隔的数组 要包含的元数据字段的列表。 如果未使用该设置,则会收集所有字段。 有效值为 ["podLabels","podAnnotations","podUid","image","imageID","imageRepo","imageTag"]
[metric_collection_settings]
[collect_kube_system_pv_metrics]
enabled
布尔 true
false
允许在 kube 系统命名空间中收集永久性卷 (PV) 使用指标。 默认情况下,不会在 kube 系统命名空间中收集具有永久性卷声明的永久性卷的使用指标。 当此设置设为 true 时,将收集所有命名空间的 PV 使用指标。 如果未在 ConfigMap 中指定,默认值为 false
[agent_settings]
[proxy_config]
ignore_proxy_settings
布尔 true
false
true 时,忽略代理设置。 对于 AKS 和已启用 Arc 的 Kubernetes 环境,如果群集配置有正向代理,则会自动应用代理设置并将其用于代理。 对于某些配置(例如使用 AMPLS + 代理),可能需要忽略代理配置。 如果未在 ConfigMap 中指定,默认值为 false

后续步骤