为容器见解配置代理数据收集

容器见解通过容器化代理,从部署到托管 Kubernetes 群集的容器工作负载收集 stdout、stderr 和环境变量。 可以创建一个自定义的 Kubernetes ConfigMap 用于控制此体验,以配置代理数据收集设置。

本文演示如何根据要求创建 ConfigMap 和配置数据收集。

ConfigMap 文件设置概述

我们已提供一个模板 ConfigMap 文件,你可以使用自定义内容轻松编辑此文件,而无需从头开始创建。 在开始之前,请查看有关 ConfigMaps 的 Kubernetes 文档。 熟悉如何创建、配置和部署 ConfigMaps。 需要了解如何在每个命名空间或整个群集中筛选 stderr 和 stdout。 还需要了解如何筛选所有群集 pod/节点中运行的任何容器的环境变量。

重要

支持从容器工作负荷收集 stdout、stderr 和环境变量的最低代理版本为 ciprod06142019 或以上。 若要验证代理版本,请在“节点”选项卡上选择一个节点。 在“属性”窗格上,记下“代理映像标记”属性的值。 有关代理版本和每个版本中包含的内容的详细信息,请参阅代理发行说明

数据收集设置

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

注意

对于使用 Azure 2.54.0 或更高版本启用容器见解的群集,[log_collection_settings.schema] 的默认设置将设置为“v2”

