Compartir a través de

监视 Azure Kubernetes 服务

本文介绍:

  • 可以为此服务收集的监视数据的类型。
  • 分析这些数据的方法。

注意

如果已熟悉此服务和/或 Azure Monitor,并且只想了解如何分析监视数据,请参阅本文末尾附近的“分析”部分。

如果具有依赖于 Azure 资源的关键应用程序和业务流程,则需要监视并获取系统的警报。 Azure Monitor 服务会从系统的每个组件收集并聚合指标和日志。 Azure Monitor 提供可用性、性能和复原能力视图,并在出现问题时向你发送通知。 可以使用 Azure 门户、PowerShell、Azure CLI、REST API 或客户端库来设置和查看监视数据。

重要

Kubernetes 是一个复杂的分布式系统,其中包含许多移动部件。 需要在多个级别进行监视。 尽管 AKS 是一项托管 Kubernetes 服务,但仍然需要在多个级别进行同样严格的监视。 本文提供了有关监视 AKS 群集的概要信息和最佳做法。

Insights

Azure 中的某些服务在 Azure 门户中具有内置的监视仪表板,可以从此入手来监视服务。 这些仪表板称为“见解”,可以在 Azure 门户的 Azure Monitor 的“见解中心”找到它们。

Azure Monitor Application Insights 用于进行应用程序性能监视 (APM)。 要通过更改代码来启用 Application Insights,请参阅启用 Azure Monitor OpenTelemetry。 要在不更改代码的情况下启用 Application Insights,请参阅 AKS 自动检测。 有关检测的更多详细信息,请参阅数据收集基本信息

监视数据

AKS 生成与监视 Azure 资源中的数据中所述的其他 Azure 资源类型相同的监视数据。 有关 AKS 创建的指标和日志的详细信息,请参阅监视 AKS 数据参考。 如下面的示意图和表格所示,其他 Azure 服务和功能会收集其他数据并启用其他分析选项。

监视来自 AKS 的数据集合的示意图。

说明
平台指标 系统会自动免费收集 AKS 群集的平台指标。 可以使用指标资源管理器来分析这些指标,或者使用它们来分析指标警报
活动日志 系统会自动免费收集 AKS 群集的活动日志。 这些日志跟踪群集的创建时间或出现配置更改等信息。 若要与其他日志数据一起接受分析,请将活动日志发送到 Log Analytics 工作区
资源日志 AKS 的控制平面日志实现为资源日志。 创建诊断设置以将它们发送至 Log Analytics 工作区,你可以在工作区中使用 Log Analytics 中的日志查询功能对其进行分析和警报。
容器见解 容器见解从群集收集各种日志和性能数据(包括 stdout/stderr 数据流),并将它们存储在 Log Analytics 工作区Azure Monitor 指标中。 使用容器见解,或 Log Analytics指标资源管理器中包含的视图和工作簿来分析这些数据。
Application insights Azure Monitor Application Insights 可收集日志、指标和分布式跟踪。 此遥测存储在 Log Analytics 工作区中,以便在 Azure 门户中进行分析。

资源类型

Azure 使用资源类型和 ID 的概念来标识订阅中的所有内容。 资源类型也是 Azure 中运行的每个资源的资源 ID 的一部分。 例如,虚拟机的一种资源类型是 Microsoft.Compute/virtualMachines。 有关服务及其关联资源类型的列表,请参阅资源提供程序

同样的,Azure Monitor 根据资源类型(也称为“命名空间”)将核心监视数据组织为指标和日志。 不同的指标和日志可用于不同的资源类型。 服务可能与多种资源类型关联。

有关 AKS 的资源类型的详细信息,请参阅 Azure Kubernetes 服务监视数据参考

数据存储

对于 Azure Monitor:

  • 指标数据存储在 Azure Monitor 指标数据库中。
  • 日志数据存储在 Azure Monitor 日志存储中。 Log Analytics 是 Azure 门户中可以查询此存储的工具。
  • Azure 活动日志是一个单独的存储区,在 Azure 门户中有自己的接口。

可以选择将指标和活动日志数据路由到 Azure Monitor 日志存储。 然后,可以使用 Log Analytics 查询数据并将其与其他日志数据关联。

许多服务可以使用诊断设置将指标和日志数据发送到 Azure Monitor 外部的其他存储位置。 示例包括 Azure 存储、托管的合作伙伴系统使用事件中心的非 Azure 合作伙伴系统

有关 Azure Monitor 如何存储数据的详细信息,请参阅 Azure Monitor 数据平台

Azure Monitor 平台指标

