亚马逊AWS官方博客

优化 Amazon EKS 集群的 Amazon Managed Service for Prometheus 成本

简介

Amazon Managed Service for Prometheus (AMP) 是一项托管的监控和报警服务,为大规模部署的容器环境提供数据和深入的洞察。客户可以从其高可用性和安全性功能中获益,而无需在运营方面有太多投入。尽管与自管理解决方案相比,AMP 降低了总体拥有成本,但您仍有机会通过优化配置来进一步优化 AMP 的成本。在本博客的实验中,我们通过分析和优化配置,成功减少了64% 的 AMP 费用。

在本篇博客中,我们将通过分析用于警报和仪表板的指标的摄取和消费情况,探讨优化 AMP 成本的策略。这将帮助客户了解他们的 AMP 使用情况,并识别降低成本的机会,而不会影响他们的监控能力。

理解 AMP 的成本

AMP 的成本构成

AMP 采用了灵活的按需付费模型,无需前期投资或长期承诺。用户只需为所使用的指标采集、摄取、存储和查询付费。另外,AMP 提供了免费套餐,允许用户每月免费使用一定量的 AMP 资源。AMP 的成本主要由以下几个部分构成:

  • 托管采集器(可选):按照其运行的小时数和收集的样本数量付费;
  • 指标摄入:按照摄入的指标样本数量收费;
  • 存储费用:按照存储的指标数据量收费;
  • 查询费用:按照执行查询时处理的样本数量收费。

根据实践经验,指标摄入通常占据 AMP 总成本的最大比重,因此,优化指标摄入策略成为控制 AMP 成本的关键。

EKS 集群的指标构成

在 Kubernetes 环境中,特别是在 Amazon EKS 集群中,指标的采集和管理是一个复杂而重要的话题。EKS 集群中的指标来源广泛,主要包括:控制平面组件、节点级别组件(如 kube-proxy, kubelet, node-exporter)、集群状态指标(通过 kube-state-metrics 收集)、核心插件(如 CoreDNS)、中间件(如 Elasticsearch)、应用层指标。

其中某些指标与集群规模直接相关,呈线性增长趋势:节点相关指标随工作节点数量增加;kube-state-metrics 指标随 Kubernetes 资源对象(如 Pod、Service等)数量增长。

优化策略

Prometheus 根据配置或通过 Service Discovery 自动地发现并采集指标,但在众多的指标中,并非所有被采集的指标都具有同等价值,关键指标通常会被识别并在以下场景中得到充分利用:Prometheus 告警规则配置、Grafana 仪表板可视化。因此,我们可以通过分析指标的使用情况,并采取相应策略来减少摄入的指标样本数量,从而达到成本优化的目的。

  • 选择性采集:配置 Prometheus 的服务发现和重标记(relabeling)规则,精确控制采集范围;
  • 优化采样频率:根据业务需求,确定合适的采样频率,避免过度采样;
  • 持续优化:定期审查指标使用情况,及时调整采集策略。

通过实施这些策略,可以显著减少摄入的指标样本数量,从而有效控制监控成本,同时确保关键指标的可用性和监控质量。

这种优化方法不仅适用于 AMP,也可推广到其他基于 Prometheus 的监控解决方案中,有助于在大规模 Kubernetes 环境中构建高效、经济的监控体系。

动手实验

下面,我们通过实验来检查指标的优化策略如何影响 AMP 的费用。我们将在已有的 EKS 集群中构建一套基于 AWS Distro for OpenTelemetry (ADOT) + AMP + Amazon Managed Grafana (AMG) 的可观测性系统,并在集群中部署样例应用,以模拟一个接近生产环境规模的 EKS 集群。

在此基础上,我们将分析  AMP 成本,识别成本优化机会,实施成本优化策略,并最终检验优化策略的效果。

在本篇博客结束时,您将清楚地了解如何使用亚马逊云科技的托管服务来实现、分析和优化 EKS 可观测性解决方案,帮助您在基础架构中实现性能和成本效益。

