启用对 AKS 群集的监视

Azure Monitor 中的 Kubernetes 监控中所述,Azure Monitor 的多个功能协同工作,为您的 Azure Kubernetes Service (AKS) 群集提供全面监控。 本文介绍如何为 AKS 群集启用以下功能:

  • Prometheus 指标
  • 托管 Grafana
  • 容器日志记录
  • 控制平面日志

先决条件

重要

如果您的群集打算使用 Azure 私有链接连接到 Azure Monitor 工作区或 Log Analytics 工作区,请参阅 在 Azure Monitor 中启用用于监控虚拟机和 Kubernetes 群集的私有链接

创建工作区

下表介绍了支持本文中启用Azure Monitor功能的工作区。 如果还没有每种类型的现有工作区,则可以在载入过程中创建它们。 请参阅 Design Log Analytics 工作区体系结构,了解要创建的工作区数量及其放置位置的指导。

功能 工作区 说明
托管 Prometheus Azure Monitor 工作区 如果在加入时未指定现有Azure Monitor工作区,将使用资源组的默认工作区。 如果群集所在区域尚不存在默认工作区,则将在一个名为 DefaultAzureMonitorWorkspace-<mapped_region> 的资源组中创建一个名称格式为 DefaultRG-<cluster_region> 的工作区。

Contributor 权限足以使加载项能够将数据发送到Azure Monitor工作区。 需要Owner级别权限才能链接Azure Monitor工作区以查看Azure Managed Grafana中的指标。 这是必需的,因为执行入门步骤的用户需要能够在Azure Monitor工作区上授予Azure Managed Grafana系统标识Monitoring Reader角色,以便查询指标。
容器日志记录
控制平面日志
Log Analytics 工作区 可以将群集附加到同一 Microsoft Entra 租户下不同 Azure 订阅中的 Log Analytics 工作区,但必须使用 Azure CLI 或 Azure Resource Manager 模板。 当前无法使用 Azure 门户执行此配置。

如果要将现有群集连接到另一订阅中的Log Analytics工作区,则必须在订阅中向 Log Analytics 工作区注册 Microsoft.ContainerService 资源提供程序。 有关详细信息,请参阅注册资源供应商

如果未指定现有Log Analytics工作区,将使用资源组的默认工作区。 如果群集区域中尚不存在默认工作区,会使用 DefaultWorkspace-<GUID>-<Region> 格式的名称创建一个工作区。
托管 Grafana Azure Managed Grafana 工作区 将 Grafana 工作区链接到Azure Monitor工作区,使从群集收集的 Prometheus 指标可供 Grafana 仪表板使用。

启用 Prometheus 指标和容器日志记录

在群集上启用 Prometheus 和容器日志记录时,群集中会安装Azure Monitor代理的容器化版本。 可以在新的或现有群集上同时配置这些功能,也可以单独启用每个功能。

同时为集群启用托管的 Grafana 和 Prometheus 指标抓取。 有关将 Azure Monitor 工作区与 Azure Managed Grafana 工作区连接的选项,请参阅 链接 Grafana 工作区

先决条件

  • 群集必须使用托管标识身份验证
  • 必须在群集的订阅和 Azure Monitor 工作区中注册以下资源提供程序:
    • Microsoft.ContainerService (微软容器服务)
    • Microsoft.Insights
    • Microsoft.AlertsManagement
    • Microsoft.Monitor
  • 以下资源提供程序必须在 Grafana 工作区订阅中注册:
    • Microsoft.Dashboard

先决条件

  • 托管标识身份验证是 CLI 版本 2.49.0 或更高版本中的默认设置。
  • 必须使用命令中卸载 aks-preview 扩展。

Prometheus 指标

-enable-azure-monitor-metrics 选项与 az aks createaz aks update 配合使用,具体取决于是创建新群集还是更新现有群集以安装用于擦除 Prometheus 指标的指标加载项。 这将使用 Azure Monitor 中的默认 Prometheus 指标配置中所述的配置。 若要修改此配置,请参阅 在 Prometheus 的 Azure Monitor 托管服务中自定义采集 Prometheus 指标