Azure Monitor 为大多数服务提供平台指标。 这些指标是:

  • 针对每个命名空间单独定义。
  • 存储在 Azure Monitor 时序指标数据库中。
  • 是轻型数据,并且能够支持准实时警报。
  • 用于跟踪资源随时间推移的性能变化。

集合:Azure Monitor 会自动收集平台指标。 不需要任何配置。

路由:通常还可将平台指标路由到 Azure Monitor 日志/Log Analytics,从而可以使用其他日志数据对其进行查询。 有关详细信息,请参阅指标诊断设置。 有关如何为服务配置诊断设置,请参阅在 Azure Monitor 中创建诊断设置

有关可以为 Azure Monitor 中的所有资源收集的所有指标的列表,请参阅 Azure Monitor 中支持的指标

如需 AKS 可用指标的列表,请参阅 Azure Kubernetes 服务监视数据参考

在 AKS 群集中,指标在群集监视、问题识别和性能优化方面发挥着重要作用。 平台指标是使用 kube-system 命名空间中安装的现成可用的指标服务器捕获的,该服务器会定期从由 Kubelet 提供服务的所有 Kubernetes 节点中抓取指标。 你还应启用 Azure 托管 Prometheus 指标来收集容器指标和 Kubernetes 对象指标,例如部署的对象状态。 有关详细信息,请参阅从 AKS 群集收集 Prometheus 指标

AKS 还通过 Azure 托管 Prometheus 从关键控制平面组件(例如 API 服务器、ETCD、计划程序)公开指标。 此功能目前以预览版提供。

自定义指标

还可使用 Azure Monitor REST API 将自己的指标发送到 Azure Monitor 指标数据库中。 然后,可在 Azure 门户中查看它们,并像任何其他指标一样对其发出警报。 有关详细信息,请参阅从 Azure 资源收集自定义指标

可以使用 Azure Monitor 中的以下 Azure 服务和功能对 Kubernetes 群集进行额外监视。 你可以在创建 AKS 群集期间从 Azure 门户的“集成”选项卡、Azure CLI、Terraform、Azure Policy 启用这些功能,也可以在以后将你的群集加入这些功能。 这些功能中的每一项都有可能会产生费用,因此在启用前,请先参阅其定价信息。

服务/功能 说明
容器见解 使用容器化版本的 Azure Monitor 代理从群集的每个节点收集 stdout/stderr 日志和 Kubernetes 事件。 该功能支持多种 AKS 群集监视场景。 可在使用 Azure CLIAzure Policy、Azure 门户或 Terraform 创建 AKS 群集时为其启用监视。 如果在创建群集时不启用容器见解,请参阅为 Azure Kubernetes 服务 (AKS) 群集启用容器见解,了解启用容器见解的其他选项。

容器见解将其大多数数据都存储在 Log Analytics 工作区中,你通常会使用与群集的资源日志相同的日志分析工作区。 请参阅设置 Log Analytics 工作区体系结构,了解应该使用多少个工作区以及将它们安排在哪里。

安装 aks-preview 扩展

  • 使用 az extension addaz extension update 命令安装或更新 aks-preview Azure CLI 预览版扩展。

    # Install the aks-preview extension
    az extension add --name aks-preview
    
    # Update the aks-preview extension
    az extension update --name aks-preview
    

注册 AzureMonitorMetricsControlPlanePreview 标志

  1. 使用 az feature register 命令注册 AzureMonitorMetricsControlPlanePreview 功能标志。

    az feature register --namespace "Microsoft.ContainerService" --name "AzureMonitorMetricsControlPlanePreview"
    

    状态显示为“已注册”需要几分钟时间

  2. 使用 az feature show 命令验证注册状态。

    az feature show --namespace "Microsoft.ContainerService" --name "AzureMonitorMetricsControlPlanePreview"
    
  3. 当状态反映为已注册时,使用 az provider register 命令刷新 Microsoft.ContainerService 资源提供程序的注册。

    az provider register --namespace "Microsoft.ContainerService"
    

在 AKS 群集上启用控制平面指标

在创建新群集或更新现有群集时,可以使用 Prometheus 加载项的 Azure Monitor 托管服务启用控制平面指标。

在新的 AKS 群集上启用控制平面指标:

若要从 Kubernetes 群集收集 Prometheus 指标,请参阅为 AKS 群集启用 Prometheus 和 Grafana,并按照 AKS 群集的“CLI”选项卡上的步骤进行操作。

在现有 AKS 群集上启用控制平面指标

  • 如果群集已有 Prometheus 加载项,请更新群集,以确保它使用 az aks update 命令开始收集控制平面指标。

    az aks update --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP
    

