使用 Azure Monitor 和云本机工具监视 Kubernetes 群集

Azure Monitor 中的 Kubernetes 监控介绍了 Azure Monitor 提供的服务,这些服务可对 Kubernetes 环境及其上运行的工作负载进行全面监控。 本文提供了有关如何利用这些服务的最佳做法,根据管理这些服务的典型角色监视 Kubernetes 环境的不同层。

以下是典型 Kubernetes 环境的通用模型(从基础结构层到应用程序)的图示。 每层都有不同的监视要求,这些要求由不同的服务解决,通常由组织中的不同角色管理。

包含相关管理角色的 Kubernetes 环境的层关系图。

多个角色通常负责 Kubernetes 环境的不同层以及依赖于它的应用程序。 根据组织的规模,不同的人员或团队可能会填补这些角色。 下表描述了角色。 以下部分提供每个角色通常遇到的监视方案。

角色 说明
开发人员 开发和维护群集上运行的应用程序。 负责应用程序特有的流量管理,包括监控应用程序的性能和故障。 根据 SLA 维护应用程序的可靠性。
平台工程师 负责 Kubernetes 群集。 预配和维护开发人员使用的平台。
网络工程师 负责工作负载与群集的任何入口/出口之间的流量。 分析网络流量并执行威胁分析。

网络工程师

网络工程师负责工作负载与群集的任何入口/出口之间的流量。 他们分析网络流量并执行威胁分析。

网络工程师的 Kubernetes 环境各层图示。

监视级别 1 - 网络

此层涵盖流入、流出群集中工作负荷和群集中工作负荷之间的网络流量。

以下是监视网络的常见方案。

  • 创建包含网络观察程序虚拟网络流日志,以记录有关流经群集使用的虚拟网络的 IP 流量的信息。 然后使用 流量分析 分析来分析此数据并提供见解。 用于流量分析的工作区应与容器日志和控制平面日志使用相同的 Log Analytics 工作区。
  • 使用 流量分析,确定群集使用的任何流量是否流向或流出任何意外端口,以及是否有流量流经不应公开的公共 IP。 使用此信息确定是否需要修改网络规则。
  • 对于 AKS 群集,请使用适用于 AKS 的网络可观测性加载项(预览版)监视和观察群集中服务之间的访问(东-西流量)。

平台工程师

平台工程师(也称为群集管理员)负责 Kubernetes 群集本身。 他们预配和维护开发人员使用的平台。 他们需要了解群集及其组件的运行状况,并能够排查检测到的任何问题。 他们还需要了解运行群集的成本,并有可能将成本分配给不同的团队。

平台工程师的 Kubernetes 环境各层图示。

大型组织可能还有一名 车队架构师,该架构类似于平台工程师,但负责多个群集。 他们需要查看整个环境,并且必须大规模执行管理任务。 以下指导中包含适用于大范围的建议。 请参阅 Azure Kubernetes Fleet Manager 是什么,详细了解如何为多群集和大规模方案创建 Fleet 资源。

为平台工程师配置监控

以下部分介绍如何使用容器级别的Azure服务监视 Kubernetes 环境。 每个部分提供功能和集成选项,帮助你确定可能需要修改此配置的位置以满足你的特定要求。 可以按照 为 Kubernetes 群集启用监视 中所述,在同一操作流程中启用托管式 Prometheus 和容器日志。 以下各节分别介绍每个服务,以涵盖所有载入和配置选项。

启用 Prometheus 度量指标的抓取

重要

若要对 Prometheus 使用Azure Monitor托管服务,需要具有 Azure Monitor 工作区。 有关工作区配置的设计注意事项的信息,请参阅 Azure Monitor 工作区体系结构

在创建集群时或将此功能添加到现有集群时,通过 Azure Monitor 为 Prometheus 提供的托管服务启用 Prometheus 指标的抓取。 有关详细信息,请参阅 “启用 Prometheus 指标 ”。