请参阅以下示例。

### Use default Azure Monitor workspace
az aks create/update --enable-azure-monitor-metrics --name <cluster-name> --resource-group <cluster-resource-group>

### Use existing Azure Monitor workspace
az aks create/update --enable-azure-monitor-metrics --name <cluster-name> --resource-group <cluster-resource-group> --azure-monitor-workspace-resource-id <workspace-name-resource-id>

### Use an existing Azure Monitor workspace and link with an existing Grafana workspace
az aks create/update --enable-azure-monitor-metrics --name <cluster-name> --resource-group <cluster-resource-group> --azure-monitor-workspace-resource-id <azure-monitor-workspace-name-resource-id> --grafana-resource-id  <grafana-workspace-name-resource-id>

### Use optional parameters
az aks create/update --enable-azure-monitor-metrics --name <cluster-name> --resource-group <cluster-resource-group> --ksm-metric-labels-allow-list "namespaces=[k8s-label-1,k8s-label-n]" --ksm-metric-annotations-allow-list "pods=[k8s-annotation-1,k8s-annotation-n]"

示例

az aks create/update --enable-azure-monitor-metrics --name "my-cluster" --resource-group "my-resource-group" --azure-monitor-workspace-resource-id "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/my-resource-group/providers/microsoft.monitor/accounts/my-workspace"

可选参数

上述每个命令都允许以下可选参数。 每个参数名称不同,但它们的使用是相同的。

参数 名称和说明
批注键 --ksm-metric-annotations-allow-list

在资源的 kube_resource_annotations 指标中使用的 Kubernetes 注释键的逗号分隔列表。 例如,kube_pod_annotations 是 pod 资源的注释指标。 默认情况下,此指标仅包含名称和命名空间标签。 若要包含更多注释,请提供资源名称(复数形式)和要允许使用的 Kubernetes 注释键的列表。 可为每个资源提供一个 * 以允许任何注释,但这会严重影响性能。 例如,pods=[kubernetes.io/team,...],namespaces=[kubernetes.io/team],...
标签键 --ksm-metric-labels-allow-list

资源的 kube_resource_labels 指标中使用的更多 Kubernetes 标签键的逗号分隔列表。 例如,kube_pod_labels 是 Pod 资源的标签指标。 默认情况下,此指标仅包含名称和命名空间标签。 若要包含更多标签,请提供一个复数形式的资源名称列表以及想要允许这些资源使用的 Kubernetes 标签键。可为每个资源提供一个 * 以允许任何标签,但这会严重影响性能。 例如,pods=[app],namespaces=[k8s-label-1,k8s-label-n,...],...
记录规则 --enable-windows-recording-rules

您可以启用Windows仪表板正常运行所需的记录规则组。

注意

请注意,使用 - ksm-metric-annotations-allow-list 和 ksm-metric-labels-allow-list 设置的参数,可以被 ama-metrics-settings-configmap 显式覆盖或替代设置。

容器日志

--addon monitoring 选项与 az aks create for a new cluster 或 az aks enable-addon 配合使用以更新现有群集以启用容器日志收集。 请参阅下文,修改日志收集设置。

请参阅以下示例。

### Use default Log Analytics workspace
az aks enable-addons --addon monitoring --name <cluster-name> --resource-group <cluster-resource-group-name>

### Use existing Log Analytics workspace
az aks enable-addons --addon monitoring --name <cluster-name> --resource-group <cluster-resource-group-name> --workspace-resource-id <workspace-resource-id>

### Use custom log configuration file
az aks enable-addons --addon monitoring --name <cluster-name> --resource-group <cluster-resource-group-name> --workspace-resource-id <workspace-resource-id> --data-collection-settings dataCollectionSettings.json