注意

与从群集节点收集的指标不同,控制平面指标是由一个不属于 ama-metrics 加载项的组件收集的。 启用 AzureMonitorMetricsControlPlanePreview 功能标志和托管 Prometheus 加载项可确保收集控制平面指标。 启用指标收集后,数据可能需要几分钟时间才会显示在工作区中。

查询控制平面指标

控制平面指标存储在群集区域的 Azure Monitor 工作区中。 可以直接从工作区或通过连接到工作区的 Azure 托管 Grafana 实例查询指标。

使用以下步骤在 Azure Monitor 工作区中查看控制平面指标:

  1. Azure 门户中导航到你的 AKS 群集。

  2. 在“监视”下,选择“见解”。

    Azure Monitor 工作区的屏幕截图。

注意

AKS 提供仪表板模板来帮助你实时查看和分析控制平面遥测数据。 如果使用 Azure 托管 Grafana 来可视化数据,则可以导入以下仪表板:

自定义控制平面指标

AKS 包含一组为每个组件收集和存储的预配置指标。 默认启用 API serveretcd。 可以通过 ama-settings-configmap 自定义此列表。

默认目标包括以下值:

controlplane-apiserver = true
controlplane-cluster-autoscaler = false
controlplane-kube-scheduler = false
controlplane-kube-controller-manager = false
controlplane-etcd = true

所有 ConfigMap 都应应用于任何群集的 kube-system 命名空间。

  • 仅从默认目标引入最小指标

    设置 default-targets-metrics-keep-list.minimalIngestionProfile="true" 时,每个默认目标只引入最小指标集:controlplane-apiservercontrolplane-etcd

  • 从所有目标引入所有指标

    利用以下步骤从群集上的所有目标收集所有指标:

    1. 下载 ConfigMap 文件 ama-metrics-settings-configmap.yaml 并将其重命名为 configmap-controlplane.yaml

    2. 设置 minimalingestionprofile = false

    3. default-scrape-settings-enabled 下,验证你要抓取的目标是否设置为 true。 只能指定以下目标:controlplane-apiservercontrolplane-cluster-autoscalercontrolplane-kube-schedulercontrolplane-kube-controller-managercontrolplane-etcd

    4. 使用“kubectl apply”命令来应用 ConfigMap。

      kubectl apply -f configmap-controlplane.yaml
      

      应用配置后,需要等待几分钟的时间,然后从控制平面抓取的指定目标的指标才会出现在 Azure Monitor 工作区中。

  • 除了最少指标外,还引入一些其他指标

    minimal ingestion profile 设置有助于减少指标引入量,因为它只收集默认仪表板使用的指标、默认记录规则和默认警报。 若要自定义此设置,请使用以下步骤:

    1. 下载 ConfigMap 文件 ama-metrics-settings-configmap 并将其重命名为 configmap-controlplane.yaml

    2. 设置 minimalingestionprofile = true

    3. default-scrape-settings-enabled 下,验证你要抓取的目标是否设置为 true。 只能指定以下目标:controlplane-apiservercontrolplane-cluster-autoscalercontrolplane-kube-schedulercontrolplane-kube-controller-managercontrolplane-etcd

    4. default-targets-metrics-keep-list 下,指定 true 目标的指标列表。 例如:

      controlplane-apiserver= "apiserver_admission_webhook_admission_duration_seconds| apiserver_longrunning_requests"
      
    5. 使用“kubectl apply”命令来应用 ConfigMap。

      kubectl apply -f configmap-controlplane.yaml
      

    应用配置后,需要等待几分钟的时间,然后从控制平面抓取的指定目标的指标才会出现在 Azure Monitor 工作区中。

  • 仅从某些目标引入特定指标

    1. 下载 ConfigMap 文件 ama-metrics-settings-configmap 并将其重命名为 configmap-controlplane.yaml

    2. 设置 minimalingestionprofile = false

    3. default-scrape-settings-enabled 下,验证你要抓取的目标是否设置为 true。 只能在此处指定以下目标:controlplane-apiservercontrolplane-cluster-autoscalercontrolplane-kube-schedulercontrolplane-kube-controller-managercontrolplane-etcd

    4. default-targets-metrics-keep-list 下,指定 true 目标的指标列表。 例如:

      controlplane-apiserver= "apiserver_admission_webhook_admission_duration_seconds| apiserver_longrunning_requests"
      
    5. 使用“kubectl apply”命令来应用 ConfigMap。

      kubectl apply -f configmap-controlplane.yaml
      

      应用配置后,需要等待几分钟的时间,然后从控制平面抓取的指定目标的指标才会出现在 Azure Monitor 工作区中。

