在 Azure Monitor 中大规模抓取 Prometheus 指标

本文提供大规模收集适用于 Prometheus 的 Azure Monitor 托管服务的指标时预期的性能指导。

CPU 和内存

CPU 和内存使用量与每个样本的字节数和抓取的样本数相关。 这些基准基于抓取的默认目标、抓取的自定义指标量,以及节点、pod 和容器的数量。 这些数字仅供参考,因为根据时序数量和每个指标的字节数,使用量仍可能存在很大的差异。

每个 pod 的容量上限目前大约为每分钟 300 万到 350 万个样本,具体取决于每个样本的字节数。 将来添加分片时,将解决此限制。

代理由一个部署组成,该部署带有一个用于抓取指标的副本和 DaemonSet。 DaemonSet 可抓取任何节点级目标,例如 cAdvisor、kubelet 和节点导出程序。 还可以使用静态配置将它配置为抓取节点级别的任何自定义目标。 副本集抓取其他所有内容,例如 kube-state-metrics 或利用服务发现的自定义抓取作业。

小型和大型副本群集的比较

抓取目标 发送的样本数/分钟 节点计数 Pod 计数 Prometheus-Collector CPU 使用量(核心数) Prometheus-Collector 内存使用量(字节)
默认目标 11,344 3 40 12.9 mc 148 Mi
默认目标 260,000 340 13000 1.10 c 1.70 GB
默认目标
+ 自定义目标
356 万 340 13000 5.13 c 9.52 GB

小型和大型 DaemonSet 群集的比较

抓取目标 发送的样本总数/分钟 发送的样本数/分钟/Pod 节点计数 Pod 计数 Prometheus-Collector CPU 使用量总计(核心数) Prometheus-Collector 内存使用量总计(字节) Prometheus-Collector CPU 使用量/Pod(核心数) Prometheus-Collector 内存使用量/Pod(字节)
默认目标 9,858 3,327 3 40 41.9 mc 581 Mi 14.7 mc 189 Mi
默认目标 230 万 14,400 340 13000 805 mc 305.34 GB 2.36 mc 898 Mi

对于其他自定义指标,单个 pod 的行为与副本 pod 相同,具体取决于自定义指标的数量。

在具有更多资源的节点池上计划 ama-metrics 副本 pod

如果每个 pod 存在大量指标,则需要配置足够大的节点才能处理所需的 CPU 和内存使用量。 如果不在具有足够资源的节点或节点池上计划 ama-metrics 副本 pod,该 pod 可能会持续收到 OOMKilled 并进入 CrashLoopBackoff 状态。 为了克服此问题,如果群集上某个节点或节点池具有较多的资源(在系统节点池中)并且你想要在该节点上计划副本,可以在该节点上添加标签 azuremonitor/metrics.replica.preferred=true,这样就会在此节点上计划副本 pod。 如果需要,你还可以创建具有较大节点的其他系统池,并可以将相同的标签添加到其节点或节点池。 此外,最好将标签添加到节点池,而不是节点,这样,如果此标签适用于池中的所有节点,则同一池中的较新节点也可用于计划。

kubectl label nodes <node-name> azuremonitor/metrics.replica.preferred="true"

后续步骤