如果已有自管理 Prometheus 环境,请使用远程写入将数据从该环境发送到 Azure Monitor Prometheus 托管服务

有关默认收集的指标及其收集频率的详细信息,请参阅 Azure Monitor 中的 Default Prometheus 指标配置。 若要自定义配置,请参阅 在 Azure Monitor 托管的 Prometheus 服务中自定义抓取 Prometheus 指标

启用 Grafana 以分析 Prometheus 数据

注释

带有 Grafana 的 Azure Monitor 仪表板目前处于公开预览版阶段,可取代 Azure 托管 Grafana。 此版本的 Grafana 不收费,无需配置,并在 Azure 门户中提供仪表板。 使用Azure 托管 Grafana创建仪表板,用于合并来自多个数据源的数据或与现有 Grafana 环境集成。

创建Azure 托管 Grafana实例并将其链接到Azure Monitor工作区,以使用 Prometheus 数据作为数据源。 若要手动配置此连接,请参阅将 Prometheus 的Azure Monitor托管服务添加为数据源。 各种 预生成的仪表板 可用于监视 Kubernetes 群集,包括多个仪表板,这些仪表板提供与容器见解视图类似的信息。

如果你有现有的 Grafana 环境,请继续使用它,并将 Prometheus 的Azure Monitor托管服务添加为数据源。 若要在自定义 Grafana 仪表板中使用容器见解收集的数据,请将Azure Monitor数据源添加到 Grafana。 进行此配置,以便将重点放在 Grafana 仪表板上,而非 Container insights 视图和报表。

启用容器日志收集

重要

收集容器日志需要Log Analytics工作区

为 Kubernetes 群集启用容器日志收集时,Azure Monitor在 Azure Monitor 中部署容器化版本的 Azure Monitor 代理,以便将 stdout/stderr 和基础结构日志发送到 Log Analytics 工作区可以使用 Kusto 查询语言(KQL)对其进行分析。

有关载入 Kubernetes 群集的先决条件和配置选项,请参阅 “为 AKS 群集启用监视”。 使用 Azure Policy 加入,以确保所有群集都保留一致的配置。

为群集启用容器日志记录后,执行以下作来优化安装。

  • 如果只偶尔使用日志进行故障排除,请考虑将此表配置为基本日志
  • 使用 容器见解日志预设 ,通过限制收集的数据量来减少数据引入成本。 通过将容器见解配置为仅收集 日志和事件 来禁用指标收集,因为 Prometheus 收集了许多相同的指标值。

如果有用于收集日志的现有解决方案,请按照该工具的指导进行作,或者使用 Azure Monitor 启用日志收集,并使用 Log Analytics 工作区的 data 导出功能将数据发送到 Azure 事件中心 以转发到备用系统。

收集 AKS 群集的控制平面日志

AKS 控制平面组件的日志在 Azure 中实现为 资源日志为每个 AKS 群集创建诊断设置,以便将资源日志发送到Log Analytics工作区。 使用Azure Policy确保跨多个群集进行一致的配置。

将资源日志发送到工作区需要花费,因此请仅收集要使用的日志类别。 有关可用于 AKS 的类别的说明,请参阅资源日志。 首先收集最少数量的类别,然后随着需求的增加和对相关成本的了解,修改诊断设置以收集其他类别。 如果需要出于合规性原因保留信息,请将日志发送到Azure存储帐户以降低成本。 有关引入和保留日志数据的成本的详细信息,请参阅 Azure Monitor 日志定价详细信息

如果不确定最初启用哪些资源日志,请采用以下根据最常见客户要求提出的建议。 根据需要稍后启用其他类别。