排查控制平面指标问题

请确保功能标志 AzureMonitorMetricsControlPlanePreview 是否已启用以及 ama-metrics Pod 是否正在运行。

注意

Azure 托管服务 Prometheus 的问题排查方法不会直接在此处进行转换,因为抓取控制平面的组件不存在于托管 Prometheus 加载项中。

  • ConfigMap 格式设置

    请确保在 ConfigMap 中使用正确的格式,并且字段(特别是 default-targets-metrics-keep-listminimal-ingestion-profiledefault-scrape-settings-enabled)已正确填充其预期值。

  • 隔离控制平面与数据平面

    首先将一些节点相关指标设置为 true,并验证这些指标是否转发到工作区。 这有助于确定问题是否特定于抓取控制平面指标操作。

  • 引入的事件

    应用所做的更改后,可以从“Azure Monitor 概述”页面或从所选群集的“监视”部分打开指标资源管理器,并检查每分钟引入的事件数是否增加或减少。 它应该可以帮助你确定是缺少特定指标还是所有指标都缺失。

  • 特定指标未公开

    在某些情况下,指标已记录,但未从目标公开,也未转发到 Azure Monitor 工作区。 在这种情况下,有必要验证其他指标是否转发到工作区。

  • 无法访问 Azure Monitor 工作区

    启用该加载项时,你可能会指定一个无权访问的现有工作区。 在这种情况下,指标可能看起来没有被收集和转发。 确保在启用加载项或创建群集时创建新的工作区。

在 AKS 群集上禁用控制平面指标

可以随时禁用控制平面指标,方法是禁用托管 Prometheus 加载项并取消注册 AzureMonitorMetricsControlPlanePreview 功能标志。

  1. 通过使用 az aks update 命令删除抓取 Prometheus 指标的指标加载项。

    az aks update --disable-azure-monitor-metrics --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP
    
  2. 通过使用 az feature unregister 命令取消注册 AzureMonitorMetricsControlPlanePreview 功能标志,禁止抓取 AKS 群集上的控制平面指标。

    az feature unregister "Microsoft.ContainerService" --name "AzureMonitorMetricsControlPlanePreview"
    

常见问题解答

  • 是否可以使用自承载 Prometheus 抓取控制平面指标?

    否,目前不可以使用自承载 Prometheus 抓取控制平面指标。 自托管的 prometheus 只能根据负载均衡器抓取单个实例。 这些指标并不可靠,因为控制平面指标通常有多个副本,这些副本只能通过托管 Prometheus 可见

  • 为何无法通过控制平面指标获得用户代理?

    Kubernetes 中的控制平面指标没有用户代理。 用户代理只能通过控制平面日志使用,控制平面日志可通过诊断设置获取。

有关可用的资源日志类别、其关联的 Log Analytics 表以及 AKS 的日志架构,请参阅 Azure Kubernetes 服务监视数据参考

AKS 控制平面/资源日志

AKS 控制平面日志实现为 Azure Monitor 中的资源日志。 在创建诊断设置以将其路由到一个或多个位置之前,不会收集和存储资源日志。 通常将它们发送至 Log Analytics 工作区,那里是存储大多数容器见解数据的地方。

有关使用 Azure 门户、CLI 或 PowerShell 创建诊断设置的详细过程,请参阅创建诊断设置。 创建诊断设置时,请指定要收集的日志类别。 AKS 监视数据参考中列出了 AKS 的类别。

重要

收集 AKS 资源日志会产生巨大的成本,尤其是收集 kube-audit 日志。 请考虑以下建议以减少收集的数据量:

  • 不需要时禁用 kube-audit 日志记录。
  • 通过 kube-audit-admin 启用收集,这不包括获取和列出审核事件。
  • 按此处所述启用特定于资源的日志,并将 AKSAudit 表配置为基本日志

如需进一步的建议,请参阅使用 Azure 服务和云原生工具监视 Kubernetes 群集;如需降低监视成本的进一步策略,请参阅成本优化和 Azure Monitor

对于资源日志,AKS 支持 Azure 诊断模式特定于资源的模式。 这指定了发送数据的 Log Analytics 工作区中的表。 Azure 诊断模式会将所有数据发送到 AzureDiagnostics 表,而特定于资源的模式会将数据发送到 AKS 审核、AKS 审核管理员和 AKS 控制平面,如资源日志处的表中所示。

