

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 了解拆分成本分配数据
<a name="split-cost-allocation-data"></a>

您可以使用成本和使用情况报告 (AWS CUR) 来跟踪您的 Amazon ECS 和 Amazon EKS 集装箱成本。通过使用拆分成本分配数据，您可以根据容器工作负载使用共享计算和内存资源的方式将容器成本分配给各个业务部门和团队。拆分成本分配数据将新的容器级资源（即 ECS 任务和 Kubernetes Pod）的成本和使用情况数据引入 CUR。 AWS 以前， AWS CUR 仅支持 EC2 实例级别的成本。拆分成本分配数据查看每个容器的 EC2 实例资源使用情况以生成容器级成本，并根据实例的摊销成本以及实例上运行的容器使用的 CPU 和内存资源百分比生成成本。

对于与 Amazon EKS 一起使用的加速型计算实例，拆分成本分配数据包括专用处理器以及 CPU 和内存的资源分配。这涵盖了 NVIDIA 和 AMD GPUs、 AWS Trainium 和 AWS Inferentia 加速器。该功能仅适用于 Amazon EKS 环境，并为这些加速型计算资源提供容器组（pod）级别的资源预留数据。这样您就可以跟踪和分配使用这些专用处理器的工作负载（例如人工智能/机器学习应用程序和其他计算密集型任务）的成本。有关加速型计算实例的最新列表，请参阅[加速计算](https://aws.amazon.com/ec2/instance-types/#Accelerated_Computing)。

拆分成本分配数据为 CUR 中的每个容器化资源 ID（即 ECS 任务和 Kubernetes pod）引入了新的使用记录和新的成本指标列。 AWS 有关更多信息，请参阅 [Split line item details](https://docs.aws.amazon.com/cur/latest/userguide/split-line-item-columns.html)。

在 AWS CUR 中包含拆分成本分配数据时，会为每个 ECS 任务和每小时 Kubernetes Pod 添加两条新的使用记录，以反映 CPU 和内存成本。要估算每天以 AWS CUR 为单位的新订单项数，请使用以下公式：

对于 ECS：`(number of tasks * average task lifetime * 2) * 24`

对于 EKS：`(number of pods * average pod lifetime * 2) * 24`

例如，如果您在包含 10 个 EC2 实例的集群中每小时运行 1000 个容器组（pod），并且容器组（pod）的生命周期少于 1 小时，则：

`(1000 * 1 * 2) * 24 = 48,000 new usage records in AWS CUR`

对于 Amazon EKS 中的加速型计算实例，每小时为每个 Kubernetes 容器组（pod）添加三个新的使用记录，以便反映加速器、CPU 和内存成本。要估算每天以 AWS CUR 为单位的新订单项数，请使用以下公式：

对于使用加速计算的 EKS：`(number of pods * average pod lifetime * 3) * 24`

例如，如果您在包含 10 个 EC2 实例的集群中每小时运行 1000 个容器组（pod），并且每个容器组（pod）的生命周期少于一小时，则：`(1000 * 1 * 3) * 24 = 72,000 new usage records in AWS CUR`

**注意**  
对于 ECS：在 AWS 成本分配标签方面，您可以将 Amazon ECS 托管的标签或用户添加的标签用于成本和使用情况报告。这些标签适用于所有新的 ECS 拆分成本分配数据使用记录。有关更多信息，请参阅[标记资源以便于计费](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-using-tags.html#tag-resources-for-billing)。  
对于 EKS：拆分成本分配数据会为某些 Kubernetes 属性创建新的成本分配标签。这些标签包括 `aws:eks:cluster-name`、`aws:eks:deployment`、`aws:eks:namespace`、`aws:eks:node`、`aws:eks:workload-name` 和 `aws:eks:workload-type`。  
`aws:eks:cluster-name`、`aws:eks:namespace` 和 `aws:eks:node` 用集群、命名空间和节点的名称进行追溯填充。
仅当只有一个工作负载管理容器组（pod）时才会填充 `aws:eks:workload-type`，并且它是内置工作负载之一。工作负载类型包括 `ReplicaSet`、`StatefulSet`、`Job`、`DaemonSet` 或 `ReplicationController`，且 `aws:eks:workload-name` 包括工作负载的名称。有关更多信息，请参阅 *Kubernetes 文档*中的[工作负载](https://kubernetes.io/docs/concepts/workloads/)。
仅针对工作负载类型 `ReplicaSet` 填充 `aws:eks:deployment`。这是创建了 `ReplicaSet` 的部署。
这些标签适用于所有新的 EKS 拆分成本分配数据使用记录。默认情况下，为成本分配启用这些标签。如果您之前使用并禁用了 `aws:eks:cluster-name` 标签，则拆分成本分配数据会保留此设置且不会启用该标签。您可以从[成本分配标签](https://console.aws.amazon.com/billing/home#/tags)控制台页面来启用标签。

# 启用拆分成本分配数据
<a name="enabling-split-cost-allocation-data"></a>

**注意**  
Cost Explorer 中不提供拆分成本分配数据。可通过 Data Exports 在传统的成本和使用情况报告（CUR）以及成本和使用情况报告 2.0（CUR 2.0）中提供这些数据。

先决条件是通过成本管理首选项选择拆分成本分配数据。

**选择拆分成本分配数据**

1. 打开账单与成本管理控制台，网址为 [https://console.aws.amazon.com/costmanagement/](https://console.aws.amazon.com/costmanagement/)。

1. 在导航窗格中，选择**成本管理首选项**。

1. 在**常规**下的**拆分成本分配数据**部分，选择以下选项：
   + **Amazon Elastic Container Service（Amazon ECS）**，仅选择使用 Amazon ECS。
   + **Amazon Elastic Kubernetes Service（Amazon EKS）**，仅选择使用 Amazon EKS。对于 Amazon EKS，选择以下选项：
     + **资源请求**：此选项仅根据 Kubernetes 容器组（pod）CPU 和内存资源来分配您的 Amazon EC2。这将促使应用团队仅预置他们需要的资源。
     + **Amazon Managed Service for Prometheus**：此选项会根据 Kubernetes 容器组（pod）CPU 和内存资源请求以及实际利用率中较高者来分配您的 Amazon EC2 成本。这样可以确保每个应用团队为他们使用的资源付费。要了解有关设置 Amazon Managed Service for Prometheus 的更多信息，请参阅《Amazon Managed Service for Prometheus 用户指南》**中的[设置](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-setting-up.html)。

       先决条件：必须启用中的所有功能 AWS Organizations。有关更多信息，请参阅《Organizations 用户指南》**中的[启用组织中的所有特征](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html)。
     + **Amazon CloudWatch Container Insights**：这为使用共享 EC2 实例运行多个应用程序容器的集群提供了更精细的成本可见性，从而可以更好地分配 EKS 集群的共享成本。

**注意**  
只有普通账户和付款人账户才能访问 AWS Cost Management 偏好设置，并且可以选择使用拆分成本分配数据。在选择加入后，成员账户可以查看成本和使用情况报告中的数据。
如果您选择资源请求，则拆分成本分配数据仅使用配置了内存和 CPU 请求的容器组（pod）。未请求任何使用的容器组（pod）不会看到任何拆分成本数据。
如果您选择适用于 Prometheus 的亚马逊托管服务，则需要启用 Organizations 中的所有功能。 AWS 有关更多信息，请参阅[启用组织中的所有特征](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html)。此外，拆分成本分配数据创建了新的服务相关角色，通过该角色可访问由拆分成本分配数据使用或管理的 AWS 服务和资源。
对于加速型计算实例，仅支持资源请求选项。这些实例不支持适用于 Prometheus 的亚马逊托管服务和 CloudWatch Amazon Container Insights。使用加速型计算实例时，即使启用了其他测量选项，系统也会默认使用资源请求来计算加速器、CPU 和内存的成本。

在选择加入后，您可以选择在报告创建过程的第一步或稍后编辑报告详细信息，以将容器级资源的成本和使用情况数据包含在报告中。

**在报告中包含成本和使用情况数据**

1. 打开账单与成本管理控制台，网址为 [https://console.aws.amazon.com/costmanagement/](https://console.aws.amazon.com/costmanagement/)。

1. 在导航窗格中，在**旧版页面**下面，选择**成本和使用情况报告**。

1. 无论是创建新报告还是编辑现有报告，在**指定报告详细信息**页面中的**报告内容**下面，选择**拆分成本分配数据**。

**注意**  
您还可以使用 C AWS UR API 或 AWS Command Line Interface (CLI) 来管理您的分摊成本分配数据首选项。

通过使用拆分成本分配数据，可以查看整个整合账单系列（付款人账户和关联账户）中的所有 Amazon ECS 和 Amazon EKS 容器对象的成本。在激活后，拆分成本分配数据自动扫描任务和容器。它摄取容器工作负载的遥测使用情况数据，并准备当月的精细成本数据。

**注意**  
数据最多可能需要 24 小时才能在 AWS CUR 中可见。

有关管理账单和成本管理控制台页面访问的信息，请参阅[管理访问权限的概述](https://docs.aws.amazon.com/cost-management/latest/userguide/control-access-billing.html)。

有关 AWS Cost Management 首选项和控制 Cost Explorer 访问权限的信息，请参阅[控制对 Cost Explorer 的访问权限](https://docs.aws.amazon.com/cost-management/latest/userguide/ce-access.html)。

# 拆分成本分配数据示例
<a name="example-split-cost-allocation-data"></a>

以下示例的目的是，向您说明如何计算 Amazon ECS 集群中的各个 Amazon ECS 服务和任务以及 Amazon EKS 集群中的 Kubernetes 命名空间和容器组（pod）的成本，从而计算拆分成本分配数据。在整个示例中使用的费率仅用于说明目的。

**注意**  
该示例演示了 Amazon EKS 集群中运行的 Kubernetes 命名空间和容器组（pod）。然后，我们可以将相同的成本模型应用于在 Amazon ECS 集群中运行的 Amazon ECS 服务和任务。

您在一小时内具有以下使用量：
+ 单实例（m5.xlarge）共享集群，包含两个命名空间和四个容器组（pod），运行整整一小时的时间。
+ 实例配置为 4 个 vCPU 和 16 GB 内存。
+ 实例的摊销成本为 1 美元/小时。

拆分成本分配数据使用 CPU 和内存的相对单位权重（基于 9:1 比率）。这是根据 [AWS Fargate](https://aws.amazon.com/fargate/pricing/) 中的每个 vCPU 每小时和每 GB 每小时价格得出的。

## 步骤 1：计算 CPU 和内存的单位成本
<a name="example-step1"></a>

`Unit-cost-per-resource = Hourly-instance-cost/((Memory-weight * Memory-available) + (CPU-weight * CPU-available))`

= 1 美元/( (1 \$1 16GB) \$1 (9 \$1 4vCPU)) = 0.02 美元

`Cost-per-vCPU-hour = CPU-weight * Unit-cost-per-resource`

= 9 \$1 0.02 美元 = 0.17 美元

`Cost-per-GB-hour = Memory-weight * Unit-cost-per-resource`

= 1 \$1 0.02 美元 = 0.02 美元


****  

| Instance | Instance type | vCPU-available | Memory-available | Amortized-cost-per-hour | Cost-per-vCPU-hour | Cost-per-GB-hour | 
| --- | --- | --- | --- | --- | --- | --- | 
| Instance1 | m5.xlarge | 4 | 16 | 1 美元 | 0.17 美元 | 0.02 | 

## 步骤 2：计算分配的容量和实例未使用容量
<a name="example-step2"></a>
+ 分配的容量：从父 EC2 实例中分配给 Kubernetes 容器组（pod）的内存和 vCPU，定义为最大使用和预留容量。
**注意**  
如果内存或 vCPU 使用情况数据不可用，将改用预留数据。有关更多信息，请参阅 [Amazon ECS 使用情况报告](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/usage-reports.html)或 [Amazon EKS 成本监控](https://docs.aws.amazon.com/eks/latest/userguide/cost-monitoring.html)。
+ 实例未使用容量：未使用的 vCPU 和内存容量。

`Pod1-Allocated-vCPU = Max (1 vCPU, 0.1 vCPU)` = 1 vCPU

`Pod1-Allocated-memory = Max (4 GB, 3 GB)` = 4 GB

`Instance-Unused-vCPU = Max (CPU-available - SUM(Allocated-vCPU), 0)` = Max (4 – 4.9, 0) = 0

`Instance-Unused-memory = Max (Memory-available - SUM(Allocated-memory), 0)` = Max (16 – 14, 0) = 2 GB

在该示例中，实例过度订阅 CPU，这是由于 Pod2 使用的 vCPU 超过预留的 vCPU。


****  

| Pod name | Namespace | Reserved-vCPU | Used-vCPU | Allocated-vCPU | Reserved-memory | Used-memory | Allocated-memory | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
| Pod1 | Namespace1 | 1 | 0.1 | 1 | 4 | 3 | 4 | 
| Pod2 | Namespace2 | 1 | 1.9 | 1.9 | 4 | 6 | 6 | 
| Pod3 | Namespace1 | 1 | 0.5 | 1 | 2 | 2 | 2 | 
| Pod4 | Namespace2 | 1 | 0.5 | 1 | 2 | 2 | 2 | 
| Unused | Unused |  |  | 0 |  |  | 2 | 
|  |  |  |  | 4.9 |  |  | 16 | 

## 步骤 3：计算拆分使用率
<a name="example-step3"></a>
+ 拆分使用率：Kubernetes 容器组（pod）使用的 CPU 或内存占 EC2 实例上提供的总体 CPU 或内存的百分比。
+ 未使用率：Kubernetes 容器组（pod）使用的 CPU 或内存占 EC2 实例上使用的总体 CPU 或内存的百分比（即，不考虑实例上未使用的 CPU 或内存）。

`Pod1-vCPU-split-usage-ratio = Allocated-vCPU / Total-vCPU`

= 1 vCPU / 4.9vCPU = 0.204

`Pod1-Memory-split-usage-ratio = Allocated-GB / Total-GB`

= 4 GB/ 16GB = 0.250

`Pod1-vCPU-unused-ratio = Pod1-vCPU-split-usage-ratio / (Total-CPU-split-usage-ratio – Instance-unused-CPU)`（如果为 0 则设置 Instance-unused-CPU为 0）

= 0（因为 Instance-unused-CPU是 0）

`Pod1-Memory-unused-ratio = Pod1-Memory-split-usage-ratio / (Total-Memory-split-usage-ratio – Instance-unused-memory)`（如果为 0 则设置 Instance-unused-memory为 0）

= 0.250 / (1-0.125) = 0.286


****  

| Pod name | Namespace | vCPU-split-usage-ratio | vCPU-unused-ratio | Memory-split-usage-ratio | Memory-unused-ratio | 
| --- | --- | --- | --- | --- | --- | 
| Pod1 | Namespace1 | 0.204 | 0 | 0.250 | 0.286 | 
| Pod2 | Namespace2 | 0.388 | 0 | 0.375 | 0.429 | 
| Pod3 | Namespace1 | 0.204 | 0 | 0.125 | 0.143 | 
| Pod4 | Namespace2 | 0.204 | 0 | 0.125 | 0.143 | 
| Unused | Unused | 0 |  | 0.125 |  | 
|  |  | 1 |  | 1 |  | 

## 步骤 4：计算拆分成本和未使用成本
<a name="example-step4"></a>
+ 拆分成本：EC2 实例成本的按使用付费成本分配，基于 Kubernetes 容器组（pod）使用的分配 CPU 和内存。
+ 未使用实例成本：实例上未使用的 CPU 或内存资源的成本。

`Pod1-Split-cost = (Pod1-vCPU-split-usage-ratio * vCPU-available * Cost-per-vCPU-hour) + (Pod1-Memory-split-usage-ratio * Memory-available * Cost-per-GB-hour)`

= (0.204 \$1 4 vCPU \$1 0.17 美元) \$1 (0.25 \$1 16GB \$1 0.02 美元) = 0.22 美元

`Pod1-Unused-cost = (Pod1-vCPU-unused-ratio * Instance-vCPU-unused-ratio * vCPU-available * Cost-per-VCPU-hour) + (Pod1-Memory-unused-ratio * Instance-Memory-unused ratio * Memory-available * Cost-per-GB-hour)`

= (0 \$1 0 \$1 4 \$1 0.17 美元) \$1 (0.286 \$1 0.125 \$1 16 \$1 0.02 美元) = 0.01 美元

`Pod1-Total-split-cost = Pod1-Split-cost + Pod1-Unused-cost`

= 0.23 美元


****  

| Pod name | Namespace | Split-cost | Unused-cost | Total-split-cost | 
| --- | --- | --- | --- | --- | 
| Pod1 | Namespace1 | 0.22 美元 | 0.01 美元 | 0.23 美元 | 
| Pod2 | Namespace2 | 0.38 美元 | 0.02 | 0.40 美元 | 
| Pod3 | Namespace1 | 0.18 美元 | 0.01 美元 | 0.19 美元 | 
| Pod4 | Namespace2 | 0.18 美元 | 0.01 美元 | 0.19 美元 | 
| Unused | Unused | 0.04 美元 |  |  | 
|  |  | 1 美元 | 0.04 美元 | 1 美元 | 

服务成本是与每个命名空间关联的容器组（pod）的成本总和。

Namespace1 的总成本 = 0.23 美元 \$1 0.19 美元 = 0.42 美元

Namespace2 的总成本 = 0.40 美元 \$1 0.19 美元 = 0.59 美元

## AWS CUR 示例
<a name="example-savingsplan"></a>

如果您的节省计划涵盖 EC2 实例在账单周期内的全部使用量，将使用 savingsPlan/SavingsPlanEffectiveCost 计算摊销成本。

![\[Table showing EC2 instance usage details with 节省计划 and cost breakdown.\]](http://docs.aws.amazon.com/zh_cn/cur/latest/userguide/images/savings-plan-entire-usage.png)


如果您的 Savings Plans 涵盖账单周期内 EC2 实例的部分使用量，而其余的 EC2 实例使用按需费率计费，则使用 (for SavingsPlanCoveredUsage) \$1 savingsPlan/SavingsPlanEffectiveCostlineItem/UnblendedCost（按需使用）计算 EC2 实例摊销成本。

![\[Table showing EC2 instance usage details, costs, and savings plan information.\]](http://docs.aws.amazon.com/zh_cn/cur/latest/userguide/images/savings-plan-partial-usage.png)


# 加速型实例的拆分成本分配数据示例
<a name="example-accelerated-instances"></a>

以下示例的目的是，向您说明如何计算 Amazon EKS 集群中的 Kubernetes 命名空间和容器组（pod）的成本，从而计算拆分成本分配数据。在整个示例中使用的费率仅用于说明目的。

您在一小时内具有以下使用量：
+ 您拥有在两个命名空间中运行四个容器组（pod）的单个 EC2 实例，并且想要了解每个命名空间的成本。
+ EC2 实例是 p3.16xlarge，有 8 个 GPU、64 个 vCPU 和 488 GB RAM。
+ 实例的摊销成本为每小时 10 美元。

拆分成本分配数据根据 GPU:（CPU:内存）的相对比率为 9:1，对每个资源的成本进行标准化分摊。这意味着，一个单位的 GPU 成本高达 CPU 和内存单位成本的 9 倍。然后将 CPU 和内存的权重分配为 9:1。对于非加速型 EC2 实例，将采用当前的默认行为，即 CPU:内存权重默认为 9:1。

## 步骤 1：计算单位成本
<a name="w2aac32c21c13c31c11"></a>

根据 EC2 实例上的 CPU 和内存资源，并使用上述比率，拆分成本分配数据先计算每个 GPU、每 vCPU 小时和每 GB 小时的单位成本。

`GPU-Weight =9`

`GPU+Memory-Weight =1`

`CPU-Weight=1*.9=.9`

`Memory-Weight=1*0.1=0.1`

`Hourly-Instance-Cost=$10`

`GPU-Available=8`

`Memory-Available=488`

`CPU-Available=64`

`UnitCostPerResource = Hourly-Instance-Cost/(( GPU-Weight * GPU-Available) + (Memory-Weight * Memory-Available) + (CPU-Weight * CPU-Available)) = $10/((9*8gpu)+ (0.1 * 488GB) + (.9 * 64vcpu)) = $0.056`

`Cost-per-GPU-Hour = GPU-Weight * UnitCostPerResource = 9 * $0.056 = $0.504`

`Cost-per-vcpu-Hour = CPU-Weight * UnitCostPerResource = .9 * $0.056 = $0.05`

`Cost-per-GB-Hour = Memory-Weight * UnitCostPerResource = .1 * $0.056 = $0.00506`


**表 1：单位成本计算**  

| 实例 | 实例类型 | 可用 vCPU | 可用 GPU | \$1\$1 | 可用内存 | 每小时摊销成本 | 每 vCPU 小时成本 | 每 GPU 小时成本 | 每 GB 小时成本 | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| 实例 1 | p3.16xlarge | 64 | 8 |  | 488 | 10 美元 | 0.05 美元 | 0.50 美元 | 0.005 | 

## 步骤 2：计算已分配容量和未使用的容量
<a name="w2aac32c21c13c31c13"></a>

已分配容量  
从父 EC2 实例中分配给 Kubernetes 容器组（pod）的 GPU、vCPU 和内存，定义为最大（预留、已使用）容量

实例未使用的容量  
GPU、vCPU 和内存的未使用容量

`Pod1-Allocated-GPU = Max (1 GPU, 1 GPU) = 1 GPU`

`Pod1-Allocated-vcpu = Max (16 vcpu, 4 vcpu) = 16 vcpu`

`Pod1-Allocated-Memory = Max (100 GB, 60 GB) = 100 GB`

`Instance-Unused-GPU = Max (GPU-Available - SUM(Allocated-vcpu), 0)`

`= Max (8 – 8, 0) = 0`

`Instance-Unused-vcpu = Max (CPU-Available - SUM(Allocated-vcpu), 0)`

`= Max (16 – 18, 0) = 0`

`Instance-Unused-Memory = Max (Memory-Available - SUM(Allocated-Memory), 0)`

`= Max (488 – 440, 0) = 48 GB`

在该示例中，实例过度订阅 CPU，这是由于容器组（pod）2 实际使用的 GPU 和 vCPU 数量超过了预留数量。


**表 2：计算已分配容量和未使用的容量**  

| 容器组（pod）名称 | 命名空间 | 预留的 vCPU | 使用的 vCPU | 分配的 vCPU | 预留的 GPU | 使用的 GPU | 分配的 GPU | 预留的内存 | 使用的内存 | 分配的内存 | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| 容器组 1 | 命名空间 1 | 16 | 4 | 16 | 1 | 1 | 1 | 100 | 60 | 100 | 
| 容器组 2 | 命名空间 2 | 16 | 18 | 18 | 2 | 3 | 3 | 100 | 140 | 140 | 
| 容器组 3 | 命名空间 1 | 16 | 4 | 16 | 2 | 1 | 2 | 100 | 60 | 100 | 
| Pod 4 | 命名空间 2 | 16 | 4 | 16 | 2 | 2 | 2 | 100 | 40 | 100 | 
| 未使用 | 未使用 | 0 | 34 | 0 | 1 | 1 | 0 | 88 | 188 | 48 | 
| \$1\$1\$1 |  | 64 | 32 | 66 | 8 | 8 | 8 | 488 | 488 | 488 | 

## 步骤 3：计算拆分使用率和利用率
<a name="w2aac32c21c13c31c15"></a>

拆分使用率  
Kubernetes 容器组（pod）使用的 CPU 或内存占 EC2 实例上提供的总体 CPU 或内存的百分比。

未使用率  
Kubernetes 容器组（pod）使用的 CPU 或内存占 EC2 实例上使用的总体 CPU 或内存的百分比（即，不考虑实例上未使用的 CPU 或内存）。

Kubernetes 容器组（pod）使用的 CPU 或内存占 EC2 实例上提供的总体 CPU 或内存的百分比。

`Pod1-GPU-Utilization-Ratio = Allocated-GPU / Total-GPU`

`= 1 gpu / 8 gpu = 0.125`

`Pod1-vcpu-Utilization-Ratio = Allocated-vcpu / Total-vcpu`

`= 16 vcpu / 66 vcpu = 0.24`

`Pod1-Memory-Utilization-Ratio = Allocated-GB / Total-GB`

`= 100 GB/ 488GB = 0.205`

`Pod1-GPU-Split-Ratio = Pod1-GPU-Utilization-Ratio / (Total-GPU-Utilization-Ratio – Instance-Unused-GPU). Set to 0 if Instance-Unused-GPU = 0`

`= 0 since Instance-Unused-GPU is 0`

`Pod1-vcpu-Split-Ratio = Pod1-CPU-Utilization-Ratio / (Total-CPU-Utilization-Ratio – Instance-Unused-CPU). Set to 0 if Instance-Unused-CPU = 0`

`= 0 since Instance-Unused-CPU is 0`

`Pod1-Memory-Split-Ratio = Pod-Memory-Utilization-Ratio / (Total-Utilization-Ratio – Instance-Unused-Memory). Set to 0 if Instance-Unused-Memory = 0`

`= 0.204/ (1-0.102) = 0.227`


**表 3：计算利用率**  

| 容器组（pod）名称 | 命名空间 | vCPU 利用率 | vCPU 拆分率 | GPU 利用率 | GPU 拆分率 | 内存利用率 | 内存拆分率 | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
| 容器组 1 | 命名空间 1 | 0.242 | 0 | 0.125 | 0 | 0.205 | 0.227 | 
| 容器组 2 | 命名空间 2 | 0.277 | 0 | 0.375 | 0 | 0.287 | 0.318 | 
| 容器组 3 | 命名空间 1 | 0.242 | 0 | 0.25 | 0 | 0.205 | 0.227 | 
| Pod 4 | 命名空间 2 | 0.242 | 0 | 0.25 | 0 | 0.205 | 0.227 | 
| 未使用 | 未使用 | 0 |  |  |  | 0.098 |  | 
|  |  | 1 | 0 | 1 | 0 | 1 | 1 | 

## 步骤 4：计算拆分成本和未使用成本
<a name="w2aac32c21c13c31c17"></a>

拆分成本  
EC2 实例成本的按使用付费成本分配，基于 Kubernetes 容器组（pod）使用的分配 CPU 和内存。

未使用实例成本  
实例上未使用的 CPU 或内存资源的成本

`Pod1-Split-Cost = (Pod1-GPU-Utilization-Ratio * GPU-Available * Cost per GPU-Hour) + (Pod1-vcpu-Utilization-Ratio * vcpu-Available * Cost per vcpu-Hour) + (Pod1-Memory-Utilization-Ratio * Memory-Available * Cost per GB-Hour)`

`= (.125*8gpu*$0.504) + (0.242 * 64 vcpu * $0.05) + (0.204 * 488GB * $0.00506) = 0.504+ 0.774 + 0.503 = $1.85`

`Pod1-Unused-Cost = (GPU-Split-Ratio * Unused-Cost) + (vcpu-Split-Ratio * Unused-Cost) + (Memory-Split-Ratio * Unused-Cost)`

`= (0*0*8*$0.504) + (0 * $0.05) + (0.227 *.102*488GB*$.00506) = $0.06`

`Pod1-Total-Split-Cost = Pod1-Split-Cost + Pod1-Unused-Cost = $1.85 + $0.06 = $1.91`

[注意：未使用成本 = 未使用的利用率 \$1 总资源量 \$1 资源每小时成本]


**表 4 - 每小时针对集群内运行的所有容器组（pod）计算得出的拆分成本和未使用成本摘要**  

| 容器组（pod）名称 | 命名空间 | 拆分成本 | 未使用成本 | 总成本 | 
| --- | --- | --- | --- | --- | 
| 容器组 1 | 命名空间 1 | 1.85 美元 | 0.06 | 1.91 美元 | 
| 容器组 2 | 命名空间 2 | 3.18 美元 | 0.09 美元 | 3.26 美元 | 
| 容器组 3 | 命名空间 1 | 2.35 | 0.06 | 2.41 美元 | 
| Pod 4 | 命名空间 2 | 2.35 | 0.06 | 2.41 美元 | 
| Total |  |  |  | 10 美元 | 

# 在 EKS 中使用 Kubernetes 标签进行成本分配
<a name="split-cost-allocation-data-kubernetes-labels"></a>

拆分成本分配数据支持使用 Kubernetes 标签作为 Amazon EKS 集群的成本分配标签。虽然这些标签会自动作为用户定义的成本分配标签导入，但需要在管理账户级别激活。激活后，您可以通过这些标签，使用成本中心、应用程序、业务部门和环境等自定义属性在成本和使用情况报告（CUR）中归因容器组（pod）级别的成本。

此功能帮助组织在跨团队、项目或部门的共享 EKS 环境中准确跟踪和分配成本。使用 Kubernetes 标签，您可以根据自己的特定业务需求和组织设计来分配 Kubernetes 成本。

## 先决条件
<a name="prerequisites-kubernetes-labels"></a>

将 Kubernetes 标签与拆分成本分配数据结合使用的先决条件：
+ 您需要在 B AWS illing and Cost Management 控制台中启用拆分成本分配数据。必须在管理账户级别启用。有关详细信息，请参阅[启用拆分成本分配数据](https://docs.aws.amazon.com/cur/latest/userguide/enabling-split-cost-allocation-data.html)。
+ 您需要一个 EKS 集群，以便跟踪其拆分成本分配数据。这个集群可以是现有集群，也可以创建一个新集群。有关更多信息，请参阅《Amazon EKS 用户指南》**中的[创建 Amazon EKS 集群](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html)。
+ 您必须为 EKS 集群中的容器组（pod）分配标签。有关如何在 Kubernetes 中创建标签的更多信息，请参阅 *Kubernetes 文档*中的[标签和选择器](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/)。

## 在 EKS 中处理 Kubernetes 标签
<a name="work-with-kubernetes-labels"></a>

拆分成本分配数据支持每个容器组（pod）最多 50 个 Kubernetes 标签，这些标签在作为成本分配标签导入之前按字母顺序排序。自动丢弃前 50 个以外的所有标签。如果在达到 50 个标签的限制后需要添加新的成本分配标签，则必须先移除现有标签，并确保在按字母顺序排序时新标签在前 50 个标签之内。

**注意**  
某些 AWS 托管服务会自动向 EKS 容器添加标签。这些标签计入每个容器组（pod）的 50 个标签上限，并将显示在成本分配标签页面上。  
虽然 Kubernetes 标签没有大小限制，但成本分配标签有特定的字符限制：标签键为 128 个字符，标签值为 256 个字符。系统会丢弃超过这些字符限制的标签，并且这些标签不会显示为成本分配标签。出于成本分配目的，建议在创建标签时遵循这些字符限制。

导入的 Kubernetes 标签显示为成本分配标签，且必须在付款人账户级别激活。有关成本分配标签和激活的更多信息，请参阅[使用用户定义的成本分配标签](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/custom-tags.html)。以下成本分配标签限制适用：每个资源可以有 50 个用户定义的标签，每个付款人账户可以有 500 个用户定义的标签。系统生成的标签不计入这些限制。

**注意**  
在您创建用户定义的标签并将其应用到资源之后，标签键最多可能需要 24 小时才会显示在成本分配标签页面上。激活标签后，这些标签可能还需要 24 小时才会变为活跃。

## 管理 Kubernetes 标签和成本分配标签
<a name="manage-kubernetes-labels"></a>

您可以在 EKS 中添加、删除和编辑 Kubernetes 标签，也可以停用关联的成本分配标签。下面描述了每个操作的预期行为。

**添加新标签**

您可以为容器组（pod）添加新的 Kubernetes 标签。如果尚未达到 50 个标签的限制，新标签将被导入并作为成本分配标签提供，随后可被激活使用。但是，如果已达到 50 个标签的限制，则即使新标签按字母顺序排序时在前 50 个标签内，也不会被导入。您必须先停用现有成本分配标签才能导入新标签。

**编辑标签**

Kubernetes 不允许编辑标签键。要更改标签键，必须将其移除并添加新标签。但是，您可以编辑标签值，这些值将在下一个 CUR 中体现。

**删除标签**

您可以从 EKS 容器组（pod）中移除标签。请注意，移除标签不会自动停用其关联的成本分配标签。拆分成本分配数据将继续填入 CUR 中，直到您明确停用成本分配标签为止。

**停用成本分配标签**

您可以停用任何根据 Kubernetes 标签创建的成本分配标签。停用后，数据将不再填充到相应的列，并且该列将从下个月的 CUR 中删除。

## 管理 Kubernetes 标签以进行成本分配的最佳实践
<a name="best-practices-kubernetes-labels"></a>

Kubernetes 标签为共享成本分配建模带来了极大的灵活性。为了充分发挥此功能的潜力，建议遵循以下最佳实践来优化您的成本管理方法。

**了解标签限制**

50 的label-per-pod 限制基于字母排序。只有按字母顺序排列的前 50 个标签才会导入用于成本分配。为确保关键标签包含在内，请仔细规划标签命名，确保按字母顺序排序时重要标签出现在前 50 个标签内。

**遵循字符限制**

AWS 成本分配标签具有以下字符限制：
+ 标签键：128 个字符
+ 标签值：256 个字符

虽然 Kubernetes 允许使用更长的标签，但任何超过这些限制的标签都不会导入。设计标签时遵循这些限制，以确保实现成功的成本分配跟踪。

**已达容量上限时添加新标签**

当一个容器组（pod）达到 50 个标签的限制，并且您需要添加新的成本分配标签时，请按照以下步骤操作：

1. 审查现有标签并确定要停用的成本分配标签。

1. 停用所选标签。

1. 添加新的成本分配标签。

1. 验证新标签按字母顺序排序时是否在前 50 个标签内。

**注意**  
请记住，只有按字母顺序排序的前 50 个标签才用于成本分配。

# 将拆分成本分配数据与 Amazon Managed Service for Prometheus 配合使用
<a name="split-cost-allocation-data-resource-amp"></a>

拆分 Amazon EKS 的成本数据需要收集和存储集群中的指标，包括内存和 CPU 使用率。Amazon Managed Service for Prometheus 可用于此目的。

您选择拆分成本分配数据，且您的 Amazon Managed Service for Prometheus 工作区开始接收两个必需的指标（`container_cpu_usage_seconds_total` 和 `container_memory_working_set_bytes`）之后，拆分成本分配数据会自动识别和使用这些指标。

**注意**  
默认 Prometheus 抓取配置和 AWS 托管收集器提供的默认配置中包括这两个必需的指标（`container_cpu_usage_seconds_total` 和 `container_memory_working_set_bytes`）。但如果您自定义这些配置，请不要从 `container_cpu_usage_seconds_total` 和 `container_memory_working_set_bytes` 指标中重新标记、修改或移除以下标签：`name`、`namespace` 和 `pod`。如果您重新标记、修改或移除这些标签，则可能会影响指标的摄取。

您可以使用 Amazon Managed Service for Prometheus，在单个区域中从单个使用账户收集 EKS 指标。Amazon Managed Service for Prometheus 工作区必须在该账户和区域中。对于要监控成本的每个使用账户和区域，您都需要一个 Amazon Managed Service for Prometheus 实例。您可以在 Amazon Managed Service for Prometheus 工作区中收集多个集群的指标，前提是这些集群在同一个使用账户和区域中。

以下部分介绍如何将正确指标从 EKS 集群发送到 Amazon Managed Service for Prometheus 工作区。

## 先决条件
<a name="prerequisites-prometheus"></a>

将 Amazon Managed Service for Prometheus 与拆分成本分配数据结合使用的先决条件：
+ 您需要在 B AWS illing and Cost Management 控制台中启用拆分成本分配数据。有关详细信息，请参阅[启用拆分成本分配数据](https://docs.aws.amazon.com/cur/latest/userguide/enabling-split-cost-allocation-data.html)。选择使用拆分成本分配数据会在每个使用账户中创建一个服务相关角色，用于查询 Amazon Managed Service for Prometheus，获取该账户中的 Amazon EKS 集群指标。有关更多信息，请参阅[拆分成本分配数据的服务相关角色](https://docs.aws.amazon.com/cost-management/latest/userguide/split-cost-allocation-data-SLR.html)。
+ 您需要一个 EKS 集群，以便跟踪其拆分成本分配数据。这个集群可以是现有集群，也可以创建一个新集群。有关更多信息，请参阅《Amazon EKS 用户指南》**中的[创建 Amazon EKS 集群](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html)。
**注意**  
您将需要 `EKS cluster ARN`、`security group IDs` 和至少两个 `subnet IDs`（在不同的可用区中），以便在后续步骤中使用。  
（可选）将 EKS 集群的身份验证模式设置为 `API` 或 `API_AND_CONFIG_MAP`。
+ 您需要有一个与 EKS 集群在相同账户和区域中的 Amazon Managed Service for Prometheus 实例。如果您还没有这种实例，则必须创建一个。有关创建 Amazon Managed Service for Prometheus 实例的更多信息，请参阅《Amazon Managed Service for Prometheus 用户指南》**中的[创建工作区](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-onboard-create-workspace.html)。
**注意**  
您将需要 `Amazon Managed Service for Prometheus workspace ARN`，以便在后续步骤中使用。

## 将 EKS 指标转发到 Amazon Managed Service for Prometheus
<a name="forward-eks-metrics-prometheus"></a>

有了 EKS 集群和 Amazon Managed Service for Prometheus 实例后，就可以将指标从集群转发到实例。您可以通过两种方式发送指标。
+ [选项 1：使用 AWS 托管收集器。](https://docs.aws.amazon.com/cur/latest/userguide/split-cost-allocation-data-resource-amp.html#use-managed-collector)这是将指标从 EKS 集群发送到 Amazon Managed Service for Prometheus 的简单方法。但此方法有一个限制，它最多只能每 30 秒抓取一次指标。
+ [选项 2：创建自己的 Prometheus 代理。](https://docs.aws.amazon.com/cur/latest/userguide/split-cost-allocation-data-resource-amp.html#create-prometheus-agent)在这种情况下，您可以更好地控制抓取配置，但必须在创建代理后对其进行管理。

### 选项 1：使用 AWS 托管收集器
<a name="use-managed-collector"></a>

使用 AWS 托管收集器（*抓取*器）是将指标从 EKS 集群发送到适用于 Prometheus 实例的亚马逊托管服务的最简单方法。以下过程将引导您完成 AWS 托管收集器的创建。有关更多详细信息，请参阅《Amazon Managed Service for Prometheus 用户指南》**中的 [AWS 托管收集器](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-collector.html)。

**注意**  
AWS 托管收集器的最小抓取间隔为 30 秒。如果您的容器组（pod）寿命很短，建议将抓取间隔设置为 15 秒。要使用 15 秒的抓取间隔，请使用选项 2 来[创建自己的 Prometheus 代理](https://docs.aws.amazon.com/cur/latest/userguide/split-cost-allocation-data-resource-amp.html#create-prometheus-agent)。

创建 AWS 托管收集器有三个步骤：

1. 创建抓取程序配置。

1. 创建抓取程序。

1. 将 EKS 集群配置为允许抓取程序访问指标。

*步骤 1：创建抓取程序配置*

要创建抓取程序，必须有抓取程序配置。您可以使用默认配置，也可以创建自己的配置。以下是获取抓取程序配置的三种方法：
+ 使用 AWS CLI 获取默认配置，方法是：

  ```
  aws amp get-default-scraper-configuration
  ```
+ 创建自己的配置。有关详细信息，请参阅《Amazon Managed Service for Prometheus 用户指南》**中的[抓取程序配置](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-collector-how-to.html#AMP-collector-configuration)说明。
+ 复制《Amazon Managed Service for Prometheus 用户指南》**中的[抓取程序配置](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-collector-how-to.html#AMP-collector-configuration)说明中提供的示例配置。

例如，您可以编辑抓取程序配置、修改抓取间隔或筛选已抓取的指标。

要筛选已抓取的指标，以便仅包括拆分成本分配数据所需的两个指标，请使用以下抓取程序配置：

```
global:
   scrape_interval: 30s
   #external_labels:
     #clusterArn: <REPLACE_ME>
scrape_configs:
  - job_name: kubernetes-nodes-cadvisor
    scrape_interval: 30s
    scrape_timeout: 10s
    scheme: https
    authorization:
      type: Bearer
      credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    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/](https://www.base64encode.org/) 等网站来对文件进行编码。

*步骤 2：创建抓取程序*

您已经有了配置文件，现在您需要创建抓取程序。根据先决条件部分中列出的变量，使用以下 AWS CLI 命令创建抓取器。您必须将 EKS 集群中的信息用于*<EKS-CLUSTER-ARN>**<SG-SECURITY-GROUP-ID>*、和*<SUBNET-ID>*字段，替换*<BASE64-CONFIGURATION-BLOB>*为在上一步中创建的抓取器配置，并替换*<AMP\$1WORKSPACE\$1ARN>*为适用于 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`，则抓取程序会自动具有正确的集群内访问策略，并且抓取程序将可以访问您的集群。无需进一步配置，指标应该会传输到 Amazon Managed Service for Prometheus。

如果您的 EKS 集群的身份验证模式未设置为`API`或`API_AND_CONFIG_MAP`，则需要手动配置集群，以允许抓取器通过 ClusterRole和访问您的指标 ClusterRoleBinding。要了解如何启用这些权限，请参阅《Amazon Managed Service for Prometheus 用户指南》**中的[手动配置 EKS 集群以进行抓取程序访问](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-collector-how-to.html#AMP-collector-eks-setup)。

抓取程序激活后，确认两个指标（`container_cpu_usage_seconds_total` 和 `container_memory_working_set_bytes`）都已推送到 Amazon Managed Service for Prometheus 工作区。

```
awscurl --service="aps" --region="<REGION>" "https://aps-workspaces.<REGION>.amazonaws.com/workspaces/<WorkSpace_ID>/api/v1/label/__name__/values"
```

输出：

```
{
"status": "success",
"data": [
"container_cpu_usage_seconds_total",
"container_memory_working_set_bytes",
"scrape_duration_seconds",
"scrape_samples_post_metric_relabeling",
"scrape_samples_scraped",
"scrape_series_added",
"up"
]
}
```

### 选项 2：创建自己的 Prometheus 代理
<a name="create-prometheus-agent"></a>

如果您无法使用 AWS 托管收集器，或者已经拥有自己的 Prometheus 服务器，则可以使用自己的 Prometheus 实例作为代理，从 EKS 集群中抓取指标并将其发送到适用于 Prometheus 的亚马逊托管服务。

有关如何使用自己的 Prometheus 实例作为代理的详细说明，请参阅《Amazon Managed Service for Prometheus 用户指南》**中的[使用 Prometheus 实例作为收集器](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-ingest-with-prometheus.html)。

以下是一个示例 Prometheus 抓取配置，其中包括 Prometheus 服务器抓取间隔和拆分成本分配数据所需的容器指标。如果您的容器组（pod）寿命很短，建议将默认 Prometheus 服务器抓取间隔从 30 秒降低到 15 秒。请注意，这会导致 Prometheus 服务器内存使用率变高。

```
global:
   scrape_interval: 30s
   #external_labels:
     #clusterArn: <REPLACE_ME>
scrape_configs:
  - job_name: kubernetes-nodes-cadvisor
    scrape_interval: 30s
    scrape_timeout: 10s
    scheme: https
    authorization:
      type: Bearer
      credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    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
```

如果您遵照《Amazon Managed Service for Prometheus 用户指南》**中的[使用 Helm 设置从新 Prometheus 服务器进行摄取](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-onboard-ingest-metrics-new-Prometheus.html)，则可以更新抓取配置。

**更新抓取配置**

1. 编辑指南中的 `my_prometheus_values_yaml`，并在 `server` 块中包括示例抓取配置。

1. 使用《Amazon Managed Service for 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\$1interval 的更多信息，请参阅 [Prometheus 抓取配置](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config)。

或者，您可以使用具有 Prometheus Rece AWS iver、Prometheus 远程写入导出器和 AWS Sigv4 身份验证扩展插件的 Distro fo OpenTelemetry r 收集器来实现对适用于 Prometheus 的亚马逊托管服务的远程写入权限。

**注意**  
 AWS 与托管收集器不同，在设置 Prometheus 代理后，您有责任使代理保持最新状态并运行以收集指标。

## 估算 Amazon Managed Service for Prometheus 成本
<a name="estimate-prometheus-costs"></a>

您可以使用 AWS 定价计算器估算使用适用于 Prometheus 的亚马逊托管服务获取分摊成本分配数据的成本。

**为您的估算配置 Amazon Managed Service for Prometheus**

1. 打开 AWS 定价计算器，[网址为 https://calculator.aws/\$1/](https://calculator.aws/#/)。

1. 选择 **创建估算值**。

1. 在**添加服务**页面的搜索字段中输入**Amazon Managed Service for Prometheus**，然后选择**配置**。

1. 在**描述**字段中，输入您的估算值描述。

1. 选择**区域**。

1. 选择**使用您的基础设施详细信息计算成本**。此选项让您可以根据当前或提议的基础设施设置来估算摄取、存储和查询示例成本。

1. 在 **EC2 实例数量**中，输入整个整合账单系列（包括所有账户和区域）在所有集群中的 EC2 实例总数。如果您使用 AWS Fargate，请使用 Fargate 任务的数量作为您的 EC2 实例计数的代理。

1. 拆分成本分配数据需要两个指标：`container_cpu_usage_seconds_total` 和 `container_memory_working_set_bytes`。对于**每个 EC2 实例的 Prometheus 指标**，请输入 2。

1. 拆分成本分配数据建议的抓取间隔为 15 秒。在**指标收集间隔（以秒为单位）**中，输入 15。如果您使用了不同的间隔（例如，30 秒），请将此选项更改为您设置的间隔。

1. 拆分成本分配数据不会对其他参数施加任何特定要求，因此请根据您的业务需求为其余输入参数输入适当的值。

1. 选择**保存和添加服务**。

# 在 Amazon CloudWatch 容器洞察中使用拆分成本分配数据
<a name="split-cost-allocation-data-cloudwatch"></a>

拆分 Amazon EKS 的成本数据需要收集和存储集群中的指标，包括内存和 CPU 使用率。Amazon CloudWatch 容器见解可用于此目的。

选择拆分成本分配数据并在您的 EKS 集群上设置带有 EKS 可观察性插件的 CloudWatch 代理后，拆分成本分配数据就会开始在`ContainerInsights`命名空间中接收两个必需的指标`(pod_cpu_usage_total`和`pod_memory_working_set`) 并自动使用它们。*要查看 EKS 的完整容器指标，请参阅[亚马逊用户指南中的亚马逊 EKS 和 Kubernetes 容器洞察指标](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-metrics-EKS.html)。 CloudWatch *

以下章节将介绍如何将正确指标从 EKS 集群发送到拆分成本分配数据。

## 先决条件
<a name="prerequisites-cloudwatch"></a>

将 Amazon Contain CloudWatch er Insights 与分摊成本分配数据结合使用的先决条件：
+ 您需要在 B AWS illing and Cost Management 控制台中启用拆分成本分配数据。有关详细信息，请参阅[启用拆分成本分配数据](https://docs.aws.amazon.com/cur/latest/userguide/enabling-split-cost-allocation-data.html)。
+ 您需要一个 EKS 集群，以便跟踪其拆分成本分配数据。这个集群可以是现有集群，也可以创建一个新集群。有关更多信息，请参阅《Amazon EKS 用户指南》**中的[创建 Amazon EKS 集群](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html)。

## 设置 Amazon CloudWatch 容器洞察以转发 EKS 指标
<a name="forward-eks-metrics-cloudwatch"></a>

您需要设置和配置 CloudWatch 代理才能转发 EKS 指标。你可以使用 [Amazon O CloudWatch bservability EKS 附加组件或 Amazon O CloudWatch bservability Helm 图表](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Observability-EKS-addon.html)在 EKS 集群上安装 CloudWatch 代理和 Fluent-bit 代理。有关如何安装和设置 CloudWatch 代理的更多信息，请参阅亚马逊* CloudWatch 用户指南*中的[安装 Amazon O CloudWatch bservability EKS 附加组件](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-setup-EKS-addon.html)。

以下是 CloudWatch 代理和 EKS 插件所需的最低版本：
+ CloudWatch 代理版本：v1.300045.0
+ CloudWatch Observability EKS 附加版本：v2.0.1-eksbuild.1

## 估算您的亚马逊成本 CloudWatch
<a name="estimate-cloudwatch-costs"></a>

启用该功能以将 Amazon Contain CloudWatch er Insights 与分摊成本分配数据结合使用，这会为 Amazon Contain CloudWatch er `pod_cpu_usage_total` Insights 添加两个新指标 `pod_memory_working_set` *有关这些指标的详细信息，请参阅[亚马逊用户指南中的亚马逊 EKS 和 Kubernetes 容器洞察指标](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-metrics-EKS.html)。 CloudWatch *

**了解与该功能相关的成本**

1. 在 pricing CloudWatch /处打开 Amazon [https://aws.amazon.com/cloudwatch/定价。](https://aws.amazon.com/cloudwatch/pricing/)

1. 导航至**付费套餐**部分。

1. 选择 **Container Insights** 选项卡。

1. 要详细计算成本，请导航至**定价示例**部分，并参阅**示例 13 - 适用于 Amazon EKS 和 Kubernetes 的 Container Insights**。