类别 是否启用? 目标
kube-apiserver 启用 Log Analytics 工作区
kube-audit 启用 Azure存储。 这样可以将成本保持在最低水平,但仍然保留审核日志供审核者使用。
kube-audit-admin 启用 Log Analytics 工作区
kube-controller-manager 启用 Log Analytics 工作区
Kube调度器 禁用
集群自动扩展器 如果自动缩放已启用,则启用 Log Analytics 工作区
临界 如果Microsoft Entra ID已启用,则启用 Log Analytics 工作区
AllMetrics 禁用,因为指标是在托管的 Prometheus 中收集的 Log Analytics 工作区

若要将控制平面日志转发到现有日志记录解决方案,请使用Log Analytics工作区的数据导出功能,如“启用容器日志收集”中所述。

收集 AKS 群集的活动日志

对 AKS 群集的配置更改存储在活动日志中。 创建诊断设置,以将此数据发送到Log Analytics工作区以使用其他监视数据对其进行分析。 此数据收集不收取任何费用,Log Analytics可以分析或警报数据。

监视级别 2 - 群集级别组件

此层涵盖构成群集及其计算、存储和网络容量的节点。

群集级别包括以下组件:

组件 监视要求
Node 了解每个节点的 CPU、内存、磁盘和 IP 使用情况的就绪状态和性能,并在部署任何工作负载之前主动监视其使用趋势。

以下是监视群集级别组件的常见方案。

Azure 门户

  • 使用Azure门户中的统一监视仪表板查看群集中节点的性能,包括 CPU 和内存利用率。
  • 使用“节点”视图可查看每个节点的运行状况,以及在每个节点上运行的 Pod 的运行状况和性能。 有关分析节点运行状况和性能的详细信息,请参阅 Azure portal. 中的 Analyze Kubernetes 群集性能。
  • 在“报告”下,使用“节点监视”工作簿分析磁盘容量、磁盘 IO 和 GPU 使用情况。 有关这些工作簿的详细信息,请参阅节点监视工作簿
  • 在“监视”下,可以选择“工作簿”,然后选择“子网 IP 使用情况”,查看所选时间范围内每个节点上的 IP 分配和赋值。

Grafana 仪表板

  • 使用Azure 托管 Grafana中的预生成仪表板查看节点的运行状况和性能。
  • 使用 Grafana 仪表板中与磁盘相关的Prometheus 指标值(例如 node_disk_io_time_seconds_totalwindows_logical_disk_free_bytes)监视附加存储。
  • 可以使用多个 Kubernetes 仪表板,根据 Prometheus 中存储的数据可视化节点的性能和运行状况。

Log Analytics

故障排除

成本分析

  • 配置 OpenCost,这是一个开源的、供应商无关的 CNCF 沙盒项目,用于了解 Kubernetes 成本,为群集成本分析提供支持。 它将详细的成本数据导出到Azure存储。
  • 使用 OpenCost 中的数据按组织中的不同团队细分群集的相对使用情况,并在每个团队之间分配成本。
  • 使用 OpenCost 中的数据,确保群集通过密集打包工作负载(使用较少的大型节点而不是许多较小的节点)来使用其节点的全部容量。

监控级 3 - 托管 Kubernetes 组件

此层涵盖Azure托管的控制平面组件,例如 API 服务器和 kubelet。

管理的 Kubernetes 层级包括以下组件:

组件 监控
API 服务器 监视 API 服务器的状态,确定服务关闭时请求负载的任何增加以及瓶颈。
Kubelet 监控 kubelet 以帮助排查 Pod 管理问题、Pod 无法启动、节点未就绪或 Pod 被终止等问题。

以下是监视托管 Kubernetes 组件的常见方案。

Azure 门户

Grafana

  • 使用 kubelet Azure 托管 Grafana 中的预生成仪表板查看每个 kubelet 的运行状况和性能。
  • 使用 Kubernetes apiserver 等仪表板获取 API 服务器性能的完整视图。 这包括诸如请求延迟和工作队列处理时间之类的值。