本实验环境的整体架构如下:

图 1:总体架构

步骤 1:配置您的可观测性系统并部署样例应用 (可选)

在此步骤中,我们将在已有的 EKS 集群中构建一套基于 ADOT + AMP + AMG 的可观测性系统,并在集群中部署样例应用,以模拟一个接近生产环境规模的 EKS 集群。

在我们的实验中,我们在 UTC 时间 10 月 18 日 13:00 开始摄取指标,然后在 UTC 时间 10 月 21 日 02:00 检查费用。这个时间跨度允许我们收集足够的数据来分析 AMP 成本并识别优化机会。

步骤 2:分析 AMP 的成本

在亚马逊云科技控制台上,转到 Billing and Cost Management > Bills > Charges by service,按服务名称 “Managed Service for Prometheus” 过滤,您可以看到当月 AMP 的成本。

在这种情况下,我的 AMP 的大部分成本来自于 metrics ingested

图 2:AMP 成本细分

在亚马逊云科技控制台上,转到 Billing and Cost Management > Cost Explorer,我们可以看到按天的成本细分。

图 3:AMP 的每日成本

步骤 3: 优化 AMP 的成本

分析和优化未使用的指标。

我们将借助工具来分析正在 Grafana 仪表板和 Prometheus 规则中被使用的指标,并将其与全量指标进行对比,从而发现被摄取到 AMP 但未被使用到的指标。我们可以过滤掉这些指标,从而降低 AMP 的费用。

在优化步骤完成后,我们将让该环境运行 1~2 天以观测成本变化。

在我们的实验中,我们在 10 月 21 日过滤了指标。从下面的屏幕截图可以看出,AMP 的成本从 39.91 美元下降了 64%。

Cost before optimization (20th Oct) Cost after optimization (22nd Oct) Cost reduction
Daily cost 39.96 14.3 64%

图 4:优化后 AMP 的每日成本

考虑其他降低成本的选项

在前面的步骤中,我们已经演示了通过过滤不需要的指标可以显著降低 AMP 的成本。您还可以考虑一些其他的选项:

总结

在本篇博客中,我们探讨了优化使用 Amazon Managed Service for Prometheus (AMP) 监控 Amazon EKS 集群成本的策略。演示了如何部署一套完备的可观测性解决方案、分析 AMP 使用情况以及实施节省成本的措施,例如过滤未使用的指标。

通过遵循这些步骤,我们在示例场景中实现了 64% 的显著成本降低。这种优化不仅降低了开支,而且通过关注最相关的指标来提高了监控设置的效率。

优化您的 AMP 成本是一个持续的过程。定期审查您的指标使用情况,根据您的应用程序的变化调整您的过滤规则,并在适当时考虑其他优化技术,如调整抓取间隔和降低基数。

通过利用 AMP 的托管服务功能并实施这些成本优化策略,您可以为您的 EKS 集群维护一个健壮的监控解决方案,同时控制您的可观测性成本。

您可以在此 GitHub 仓库中查看本实验的详细步骤,并可以参考此样例代码分析您的 AMP 成本以及实施优化策略。

采取行动

将您的 Prometheus 监控迁移到 Amazon Managed Service for Prometheus (AMP),以减少运营负担并优化成本。通过过渡到 AMP,您可以释放团队的时间和资源,让他们专注于更高价值的工作。一旦在 AMP 上,分析您的指标使用情况,识别优化机会,并利用 AMP 的成本管理功能来控制您的支出。

参考文档

Reduce metrics costs by filtering collected and forwarded metrics:https://grafana.com/docs/grafana-cloud/cost-management-and-billing/reduce-costs/metrics-costs/client-side-filtering/

How to find unused Prometheus metrics using mimirtool:https://medium.com/@dotdc/how-to-find-unused-prometheus-metrics-using-mimirtool-a44560173543

本篇作者

王祥彦

亚马逊云科技容器解决方案架构师。有丰富的中间件平台及应用容器化实践经验,熟悉 Kubernetes 及云原生开源社区解决方案。