出于以下原因,建议对 AKS 使用特定于资源的模式:

  • 数据更易于查询,因为它位于专用于 AKS 的单个表中。
  • 支持配置为基本日志,以节省大量成本。

有关收集模式之间的差异(包括如何更改现有设置)的详细信息,请参阅选择收集模式

注意

还可以通过 CLI 配置诊断设置。 在这种情况下,我们不能保证成功解决问题,因为它不会检查群集的预配状态。 请务必检查群集的诊断设置以反映配置后的情况。

az monitor diagnostic-settings create --name AKS-Diagnostics --resource /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myresourcegroup/providers/Microsoft.ContainerService/managedClusters/my-cluster --logs '[{"category": "kube-audit","enabled": true}, {"category": "kube-audit-admin", "enabled": true}, {"category": "kube-apiserver", "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}]'  --workspace /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/myresourcegroup/providers/microsoft.operationalinsights/workspaces/myworkspace --export-to-resource-specific true

示例日志查询

重要

在 AKS 群集菜单中选择“日志”时,Log Analytics 随即打开,其查询范围设置为当前群集。 这意味着日志查询只包含来自该资源的数据。 如果你希望运行的查询包含来自其他群集或其他 Azure 服务的数据,请从“Azure Monitor”菜单中选择“日志”。 有关详细信息,请参阅 Azure Monitor Log Analytics 中的日志查询范围和时间范围

如果群集的诊断设置使用 Azure 诊断模式,AKS 的资源日志将存储在 AzureDiagnostics 表中。 可以使用“类别”列来区分不同的日志。 有关每个类别的说明,请参阅 AKS 参考资源日志

说明 日志查询
统计每个类别的日志
(Azure 诊断模式)
AzureDiagnostics
| where ResourceType == "MANAGEDCLUSTERS"
| summarize count() by Category
所有 API 服务器日志
(Azure 诊断模式)
AzureDiagnostics
| where Category == "kube-apiserver"
某个时间范围内的所有 kube-audit 日志
(Azure 诊断模式)
let starttime = datetime("2023-02-23");
let endtime = datetime("2023-02-24");
AzureDiagnostics
| where TimeGenerated between(starttime..endtime)
| where Category == "kube-audit"
| extend event = parse_json(log_s)
| extend HttpMethod = tostring(event.verb)
| extend User = tostring(event.user.username)
| extend Apiserver = pod_s
| extend SourceIP = tostring(event.sourceIPs[0])
| project TimeGenerated, Category, HttpMethod, User, Apiserver, SourceIP, OperationName, event
所有审核日志
(特定于资源模式)
AKSAudit
所有审核日志,不包括获取和列出审核事件
(特定于资源模式)
AKSAuditAdmin
所有 API 服务器日志
(特定于资源模式)
AKSControlPlane
| where Category == "kube-apiserver"

请参阅 Log Analytics 查询接口并选择资源类型 Kubernetes 服务,了解如何访问 Log Analytics 工作区中一系列预构建的查询。 请参阅容器见解查询,查看容器见解常见查询的列表。

AKS 数据平面/容器见解日志

容器见解从容器和 Kubernetes 群集收集各种类型的遥测数据,以帮助你对 AKS 群集中运行的容器化应用程序进行监视、故障排除和深入了解。 有关容器见解所使用的表列表及其详细说明,请参阅 Azure Monitor 表格引用。 这些表都可用于日志查询

成本优化设置允许你自定义和控制通过容器见解代理收集的指标数据。 此功能支持通过 Azure Monitor 数据收集规则 (DCR)配置单个表选择的数据收集设置、数据收集间隔,以及在收集数据时要排除的命名空间。 这些设置可以控制引入量并降低容器见解的监视成本。 可以使用以下选项通过 Azure 门户自定义容器见解收集的数据。 选择除“全部(默认)”之外的任何选项都会导致容器见解体验不可用。

分组 说明
全部(默认值) 所有标准容器见解表 启用默认容器见解可视化效果的必需项
性能 性能, InsightsMetrics
日志和事件 ContainerLog 或 ContainerLogV2,KubeEvents,KubePodInventory 如果已启用托管 Prometheus 指标,建议使用
工作负载,部署和 HPA InsightsMetrics, KubePodInventory, KubeEvents, ContainerInventory, ContainerNodeInventory, KubeNodeInventory, KubeServices
永久卷 InsightsMetrics, KubePVInventory