Log Analytics

  • 通过使用资源日志进行日志查询来分析由 AKS 组件生成的控制平面日志

  • 活动日志记录 AKS 的任何配置活动。 将活动日志发送到Log Analytics工作区后,请使用Log Analytics对其进行分析。 例如,以下示例查询将返回可标识你的所有 AKS 群集中成功升级的记录。

    AzureActivity
    | where CategoryValue == "Administrative"
    | where OperationNameValue == "MICROSOFT.CONTAINERSERVICE/MANAGEDCLUSTERS/WRITE"
    | extend properties=parse_json(Properties_d)
    | where properties.message == "Upgrade Succeeded"
    | order by TimeGenerated desc
    

故障排除

监视级别 4 - Kubernetes 对象和工作负载

此层涵盖在集群上运行工作负载的部署、Pod 和容器。

Kubernetes 对象和工作负载级别包括以下组件:

组件 监视要求
部署 监视部署的实际状态与预期状态,以及在其上运行的 Pod 的状态和资源利用率。
Pods 监视 AKS 群集上运行的 Pod 的状态和资源利用率,包括 CPU 和内存。
容器 监视 AKS 群集上运行的容器的资源利用率,包括 CPU 和内存。

以下是监视 Kubernetes 对象和工作负载的常见方案。

Azure 门户

Grafana 仪表板

  • 使用 Azure 托管 Grafana 中用于 节点Pod预构建仪表板 来查看其运行状况和性能。
  • 可以使用多个 Kubernetes 仪表板,根据 Prometheus 中存储的数据可视化节点的性能和运行状况。

实时数据

面向平台工程师的警报

Azure Monitor 中的 Alerts 主动通知您监视数据中的感兴趣的数据和模式。 在客户注意到问题之前,它们可帮助你识别和解决系统中的问题。 若要使用当前的警报解决方案,请将工作区数据从Log Analytics工作区导出到另一个受支持的位置。

警报类型

下表描述了根据前面所述的服务收集的数据创建的不同类型的自定义警报规则。

警报类型 说明
Prometheus 警报 Prometheus 警报是用 Prometheus 查询语言(PromQL)编写的,适用于 Prometheus Azure Monitor托管服务中存储的 Prometheus 指标。 推荐警报已包含最常见的 Prometheus 警报。 根据需要创建其他警报规则
指标警报规则 指标警报规则使用与“指标资源管理器”相同的指标值。 实际上,您可以利用当前正在分析的数据,直接在指标浏览器中创建警报规则。 指标预警规则可用于使用 AKS 数据参考指标中的任何值对 AKS 性能发出警报。
日志搜索预警规则 使用日志搜索警报规则根据日志查询结果生成警报。 有关详细信息,请参阅如何从容器见解创建日志搜索警报,以及如何从容器见解查询日志

从建议的 Prometheus 社区警报规则开始,其中包括 Kubernetes 群集最常见的警报条件。 稍后在确定其他警报条件时添加更多警报规则。

开发人员

除了开发应用程序外,开发人员还负责维护群集上运行的应用程序。 他们负责应用程序特定的流量,包括应用程序性能和故障,并根据公司定义的 SLA 维护应用程序的可靠性。

开发人员的 Kubernetes 环境各层图示。

监视级别 5 - 应用程序

此层涵盖容器中运行的应用程序代码,包括其性能、故障和可用性。

实现 Azure Monitor OpenTelemetry Distro 以启用 Application Insights 体验,并配置 采样 来控制成本。

Application Insights 体验

应用程序日志

  • 容器监控将 stdout/stderr 日志发送到 Log Analytics 工作区。 有关不同日志的说明,请参阅资源日志;有关每个日志发送到的表的列表,请参阅 Kubernetes 服务

服务网格

  • 对于 AKS 群集,请部署基于 Istio 的服务网格加载项,以便为微服务体系结构提供可观测性。 Istio 是一个开放源代码服务网格,它以透明方式分层到现有的分布式应用程序上。 插件有助于在 AKS 上部署和管理 Istio。

另请参阅