本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在适用于 Prometheus 的亚马逊托管服务中使用拆分成本分配数据
分割 Amazon EKS 的成本数据需要您收集和存储集群中的指标,包括内存和 CPU 使用率。适用于 Prometheus 的亚马逊托管服务可用于此目的。
一旦您选择使用拆分成本分配数据,并且您的 Amazon Prometheus 托管服务工作空间开始接收两个必需的指标container_cpu_usage_seconds_total
(container_memory_working_set_bytes
和),则拆分成本分配数据将识别这些指标并自动使用它们。
注意
两个必需的指标(container_cpu_usage_seconds_total
和container_memory_working_set_bytes
)存在于默认的 Prometheus 抓取配置和托管收集器提供的默认配置中。 AWS 但是,如果您自定义这些配置,请不要在container_cpu_usage_seconds_total
和container_memory_working_set_bytes
指标中重新标记、修改或移除以下标签:name
namespace
、和pod
。如果您重新标记、修改或移除这些标签,则可能会影响指标的摄取。
您可以使用适用于 Prometheus 的亚马逊 Prometheus 托管服务从单个区域的单个使用账户收集 EKS 指标。适用于 Prometheus 的亚马逊托管服务工作区必须位于该账户和区域中。对于要监控费用的每个使用账户和区域,您需要一个 Amazon Prometheus 托管服务实例。您可以在 Amazon 托管服务 Prometheus 工作空间中收集多个集群的指标,前提是这些集群位于相同的使用账户和区域中。
以下各节介绍如何将正确指标从您的 EKS 集群发送到适用于 Prometheus 的亚马逊托管服务工作区。
先决条件
作为使用带分摊成本分配数据的亚马逊 Prometheus 托管服务的先决条件:
-
您需要在 B AWS illing and Cost Management 控制台中启用拆分成本分配数据。有关详细信息,请参阅启用拆分成本分配数据。选择使用拆分成本分配数据会在每个使用账户中创建一个服务相关角色,用于查询 Prometheus 的亚马逊托管服务,了解该账户中的 Amazon EKS 集群指标。有关更多信息,请参阅用于分割成本分配数据的服务相关角色。
-
您需要一个要跟踪其分割成本分配数据的 EKS 集群。这可以是现有集群,也可以创建新集群。有关更多信息,请参阅 Amazon EKS 用户指南中的创建 Amazon EKS 集群。
注意
您将需要
EKS cluster ARN
security group IDs
、和至少两个subnet IDs
(在不同的可用区域中),以便在后续步骤中使用。(可选)将 EKS 集群的身份验证模式设置为
API
或API_AND_CONFIG_MAP
。 -
您需要在与 EKS 集群相同的账户和区域中使用适用于 Prometheus 的亚马逊托管服务。如果您还没有,则可以创建一个。有关为 Prometheus 创建亚马逊托管服务实例的更多信息,请参阅《适用于 Prometheus 的亚马逊托管服务用户指南》中的创建工作空间。
注意
您将需要在
Amazon Managed Service for Prometheus workspace ARN
以后的步骤中使用。
将 EKS 指标转发到适用于 Prometheus 的亚马逊托管服务
一旦您拥有 EKS 集群和适用于 Prometheus 的 Amazon 托管服务实例,就可以将指标从集群转发到该实例。您可以通过两种方式发送指标。
-
选项 1:使用 AWS 托管收集器。这是将指标从 EKS 集群发送到适用于 Prometheus 的亚马逊托管服务的最简单方法。但是,它的限制是最多只能每 30 秒抓取一次指标。
-
选项 2:创建你自己的 Prometheus 代理。在这种情况下,您可以更好地控制抓取配置,但必须在创建代理后对其进行管理。
选项 1:使用 AWS 托管收集器
使用 AWS 托管收集器(抓取器)是将指标从 EKS 集群发送到适用于 Prometheus 实例的亚马逊托管服务的最简单方法。以下过程将引导您完成 AWS 托管收集器的创建。有关更多详细信息,请参阅AWS 适用于 Prometheus 的亚马逊托管服务用户指南中的托管收集器。
注意
AWS 托管收集器的最小抓取间隔为 30 秒。如果你的吊舱寿命很短,建议将刮刀间隔设置为 15 秒。要使用 15 秒的抓取间隔,请使用选项 2 创建自己的 Prometheus 代理。
创建 AWS 托管收集器有三个步骤:
-
创建抓取器配置。
-
创建刮刀。
-
配置您的 EKS 集群以允许抓取工具访问指标。
第 1 步:创建抓取器配置
要创建刮板,必须具有刮板配置。您可以使用默认配置,也可以创建自己的配置。以下是获取刮板配置的三种方法:
例如,您可以编辑抓取器配置,修改抓取间隔或筛选已抓取的指标。
要筛选已抓取的指标以仅包括拆分成本分配数据所需的两个指标,请使用以下抓取器配置:
scrape_configs: - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token job_name: kubernetes-nodes-cadvisor scrape_interval: 30s scrape_timeout: 10s kubernetes_sd_configs: - role: node relabel_configs: - regex: (.+) replacement: /api/v1/nodes/$1/proxy/metrics/cadvisor source_labels: - __meta_kubernetes_node_name target_label: __metrics_path__ - replacement: kubernetes.default.svc:443 target_label: __address__ metric_relabel_configs: - source_labels: [__name__] regex: 'container_cpu_usage_seconds_total|container_memory_working_set_bytes' action: keep
获得抓取器配置后,必须对其进行base64编码,以便在步骤 2中使用。该配置是一个文本 YAML 文件。要对文件进行编码,请使用诸如 https://www.base64encode.org/
第 2 步:创建刮刀
现在你已经有了配置文件,你需要创建你的抓取器。根据先决条件部分中列出的变量,使用以下 AWS CLI 命令创建抓取器。您必须将 EKS 集群中的信息用于
<EKS-CLUSTER-ARN><SG-SECURITY-GROUP-ID>、和<SUBNET-ID>字段,替换
为在上<BASE64-CONFIGURATION-BLOB>一步中创建的抓取器配置,并替换
<AMP_WORKSPACE_ARN>为适用于 Prometheus 的亚马逊托管服务工作空间 ARN。
aws amp create-scraper \ --source eksConfiguration="{clusterArn=
<EKS-CLUSTER-ARN>
,securityGroupIds=[<SG-SECURITY-GROUP-ID>
],subnetIds=[<SUBNET-ID>
]}" \ --scrape-configuration configurationBlob=<BASE64-CONFIGURATION-BLOB>
\ --destination ampConfiguration={workspaceArn="<AMP_WORKSPACE_ARN>
"}
记下返回的scraperId
,以便在步骤 3 中使用。
第 3 步:配置您的 EKS 集群以允许抓取工具访问指标
如果您的 EKS 集群的身份验证模式设置为API
或之一API_AND_CONFIG_MAP
,则您的抓取器将自动具有正确的集群内访问策略,并且抓取器将可以访问您的集群。无需进一步配置,指标应流向适用于 Prometheus 的亚马逊托管服务。
如果您的 EKS 集群的身份验证模式未设置为API
或API_AND_CONFIG_MAP
,则需要手动配置集群,以允许抓取器通过 ClusterRole和访问您的指标 ClusterRoleBinding。要了解如何启用这些权限,请参阅《适用于 Prometheus 的亚马逊托管服务用户指南》中的手动配置 EKS 集群以进行抓取程序访问。
选项 2:创建自己的 Prometheus 代理
如果您无法使用 AWS 托管收集器,或者已经拥有自己的 Prometheus 服务器,则可以使用自己的 Prometheus 实例作为代理,从 EKS 集群中抓取指标并将其发送到适用于 Prometheus 的亚马逊托管服务。
有关如何使用您自己的 Prometheus 实例作为代理的详细说明,请参阅适用于 Prometheus 的亚马逊托管服务用户指南中的 “使用 Prometheus 实例作为收集器”。
以下是 Prometheus 抓取配置示例,其中包括 Prometheus 服务器抓取间隔和拆分成本分配数据所需的容器指标。如果你的吊舱寿命很短,建议将默认 Prometheus 服务器抓取间隔从 30 秒降低到 15 秒。请注意,这可能会导致 Prometheus 服务器内存使用率过高。
scrape_configs: - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token job_name: kubernetes-nodes-cadvisor scrape_interval: 30s scrape_timeout: 10s kubernetes_sd_configs: - role: node relabel_configs: - regex: (.+) replacement: /api/v1/nodes/$1/proxy/metrics/cadvisor source_labels: - __meta_kubernetes_node_name target_label: __metrics_path__ - replacement: kubernetes.default.svc:443 target_label: __address__ metric_relabel_configs: - source_labels: [__name__] regex: 'container_cpu_usage_seconds_total|container_memory_working_set_bytes' action: keep
如果您在《适用于 Prometheus 的亚马逊托管服务用户指南》中使用 Helm 从新 Prometheus 服务器设置摄取,则可以更新抓取配置。
更新您的抓取配置
-
my_prometheus_values_yaml
从指南中进行编辑,并在server
区块中包含示例抓取配置。 -
使用适用于 Prometheus 的亚马逊托管服务 Prometheus 用户指南中的
prometheus-chart-name
和prometheus-namespace
运行以下命令。
helm upgrade prometheus-chart-name prometheus-community/prometheus -n prometheus-namespace -f my_prometheus_values_yaml
要了解有关scrape_interval
或如何使用非全局 scrape_interval 的更多信息,请参阅 Prometheus 抓取配置。
或者,您可以使用具有 Prometheus Rece AWS iver、Prometheus 远程写入导出器和 AWS Sigv4 身份验证扩展插件的 Distro fo OpenTelemetry r 收集器来实现对适用于 Prometheus 的亚马逊托管服务的远程写入权限。
注意
AWS 与托管收集器不同,在设置 Prometheus 代理后,您有责任使代理保持最新状态并运行以收集指标。
估算您的亚马逊托管服务 Prometheus 成本
您可以使用 AWS 定价计算器估算使用适用于 Prometheus 的亚马逊托管服务获取分摊成本分配数据的成本。
根据您的估算配置适用于 Prometheus 的亚马逊托管服务
-
打开 AWS 定价计算器,网址为 https://calculator.aws/#/
。 -
选择 创建估算值。
-
在添加服务页面上,在搜索字段中输入适用于 Prometheus 的亚马逊托管服务,然后选择配置。
-
在描述字段中,输入您的估算值描述。
-
选择区域。
-
选择使用您的基础架构详细信息计算成本。此选项允许您根据当前或建议的基础架构设置估算摄取、存储和查询样本成本。
-
在 EC2 实例数量中,输入整个整合账单系列(包括所有账户和区域)在所有集群中的 EC2 实例总数。如果您使用 AWS Fargate,请使用 Fargate 任务的数量作为您的 EC2 实例计数的代理。
-
拆分成本分配数据需要两个指标:
container_cpu_usage_seconds_total
和container_memory_working_set_bytes
。对于每个 EC2 实例的 Prometheus 指标,请输入 2。 -
拆分成本分配数据表明抓取间隔为 15 秒。在指标收集间隔(以秒为单位)中,输入 15。如果您使用了不同的间隔(例如,30 秒),请将其更改为您设置的间隔。
-
拆分成本分配数据不会对其他参数施加任何特定要求,因此请根据您的业务需求为其余输入参数输入适当的值。
-
选择保存和添加服务。