日志和事件分组从 ContainerLog 或 ContainerLogV2、KubeEvents、KubePodInventory 表捕获日志,但不捕获指标。 用来收集指标的建议路径是从 AKS 群集启用适用于 Prometheus 的 Azure Monitor 托管服务,并使用 Azure 托管 Grafana 进行数据可视化。 有关详细信息,请参阅管理 Azure Monitor 工作区

ContainerLogV2 架构

Azure Monitor 容器见解为容器日志提供了一个称为 ContainerLogV2 的架构,这是推荐的选项。 此格式包括以下字段,方便构建常用查询来查看与 AKS 和已启用 Azure Arc 的 Kubernetes 群集相关的数据:

  • ContainerName
  • PodName
  • PodNamespace

此外,此架构兼容基本日志数据计划,与标准分析日志相比,该计划是成本较低的替代方案。 “基本”日志数据计划可节省在日志分析工作区中引入和存储大量详细日志的成本,以用于调试、故障排除和审核。 它不会影响分析和警报的成本。 有关详细信息,请参阅管理 Log Analytics 工作区中的表

对于使用 ARM、Bicep、Terraform、Policy 和 Azure 门户通过托管标识身份验证加入容器见解的客户,ContainerLogV2 是推荐使用的方法和默认架构。 有关如何通过群集的数据收集规则 (DCR) 或 ConfigMap 启用 ContainerLogV2 的详细信息,请参阅启用 ContainerLogV2 架构

Azure 活动日志

活动日志包含订阅级事件,这些事件跟踪从资源外部看到的每个 Azure 资源的操作;例如,创建新资源或启动虚拟机。

收集:活动日志事件会自动生成并收集在单独的存储中,以便在 Azure 门户中查看。

路由:可将活动日志数据发送到 Azure Monitor 日志,以便可以将它们与其他日志数据一起进行分析。 也可使用其他位置(例如 Azure 存储、Azure 事件中心和某些 Microsoft 监视合作伙伴)。 有关如何路由活动日志的详细信息,请参阅 Azure 活动日志概述

实时查看 Azure Kubernetes 服务容器日志、事件和 Pod 指标

在本节中,了解如何使用容器见解中的实时数据功能来实时查看 Azure Kubernetes 服务 (AKS) 容器日志、事件和 Pod 指标。 此功能提供对 kubectl logs -ckubectl get 事件和 kubectl top pods 的直接访问,以帮助实时排查问题。

注意

AKS 使用 Kubernetes 群集级日志记录体系结构。 容器日志位于节点上的 /var/log/containers 内。 若要访问节点,请参阅连接到 Azure Kubernetes 服务 (AKS) 群集节点

有关设置实时数据功能的帮助,请参阅在 Container Insights 中配置实时数据。 此功能直接访问 Kubernetes API。 有关身份验证模型的详细信息,请参阅 Kubernetes API

查看 AKS 资源实时日志

注意

若要从专用群集访问日志,必须位于群集所在的同一专用网络上的计算机上。

  1. Azure 门户中导航到你的 AKS 群集。

  2. 在“Kubernetes 资源”下,选择“工作负荷”

  3. 选择要查看日志的部署、Pod、副本集、StatefulSet、作业或 Cron 作业,然后选择“实时日志”

  4. 选择要查看其日志的资源。

    以下示例显示了 Pod 资源的日志:

    显示实时日志的部署的屏幕截图。

查看实时日志

当容器引擎在“群集”、“节点”、“控制器”或“容器”上生成实时日志数据时,可查看这些数据

  1. Azure 门户中导航到你的 AKS 群集。

  2. 在“监视”下,选择“见解”。

  3. 选择“群集”、“节点”、“控制器”或“容器”选项卡,然后选择要查看其日志的对象。

  4. 在资源的“概述”中,选择“实时日志”。

    注意

    若要在 Log Analytics 工作区中查看数据,请选择“在 Log analytics 中查看日志”。 若要详细了解如何查看历史日志、事件和指标,请参阅如何从容器见解中查询日志

    身份验证成功后,如果数据可以检索,它将开始流式传输到“实时日志”选项卡。可以在连续流中在此处查看日志数据。 下图显示了“容器”资源的日志:

    显示容器实时日志视图数据选项的屏幕截图。

查看实时活动

当容器引擎在“群集”、“节点”、“控制器”或“容器”上生成实时事件数据时,可查看这些数据

  1. Azure 门户中导航到你的 AKS 群集。

  2. 在“监视”下,选择“见解”。

  3. 选择“群集”、“节点”、“控制器”或“容器”选项卡,然后选择要查看其活动的对象。

  4. 在资源的“概述”页上,选择“实时活动”

    注意

    若要在 Log Analytics 工作区中查看数据,请选择“在 Log analytics 中查看活动”。 若要详细了解如何查看历史日志、事件和指标,请参阅如何从容器见解中查询日志

    成功身份验证后,如果可以检索数据,它将开始流式传输到“实时事件”选项卡。下图显示了“容器”资源的活动:

    显示容器实时活动视图数据选项的屏幕截图。

