在容器见解中配置日志收集
本文详细介绍了如何在加入 Kubernetes 群集后在容器见解中配置数据收集。 有关在群集上启用容器见解的指导,请参阅为 Kubernetes 群集启用监视。
有两种方法可用于配置和筛选容器见解中收集的数据。 取决于设置,你可以在这两种方法之间进行选择,或者可能需要使用一种或另一种方法。 下表介绍了这两种方法,以下各节中提供了详细信息。
方法 | 说明 |
---|---|
数据收集规则 (DCR) | 数据收集规则是一系列支持使用 Azure Monitor 管道进行数据收集的指令。 启用容器见解时会创建一个 DCR,你可以使用 Azure 门户或其他方法修改此 DCR 中的设置。 |
ConfigMap | ConfigMap 是一种 Kubernetes 机制,可用于存储非机密数据,例如配置文件或环境变量。 容器见解会在每个群集上查找 ConfigMap,其中包含定义它应收集的数据的特定设置。 |
容器见解创建的 DCR 名为 MSCI-<cluster-region>-<cluster-name>。 你可以与订阅中的其他人一起查看此 DCR,并且可以使用在 Azure Monitor 中创建和编辑数据收集规则 (DCR) 中所述的方法对其进行编辑。 虽然你可以直接修改 DCR 以进行特定的自定义,但你也可以使用下面所述的方法执行大多数必需的配置。 有关直接编辑 DCR 以实现更高级的配置的详细信息,请参阅容器见解中的数据转换。
以下模板和参数文件可用于不同的群集配置。
AKS 群集
- 模板:https://aka.ms/aks-enable-monitoring-costopt-onboarding-template-file
- 参数:https://aka.ms/aks-enable-monitoring-costopt-onboarding-template-parameter-file
已启用 Arc 的 Kubernetes
- 模板:https://aka.ms/arc-k8s-enable-monitoring-costopt-onboarding-template-file
- 参数:https://aka.ms/arc-k8s-enable-monitoring-costopt-onboarding-template-parameter-file
AKS 混合群集
下表介绍了在每个参数文件中需提供值的参数。
名称 | 描述 |
---|---|
aksResourceId |
群集的资源 ID。 |
aksResourceLocation |
群集的位置。 |
workspaceRegion |
Log Analytics 工作区的位置。 |
enableContainerLogV2 |
用于启用 ContainerLogV2 架构的布尔标志。 如果设置为 true,则 stdout/stderr 日志将引入到 ContainerLogV2 表。 否则,除非在 ConfigMap 中另有指定,否则容器日志将引入到 ContainerLog 表。 指定单个流时,必须包含 ContainerLog 或 ContainerLogV2 的相应表。 |
enableSyslog |
指定是否应启用 Syslog 收集。 |
syslogLevels |
如果启用了 Syslog 收集,请指定要收集的日志级别。 |
dataCollectionInterval |
确定代理收集数据的频率。 有效值为 1m - 30m,间隔为 1m。默认值为 1m。 如果该值超出允许的范围,则默认为 1m。 |
namespaceFilteringModeForDataCollection |
Include:只会从命名空间字段中的值收集数据。 Exclude:会从所有命名空间收集数据,但命名空间字段中的值除外。 Off:忽略任何命名空间选择并收集所有命名空间中的数据。 |
namespacesForDataCollection |
逗号分隔的 Kubernetes 命名空间数组负责收集库存,并根据 namespaceFilteringMode 这些命名空间的清单和性能数据。 例如,如果在使用 Include 设置的情况下指定 namespaces = ["kube-system", "default"],则只收集这两个命名空间的数据。 如果使用Exclude设置,代理会从除kube-system和default之外的所有其他命名空间收集数据。 如果使用 Off 设置,代理将从所有命名空间收集数据,包括 kube-system 和 default。 将忽略无效和无法识别的命名空间。 |
streams |
容器见解表流的数组。 如需有效流及其相应表的列表,请参阅 DCR 中的流值。 若要为容器日志启用高缩放模式,请使用 Microsoft-ContainerLogV2-HighScale 。 |
useAzureMonitorPrivateLinkScope |
指定是否对与 Azure Monitor 的群集连接使用专用链接。 |
azureMonitorPrivateLinkScopeResourceId |
如果使用专用链接,则专用链接范围的资源 ID。 |
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 | 是 | 是 |
当指定要使用 CLI 或 ARM 收集的表时,请指定与 Log Analytics 工作区中的特定表相对应的流名称。 下表列出了每个表的流名称。
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。 这将导致出现重复数据。
在 Kubernetes 群集上启用容器见解时,将为该群集创建新的 DCR,并且可以单独修改每个群集的 DCR。 如果有多个群集具有自定义监视配置,则可能需要与多个群集共享单个 DCR。 然后,你可以对自动为与之关联的任何群集实现的单个 DCR 进行更改。
DCR 与包含数据收集规则关联 (DCRA) 的群集相关联。 使用预览 DCR 体验查看和移除每个群集的现有 DCR 关联。 然后,可以使用此功能将一个关联添加到多个群集的单个 DCR。
ConfigMap 是一种 Kubernetes 机制,可用于存储非机密数据,例如配置文件或环境变量。 容器见解会在每个群集上查找 ConfigMap,其中包含定义它应收集的数据的特定设置。
重要
ConfigMap 是一个全局列表,只能将一个 ConfigMap 应用到容器见解的代理。 应用另一个 ConfigMap 会否决以前的 ConfigMap 收集设置。
- 支持从容器工作负荷收集 stdout、stderr 和环境变量的最低代理版本为 ciprod06142019 或以上。
按照以下过程配置 ConfigMap 配置文件并将其部署到群集:
如果你还没有用于容器见解的 ConfigMap,请下载模板 ConfigMap YAML 文件,并在编辑器中打开它。
使用你的自定义编辑 ConfigMap YAML 文件。 该模板包含所有有效设置及其说明。 若要启用设置,请移除注释字符 (#) 并设置其值。
运行以下 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 配置的用于控制数据收集的设置。
设置 | 数据类型 | 值 | 说明 |
---|---|---|---|
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 表的每条日志记录的 Name 和 Image 属性值。 如果未在 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 。 |
- 请参阅在容器见解中筛选日志收集,详细了解如何通过配置容器见解来筛选不需要的数据从而节省成本。