### Use legacy authentication
az aks enable-addons --addon monitoring --name <cluster-name> --resource-group <cluster-resource-group-name> --workspace-resource-id <workspace-resource-id> --enable-msi-auth-for-monitoring false

示例

az aks enable-addons --addon monitoring --name "my-cluster" --resource-group "my-resource-group" --workspace-resource-id "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/my-resource-group/providers/Microsoft.OperationalInsights/workspaces/my-workspace"

日志配置文件

若要自定义群集的日志收集设置,可以使用以下格式以 JSON 文件的形式提供配置。 如果未提供配置文件,则使用下表中标识的默认设置。

{
  "interval": "1m",
  "namespaceFilteringMode": "Include",
  "namespaces": ["kube-system"],
  "enableContainerLogV2": true, 
  "streams": ["Microsoft-Perf", "Microsoft-ContainerLogV2"]
}

下表描述了配置中的每个设置。

Name 说明
interval 确定代理收集数据的频率。 有效值为 1m - 30 米(以 1 米为单位)如果该值超出允许的范围,则默认值为 1 m

默认值:1m。
namespaceFilteringMode Include:只会从命名空间字段中的值收集数据。
Exclude:会从所有命名空间收集数据,但命名空间字段中的值除外。
Off:忽略任何命名空间选择并收集所有命名空间中的数据。

默认值:关闭
namespaces 逗号分隔的 Kubernetes 命名空间数组,用于根据 namespaceFilteringMode 收集清单和性能数据。
例如,如果在使用 Include 设置的情况下指定 namespaces = ["kube-system", "default"],则只收集这两个命名空间的数据。 如果使用Exclude设置,代理会从除kube-systemdefault之外的所有其他命名空间收集数据。 如果使用 Off 设置,代理将从所有命名空间收集数据,包括 kube-system 和 default。 将忽略无效和无法识别的命名空间。

没有。
enableContainerLogV2 用于启用 ContainerLogV2 架构的布尔标志。 如果设置为 true,则 stdout/stderr 日志将引入到 ContainerLogV2 表。 否则,除非在 ConfigMap 中另有指定,否则容器日志将引入到 ContainerLog 表。 指定单个流时,必须包含 ContainerLog 或 ContainerLogV2 的相应表。

默认值:True
streams 用于收集的表流数组。 请参阅Stream 值,了解有效流及其对应表的列表。

默认值:Microsoft-ContainerInsights-Group-Default

数据流值

当指定要使用 CLI 或 BICEP/ARM 收集的表时,可以指定与Log Analytics工作区中的特定表相对应的流名称。 下表列出了流名称及其相应的表。

注意

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

Stream 容器见解表
Microsoft-容器清单 ContainerInventory
Microsoft-ContainerLog ContainerLog
Microsoft-ContainerLogV2 ContainerLogV2
Microsoft-ContainerLogV2-HighScale ContainerLogV2(高缩放模式)1
Microsoft-ContainerNodeInventory 容器节点清单
Microsoft-InsightsMetrics InsightsMetrics
Microsoft-KubeEvents KubeEvents
Microsoft-KubeMonAgentEvents KubeMonAgentEvents
Microsoft-KubeNodeInventory KubeNodeInventory
Microsoft-KubePodInventory KubePodInventory
Microsoft-KubePVInventory KubePVInventory
Microsoft-KubeServices KubeServices
Microsoft-Perf 性能
Microsoft-ContainerInsights-Group-Default 包含上述所有流的组流。2

1 不要同时使用 Microsoft-ContainerLogV2 和MicrosoftContainerLogV2-HighScale。 这将导致出现重复数据。 2 使用组流作为简写来指定所有单个流。 如果要收集一组特定的流,请单独指定每个流,而不是使用组流。

适用的表和指标

收集频率命名空间筛选的设置不适用于所有日志数据。 下表列出了Log Analytics工作区中的表以及应用于每个工作区的设置。

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

注意

命名空间筛选不适用于 ama-logs 代理记录。 因此,即使 kube-system 命名空间列于排除的命名空间中,与 ama-logs 代理容器关联的记录仍将引入。