查看指标

当容器引擎在“节点”或“控制器”上生成实时指标数据时,可通过选择一个 Pod 资源来查看这些数据

  1. Azure 门户中导航到你的 AKS 群集。

  2. 在“监视”下,选择“见解”。

  3. 选择“节点”或“控制器”选项卡,然后选择要查看其指标的 Pod 对象。

  4. 在资源的“概述”页上,选择“实时指标”

    注意

    若要在 Log Analytics 工作区中查看数据,请选择“在 Log analytics 中查看活动”。 若要详细了解如何查看历史日志、事件和指标,请参阅如何从容器见解中查询日志

    成功身份验证后,如果可以检索数据,它将开始流式传输到“实时指标”选项卡。下图显示了 Pod 资源的指标:

    显示 Pod 实时指标视图数据选项的屏幕截图。

分析监视数据

有许多工具可用于分析监视数据。

Azure Monitor 工具

Azure Monitor 支持以下基本工具:

支持更复杂可视化效果的工具包括:

  • 仪表板,它支持将不同类型的数据合并到 Azure 门户的单个窗格中。
  • 工作簿,它们是可在 Azure 门户中创建的可自定义报表。 工作簿可以包括文本、指标和日志查询。
  • Grafana,它是一个适用于操作仪表板的开放平台工具。 可以使用 Grafana 创建包含来自除 Azure Monitor 以外多个源的数据的仪表板。
  • Power BI,它是一项业务分析服务,可提供跨各种数据源的交互式可视化效果。 可将 Power BI 配置为自动从 Azure Monitor 导入日志数据,以利用这些可视化效果。

Azure Monitor 导出工具

可以使用以下方法将数据从 Azure Monitor 中提取到其他工具中:

要开始使用适用于 Azure Monitor 的 REST API,请参阅 Azure 监视 REST API 演练

Azure 门户中的监视概述页面

在 Azure 门户中,选择 AKS 群集资源“概述”页面上的“监视”选项卡即可快速开始查看监视数据。 此选项卡包括群集常见指标的图,由节点池分隔。 你可以选择其中任意一张图,以在指标资源管理器中进一步分析数据。

“监视”页还包含群集的托管 Prometheus容器见解的链接。 如果需要启用这些工具,可在此处启用它们。 你还会在屏幕顶部看到一个横幅,建议你启用其他功能来改进群集的监视。

提示

你可以通过在 Azure 门户主页上选择 Azure Monitor 来访问订阅中所有 AKS 群集的监视功能。

Kusto 查询

可使用 Kusto 查询语言 (KQL) 来分析 Azure Monitor 日志/Log Analytics 存储中的监视数据。

重要

在门户的服务菜单中选择“日志”时,会打开 Log Analytics,并且其查询范围设置为当前服务。 此范围意味着日志查询将仅包含来自该资源类型的数据。 如果希望运行的查询包含来自其他 Azure 服务的数据,请从“Azure Monitor”菜单中选择“日志”。 有关详细信息,请参阅 Azure Monitor Log Analytics 中的日志查询范围和时间范围

有关任何服务的常见查询列表,请参阅 Log Analytics 查询接口

警报

在监视数据中发现特定情况时,Azure Monitor 警报会主动向你发出通知。 有了警报,你就可以在客户注意到你的系统中的问题之前找出和解决问题。 有关详细信息,请参阅 Azure Monitor 警报

Azure 资源的常见警报具有许多来源。 有关 Azure 资源常见警报的示例,请参阅示例日志警报查询Azure Monitor 基线警报 (AMBA) 站点提供了实现重要平台指标警报、仪表板和指南的半自动化方法。 该站点适用于持续扩展的 Azure 服务子集,包括属于 Azure 登陆区域 (ALZ) 的所有服务。

通用警报模式对 Azure Monitor 警报通知的使用体验进行了标准化。 有关详细信息,请参阅常见警报架构

警报类型

可以针对 Azure Monitor 数据平台中的任何指标或日志数据源发出警报。 警报具有许多不同类型,具体取决于要监视的服务以及要收集的监视数据。 不同类型的警报各有优缺点。 有关详细信息,请参阅选择正确的监视警报类型