密钥 数据类型 说明
schema-version 字符串(区分大小写) v1 这是代理在分析
ConfigMap 时使用的架构版本。
当前支持的架构版本为 v1。
不支持修改此值,评估
ConfigMap 时会拒绝修改的值。
config-version 字符串 支持在源代码管理系统/存储库中跟踪此配置文件的版本。
允许的最大字符数为 10,所有其他字符将会截掉。
[log_collection_settings.stdout] enabled = 布尔 True 或 False 控制是否启用 stdout 容器日志收集。 如果设置为 true 且未在 stdout 日志收集中排除任何命名空间
log_collection_settings.stdout.exclude_namespaces 设置),则会从群集中所有 pod/节点的所有容器收集 stdout 日志。 如果在 ConfigMap 中未指定,
默认值为 enabled = true
[log_collection_settings.stdout] exclude_namespaces = String 逗号分隔的数组 不收集其 stdout 日志的 Kubernetes 命名空间数组。 仅当
log_collection_settings.stdout.enabled
设置为 true 时,此设置才会生效。
如果未在 ConfigMap 中指定,默认值为
exclude_namespaces = ["kube-system","gatekeeper-system"]
[log_collection_settings.stderr] enabled = 布尔 True 或 False 控制是否启用 stderr 容器日志收集。
如果设置为 true 且未在 stdout 日志收集中排除任何命名空间
log_collection_settings.stderr.exclude_namespaces 设置),则会从群集中所有 pod/节点的所有容器收集 stderr 日志。
如果未在 ConfigMap 中指定,默认值为
enabled = true
[log_collection_settings.stderr] exclude_namespaces = String 逗号分隔的数组 不收集其 stderr 日志的 Kubernetes 命名空间数组。
仅当
log_collection_settings.stdout.enabled 设置为 true
如果未在 ConfigMap 中指定,默认值为
exclude_namespaces = ["kube-system","gatekeeper-system"]
[log_collection_settings.env_var] enabled = 布尔 True 或 False 此设置控制
群集中所有 Pod/节点的环境变量集合,
默认设置为 enabled = true(如果未在
在 ConfigMap 中。
如果环境变量集合已全局启用,则可对特定容器禁用它,
方法是将环境变量
AZMON_COLLECT_ENV 设置为 False,可以在 Dockerfile 设置中这样做,也可以在 Pod 的配置文件(位于 env: 部分下)中这样做。
如果环境变量集合已全局启用,则无法为特定容器启用集合。 唯一可在容器级别应用的替代是在已全局启用集合的情况下禁用集合。
[log_collection_settings.enrich_container_logs] enabled = Boolean True 或 False 此设置控制容器日志扩充,以填充写入群集中所有容器日志的 ContainerLog 表的每条日志记录的 NameImage 属性
值。
此设置在 ConfigMap 中未指定时,默认为 enabled = false
[log_collection_settings.collect_all_kube_events] enabled = Boolean True 或 False 此设置支持收集所有类型的 Kube 事件。
默认情况下,不收集 Normal 类型的 Kube 事件。 将此设置设为 true 时,不再筛选 Normal 事件,并将收集所有事件。
此设置在 ConfigMap 中未指定时,默认为 enabled = false
[log_collection_settings.schema] enabled = 字符串(区分大小写) v2 或 v1 (已停用) 此设置将日志引入格式设置为 ContainerLogV2
[log_collection_settings.enable_multiline_logs] enabled = 布尔 True 或 False 此设置控制是否启用多行容器日志。 默认已禁用。 请参阅容器见解中的多行日志记录了解详细信息。

指标收集设置

下表描述了可以配置的用于控制指标收集的设置。

密钥 数据类型 说明
[metric_collection_settings.collect_kube_system_pv_metrics] enabled = Boolean True 或 False 此设置允许在 kube 系统命名空间中收集永久性卷 (PV) 使用指标。 默认情况下,不会在 kube 系统命名空间中收集具有永久性卷声明的永久性卷的使用指标。 当此设置设为 true 时,将收集所有命名空间的 PV 使用指标。 默认情况下,此设置设为 false

ConfigMap 是一个全局列表,只能将一个 ConfigMap 应用到代理。 不能使用推翻收集规则的其他 ConfigMap。

密钥 数据类型 说明
[agent_settings.proxy_config] ignore_proxy_settings = Boolean True 或 False 将此值设置为 true 可忽略代理设置。 在 AKS 和 Arc K8s 环境中,如果群集配置有正向代理,则会自动应用代理设置并将其用于代理。 对于某些配置(例如使用 AMPLS + 代理),可以忽略代理配置。 。 默认情况下,此设置设为 false

使用 ConfigMap 进行配置和部署

配置 ConfigMap 配置文件并将其部署到群集:

  1. 下载模板 ConfigMap YAML 文件,并将其另存为 container-azm-ms-agentconfig.yaml。

  2. 使用自定义内容编辑 ConfigMap YAML 文件,以便收集 stdout、stderr 和环境变量:

    • 若要排除特定命名空间的 stdout 日志收集,可以参考以下示例配置键/值:[log_collection_settings.stdout] enabled = true exclude_namespaces = ["my-namespace-1", "my-namespace-2"]
    • 若要禁用特定容器的环境变量集合,请设置键/值 [log_collection_settings.env_var] enabled = true 以全局启用变量集合。 然后按照此处的步骤完成特定容器的配置。
    • 若要在群集范围禁用 stderr 日志收集,请参考以下示例配置键/值:[log_collection_settings.stderr] enabled = false

    在编辑器中保存更改。

  3. 运行以下 kubectl 命令创建 ConfigMap:kubectl apply -f <configmap_yaml_file.yaml>

    示例: 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。 如果 Azure Monitor Agent 代理 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 以及最后一小时内的错误计数。

更正 ConfigMap 中的错误后,保存 YAML 文件,并运行以下命令来应用已更新的 ConfigMap:kubectl apply -f <configmap_yaml_file.yaml

应用已更新的 ConfigMap

如果你已在群集上部署了 ConfigMap,但想要使用较新的配置更新 ConfigMap,可以编辑以前用过的 ConfigMap 文件。 然后,使用前面提到的相同命令应用该文件:kubectl apply -f <configmap_yaml_file.yaml

配置更改可能需要几分钟才能完成,然后才会生效。 然后,群集中的所有 Azure Monitor 代理 Pod 都将重启。 所有 Azure Monitor 代理 Pod 的重启是轮流式的,因此它们不会一次性全部重启。 重启完成后,将显示类似于此示例并包含以下结果的消息:configmap "container-azm-ms-agentconfig" updated

验证架构版本

Azure Monitor 代理 Pod 上以 Pod 注释(架构-版本)的形式提供了支持的配置架构版本。 可以使用以下 kubectl 命令查看版本:kubectl describe pod ama-logs-fdf58 -n=kube-system

类似于以下示例的输出会显示注释架构版本:

    Name:           ama-logs-fdf58
    Namespace:      kube-system
    Node:           aks-agentpool-95673144-0/10.240.0.4
    Start Time:     Mon, 10 Jun 2019 15:01:03 -0700
    Labels:         controller-revision-hash=589cc7785d
                    dsName=ama-logs-ds
                    pod-template-generation=1
    Annotations:    agentVersion=1.10.0.1
                  dockerProviderVersion=5.0.0-0
                    schema-versions=v1 

常见问题

本部分提供常见问题的解答。

如何通过 Helm 为 kube-system 命名空间中的容器启用日志收集?

默认情况下,kube-system 命名空间中的容器的日志收集被禁用。 可以通过在 Azure Monitor 代理上设置环境变量来启用日志收集。 请参阅 GitHub 上的容器见解页面。

后续步骤

  • 容器见解不包含预定义的警报集。 请查看使用容器见解创建性能警报,了解如何针对 CPU 和内存使用率过高的情况创建建议的警报,为 DevOps 或操作流程和过程提供支持。
  • 启用监视功能以收集 Azure Kubernetes 服务或混合群集及其上运行的工作负载的运行状况和资源利用率后,请了解如何使用容器见解。
  • 请参阅日志查询示例,以查看预定义的查询,以及用于发警报、可视化或分析群集的评估或自定义示例。