指标命名空间 间隔? 命名空间? 注解
Insights.container/nodes 是的 节点不是命名空间范围的资源
洞察.容器/组件 是的 是的
Insights.container/containers 是的 是的
Insights.container/persistentvolumes 是的 是的

特殊场景

请查看以下参考,了解特定方案的配置要求。

启用控制平面日志

控制平面日志在 Azure Monitor 中作为 资源日志实现。 若要收集这些日志,请为群集创建 诊断设置 。 将它们发送到与容器日志相同的Log Analytics工作区。

使用 az monitor diagnostic-settings create 命令使用 Azure CLI 创建诊断设置。 有关参数说明,请参阅此命令的文档。

以下示例创建一个诊断设置,用于将所有 Kubernetes 类别发送到Log Analytics工作区。 这包括 特定于资源的模式 ,用于将日志发送到 Microsoft.ContainerService/fleets 支持的资源日志中列出的特定表。

az monitor diagnostic-settings create \
--name 'Collect control plane logs' \
--resource  /subscriptions/<subscription ID>/resourceGroups/<resource group name>/providers/Microsoft.ContainerService/managedClusters/<cluster-name> \
--workspace /subscriptions/<subscription ID>/resourcegroups/<resource group name>/providers/microsoft.operationalinsights/workspaces/<log analytics workspace name> \
--logs '[{"category": "karpenter-events","enabled": true},{"category": "kube-audit","enabled": true},
{"category": "kube-apiserver","enabled": true},{"category": "kube-audit-admin","enabled": true},{"category": "kube-controller-manager","enabled": true},{"category": "kube-scheduler","enabled": true},{"category": "cluster-autoscaler","enabled": true},{"category": "cloud-controller-manager","enabled": true},{"category": "guard","enabled": true},{"category": "csi-azuredisk-controller","enabled": true},{"category": "csi-azurefile-controller","enabled": true},{"category": "csi-snapshot-controller","enabled": true},{"category": "fleet-member-agent","enabled": true},{"category": "fleet-member-net-controller-manager","enabled": true},{"category": "fleet-mcs-controller-manager","enabled": true}]'
--metrics '[{"category": "AllMetrics","enabled": true}]' \
--export-to-resource-specific true

启用Windows指标(预览版)

从版本 6.4.0-main-02-22-2023-3ee44b9e 的托管 Prometheus 加载项容器开始,已为 AKS 集群启用 Windows 指标收集。 启用 Azure Monitor Metrics 加载项后,Windows DaemonSet Pod 即可开始在节点池中运行。 支持Windows Server 2019和Windows Server 2022。 按照以下步骤使 Pod 能够从Windows节点池收集指标。

注意

windows-exporter-daemonset.yaml 中没有 CPU/内存限制,因此可能会过度预配Windows节点。 有关详细信息,请参阅 资源预留

在部署工作负载时,请对容器设置资源内存和 CPU 限制。 这也会从 NodeAllocatable 中扣减,并且可以帮助群集范围的计划程序确定将哪些 pod 放置在哪些节点上。 调度没有资源限制的 Pod 可能会导致 Windows 节点资源超分配,在极端情况下可能会使节点变得不稳定。

安装Windows导出程序

在 AKS 节点上手动安装 windows-exporter,以便通过部署 windows-exporter-daemonset YAML 文件访问 Windows 指标。 启用以下收集器。 有关更多收集器,请参阅 用于 Windows 指标的 Prometheus 导出程序

  • [defaults]
    • container
    • memory
    • process
    • cpu_info

部署 windows-exporter-daemonset YAML 文件。 如果在节点中应用了任何污点,则需要应用适当的容忍度。

kubectl apply -f windows-exporter-daemonset.yaml

启用Windows指标

windowsexporterwindowskubeproxy布尔值在指标设置 ConfigMap 中设置为true,然后将其应用到群集。 请参阅 使用 ConfigMap 自定义从 Kubernetes 集群收集 Prometheus 指标