以下列表介绍了可以创建的 Azure Monitor 警报类型:

  • 指标警报会定期评估资源指标。 指标可以是平台指标、自定义指标、Azure Monitor 中的日志转换为的指标或 Application Insights 指标。 指标警报还可以应用多个条件和动态阈值。
  • 日志警报支持用户使用 Log Analytics 查询按照预定义的频率评估资源日志。
  • 当发生匹配所定义条件的新活动日志事件时,会触发活动日志警报。 资源运行状况警报和服务运行状况警报是报告服务和资源运行状况的活动日志警报。

某些 Azure 服务还支持智能检测警报Prometheus 警报建议的警报规则

对于某些服务,你可以通过将相同的指标警报规则应用于同一 Azure 区域中的多个相同类型资源,进行大规模的监视。 将为每个受监视的资源发送单独通知。 有关支持的 Azure 服务,请参阅使用一个警报规则监视多个资源

注意

如果要创建或运行在服务中运行的应用程序,Azure Monitor Application Insights 提供其他类型的警报。

基于 Prometheus 指标的警报

为群集启用 Prometheus 指标收集时,可下载一系列推荐的 Prometheus 警报规则。 此下载包括以下规则:

Level 警报
群集级别 KubeCPUQuotaOvercommit
KubeMemoryQuotaOvercommit
KubeContainerOOMKilledCount
KubeClientErrors
KubePersistentVolumeFillingUp
KubePersistentVolumeInodesFillingUp
KubePersistentVolumeErrors
KubeContainerWaiting
KubeDaemonSetNotScheduled
KubeDaemonSetMisScheduled
KubeQuotaAlmostFull
节点级别 KubeNodeUnreachable
KubeNodeReadinessFlapping
Pod 级别 KubePVUsageHigh
KubeDeploymentReplicasMismatch
KubeStatefulSetReplicasMismatch
KubeHpaReplicasMismatch
KubeHpaMaxedOut
KubePodCrashLooping
KubeJobStale
KubePodContainerRestart
KubePodReadyStateLow
KubePodFailedState
KubePodNotReadyByController
KubeStatefulSetGenerationMismatch
KubeJobFailed
KubeContainerAverageCPUHigh
KubeContainerAverageMemoryHigh
KubeletPodStartUpLatencyHigh

请参阅如何从容器见解创建日志警报如何从容器见解查询日志日志警报:度量两项不同的指标,用于监视不同的场景:

  • 结果计数:计算查询返回的行数,可用于处理 Windows 事件日志、Syslog、应用程序异常等事件。
  • 值的计算:基于数字列进行计算,可用于包含任意数量的资源。 例如 CPU 百分比。

根据所需的警报场景,需要创建日志查询,通过使用 now 运算符并回退一个小时将 DateTime 与当前时间进行比较。 若要了解如何构建基于日志的警报,请参阅基于容器见解创建日志警报

AKS 警报规则

下表列出了 AKS 的一些建议警报规则。 这些警报只是示例。 可为 Azure Kubernetes 服务监视数据参考中列出的任何指标、日志条目或活动日志条目设置警报。

条件 说明
CPU 使用率百分比 > 95 当所有节点的平均 CPU 使用率超过阈值时触发。
内存工作集百分比 > 100 当所有节点的平均工作集超过阈值时触发。

基于日志的警报

日志警报允许你基于数据平面控制平面日志发出警报。 按预定义的间隔运行查询,并根据结果创建警报。 你可以检查某些记录的计数,或根据数值列执行计算。

请参阅如何从容器见解创建日志警报如何从容器见解查询日志日志警报:度量两项不同的指标,用于监视不同的场景:

  • 结果计数:计算查询返回的行数,可用于处理 Windows 事件日志、Syslog、应用程序异常等事件。
  • 值的计算:基于数字列进行计算,可用于包含任意数量的资源。 例如 CPU 百分比。

网络可观测性

网络可观测性是维护正常运行且性能良好的 Kubernetes 群集的重要组成部分。 通过收集和分析有关网络流量的数据,可以深入了解群集的运行方式,并在潜在问题导致中断或性能下降之前识别这些问题。

启用网络可观测性加载项后,它将收集有用指标并将其转换为 Prometheus 格式,然后可在 Grafana 中将其可视化。 启用后,收集的指标会自动引入到适用于 Prometheus 的 Azure Monitor 托管服务中。 Grafana 公共仪表板存储库中提供了一个 Grafana 仪表板,用于可视化 Prometheus 收集的网络可观测性指标。 有关详细信息,请参阅网络可观测性设置中的详细说明。