启用录制规则

启用开箱即用仪表板所需的录制规则:

  • 如果使用 CLI 入门,请添加选项 --enable-windows-recording-rules
  • 如果使用 ARM 模板、Bicep或Azure Policy载入,请将参数文件中的 enableWindowsRecordingRules 设置为 true
  • 如果群集已加入,请使用 ARM 模板此参数文件创建规则组。 这会添加所需的记录规则,这不是在集群上的 ARM 操作,不会影响集群目前的监控状态。

验证部署

使用 kubectl 命令行工具验证是否已正确部署代理。

托管 Prometheus

验证是否已在 Linux 节点池上正确部署 DaemonSet

kubectl get ds ama-metrics-node --namespace=kube-system

Pod 数应等于群集上的 Linux 节点数。 输出应与下面的示例类似:

User@aksuser:~$ kubectl get ds ama-metrics-node --namespace=kube-system
NAME               DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
ama-metrics-node   1         1         1       1            1           <none>          10h

验证正确部署了Windows节点

kubectl get ds ama-metrics-win-node --namespace=kube-system

Pod 数应等于群集上的Windows节点数。 输出应与下面的示例类似:

User@aksuser:~$ kubectl get ds ama-metrics-node --namespace=kube-system
NAME                   DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
ama-metrics-win-node   3         3         3       3            3           <none>          10h

验证是否为 Prometheus 部署了两个 ReplicaSet

kubectl get rs --namespace=kube-system

输出应与下面的示例类似:

User@aksuser:~$kubectl get rs --namespace=kube-system
NAME                            DESIRED   CURRENT   READY   AGE
ama-metrics-5c974985b8          1         1         1       11h
ama-metrics-ksm-5fcf8dffcd      1         1         1       11h

容器日志记录

验证是否已在 Linux 节点池上正确部署 DaemonSet

kubectl get ds ama-logs --namespace=kube-system

Pod 数应等于群集上的 Linux 节点数。 输出应与下面的示例类似:

User@aksuser:~$ kubectl get ds ama-logs --namespace=kube-system
NAME       DESIRED   CURRENT   READY     UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
ama-logs   2         2         2         2            2           <none>          1d

验证正确部署了Windows节点

kubectl get ds ama-logs-windows --namespace=kube-system

Pod 数应等于群集上的Windows节点数。 输出应与下面的示例类似:

User@aksuser:~$ kubectl get ds ama-logs-windows --namespace=kube-system
NAME                   DESIRED   CURRENT   READY     UP-TO-DATE   AVAILABLE   NODE SELECTOR     AGE
ama-logs-windows           2         2         2         2            2       <none>            1d

验证容器日志记录解决方案的部署

kubectl get deployment ama-logs-rs --namespace=kube-system

输出应与下面的示例类似:

User@aksuser:~$ kubectl get deployment ama-logs-rs --namespace=kube-system
NAME          READY   UP-TO-DATE   AVAILABLE   AGE
ama-logs-rs   1/1     1            1           24d

使用 CLI 查看配置

使用 aks show 命令了解解决方案是否已启用、Log Analytics工作区资源 ID 以及有关群集的摘要信息。

az aks show --resource-group <resourceGroupofAKSCluster> --name <nameofAksCluster>

该命令将会返回有关解决方案的 JSON 格式信息。 addonProfiles 部分应包括有关 omsagent 的信息,如下例所示:

"addonProfiles": {
    "omsagent": {
        "config": {
            "logAnalyticsWorkspaceResourceID": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/my-resource-group/providers/microsoft.operationalinsights/workspaces/my-workspace",
            "useAADAuth": "true"
        },
        "enabled": true,
        "identity": null
    },
}

后续步骤

  • 如果您在尝试注册时遇到问题,请查看故障排除指南
  • 了解如何在 Azure 门户中分析 Kubernetes 监视数据的容器分析。