Amazon Elastic Container Service
开发人员指南 (API 版本 2014-11-13)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

Amazon ECS CloudWatch 指标

您可以使用 Amazon CloudWatch 监控您的 Amazon ECS 资源,此工具可从 Amazon ECS 收集原始数据,并将数据处理为易读的近乎实时的指标。这些统计数据会保存两周,从而使您能够访问历史信息,并能够更好地了解集群或服务的执行情况。Amazon ECS 指标数据以 1 分钟为间隔自动发送到 CloudWatch。有关 CloudWatch 的更多信息,请参阅 Amazon CloudWatch 用户指南

启用 CloudWatch 指标

自动为 CloudWatch CPU 和内存利用率指标启用使用 Fargate 启动类型的任意 Amazon ECS 服务,因此您无需执行任何手动步骤。

对于使用 EC2 启动类型的任何 Amazon ECS 任务或服务,您的 Amazon ECS 容器实例都需要 1.4.0 版或更高版本的容器代理才能启用 CloudWatch 指标。但是,我们建议使用最新的容器代理版本。有关检查您的代理版本并更新到最新版本的信息,请参阅更新 Amazon ECS 容器代理

如果您要手动启动代理(例如,如果您未对容器实例使用 Amazon ECS-optimized AMI),请参阅手动更新 Amazon ECS 容器代理(适用于非Amazon ECS-Optimized AMI)

您的 Amazon ECS 容器实例还需要对您用来启动容器实例的 IAM 角色的 ecs:StartTelemetrySession 权限。如果您在 CloudWatch 指标可用于 Amazon ECS 之前已创建您的 Amazon ECS 容器实例,则可能需要添加此权限。有关检查您的 Amazon ECS 容器实例角色并为容器实例附加托管 IAM 策略的信息,请参阅在 IAM 控制台中检查 ecsInstanceRole

注意

您可以通过在 Amazon ECS 容器代理配置中设置 ECS_DISABLE_METRICS=true 来禁用 CloudWatch 指标收集。有关更多信息,请参阅Amazon ECS 容器代理配置

可用指标和维度

以下部分列出了 Amazon ECS 发送到 Amazon CloudWatch 的指标和维度。

Amazon ECS 指标

Amazon ECS 为您提供了用来监控资源的指标。您可以将集群内的 CPU 和内存预留以及使用率作为一个整体进行监控,并监控集群中的各个服务的 CPU 和内存使用率。对于您的 GPU 工作负载,您可以度量集群中的 GPU 预留。

可用的指标将取决于集群中任务和服务的启动类型。如果您对服务使用 Fargate 启动类型,则会提供 CPU 和内存利用率指标以帮助监控您的服务。对于 EC2 启动类型,您将拥有并需要监控构成底层基础设施的 Amazon EC2 实例。因此,其他 CPU、内存和 GPU 预留以及 CPU 和内存利用率指标可在集群、服务和任务级别上使用。

Amazon ECS 每分钟向 CloudWatch 发送以下指标。当 Amazon ECS 收集指标时,每分钟会收集多个数据点。然后将它们聚合成一个数据点,并将数据发送到 CloudWatch。因此,在 CloudWatch 中,一个样本数实际上是每分钟内聚合的多个数据点。

AWS/ECS 命名空间包括以下指标。

指标

说明

CPUReservation

集群中正在运行的任务所预留的 CPU 单位的百分比。

集群 CPU 预留(此指标仅可按 ClusterName 进行筛选)是通过将集群上的 Amazon ECS 任务所预留的总 CPU 单位数除以为集群中的所有容器实例注册的总 CPU 单位数计算得到的。仅处于 ACTIVEDRAINING 状态的容器实例将影响 CPU 预留指标。此指标仅用于使用 EC2 启动类型

的任务。

有效维度:ClusterName

有效统计数据:平均值、最小值、最大值、总计和样本数。最有用的统计数据是平均值。

单位:百分比。

CPUUtilization

集群或服务中使用的 CPU 单位的百分比。

集群 CPU 使用率(按 ClusterName 而不是 ServiceName 进行筛选的指标)是通过将集群上的 Amazon ECS 任务所使用的总 CPU 单位数除以为集群中的所有容器实例注册的总 CPU 单位数计算得到的。仅处于 ACTIVEDRAINING 状态的容器实例将影响 CPU 利用率指标。集群 CPU 利用率指标仅用于使用 EC2 启动类型的任务。

服务 CPU 使用率(按 ClusterNameServiceName 进行筛选的指标)是通过将属于服务的任务所使用的总 CPU 单位数除以为属于服务的任务预留的总 CPU 单位数计算得到的。服务 CPU 利用率指标用于使用 Fargate 和 EC2 启动类型的任务。

有效维度:ClusterNameServiceName

有效统计数据:平均值、最小值、最大值、总计和样本数。最有用的统计数据是平均值。

单位:百分比。

MemoryReservation

集群中正在运行的任务所预留的内存的百分比。

集群内存预留(此指标仅可按 ClusterName 进行筛选)是通过将集群上的 Amazon ECS 任务所预留的总内存量除以为集群中的所有容器实例注册的总内存量计算得到的。仅处于 ACTIVEDRAINING 状态的容器实例将影响内存预留指标。此指标仅用于使用 EC2 启动类型的任务。

有效维度:ClusterName

有效统计数据:平均值、最小值、最大值、总计和样本数。最有用的统计数据是平均值。

单位:百分比。

MemoryUtilization

集群或服务中使用的内存的百分比。

集群内存使用率(按 ClusterName 而不是 ServiceName 进行筛选的指标)是通过将集群上的 Amazon ECS 任务所使用的总内存量除以为集群中的所有容器实例注册的总内存量计算得到的。仅处于 ACTIVEDRAINING 状态的容器实例将影响内存利用率指标。集群内存利用率指标仅用于使用 EC2 启动类型的任务。

服务内存使用率(按 ClusterNameServiceName 进行筛选的指标)是通过将属于服务的任务所使用的总内存量除以为属于服务的任务预留的总内存量计算得到的。服务内存利用率指标用于使用 Fargate 和 EC2 启动类型的任务。

有效维度:ClusterNameServiceName

有效统计数据:平均值、最小值、最大值、总计和样本数。最有用的统计数据是平均值。

单位:百分比。

GPUReservation

集群中正在运行的任务所预留的总可用 GPU 的百分比。

集群 GPU 预留是通过将集群上的 Amazon ECS 任务所预留的 GPU 数除以集群中所有已启用 GPU 的容器实例上可用的 GPU 总数计算得到的。仅处于 ACTIVEDRAINING 状态的容器实例将影响 GPU 预留指标。

有效维度:ClusterName

有效统计数据:平均值、最小值、最大值、总计和样本数。最有用的统计数据是平均值。

单位:百分比。

注意

如果您使用的是使用 EC2 启动类型的任务并且具有 Linux 容器实例,则 Amazon ECS 容器代理将依靠 Docker stats 指标收集在实例上运行的每个容器的 CPU 和内存数据。对于可突发型性能实例(T3、T3a 和 T2 实例),与实例级 CPU 指标相比,CPU 利用率指标可能反映不同的数据。

Amazon ECS 指标的维度

Amazon ECS 指标使用 AWS/ECS 命名空间并提供以下维度的指标。

维度

说明

ClusterName

此维度将筛选您为指定集群中的所有资源请求的数据。将按 ClusterName 筛选所有 Amazon ECS 指标。

ServiceName

此维度将筛选您为指定集群内的指定服务中的所有资源请求的数据。

集群预留

集群预留指标以所有 Amazon ECS 任务在某个集群上预留的 CPU、内存和 GPU 占已为该集群中每个活动容器实例注册的聚合 CPU、内存和 GPU 的百分比来度量。仅处于 ACTIVEDRAINING 状态的容器实例将影响集群预留指标。此指标仅用于包含使用 EC2 启动类型的任务或服务的集群。包含使用 Fargate 启动类型的任务的集群不支持此指标。

(Total CPU units reserved by tasks in cluster) x 100 Cluster CPU reservation = -------------------------------------------------------------- (Total CPU units registered by container instances in cluster)
(Total MiB of memory reserved by tasks in cluster x 100) Cluster memory reservation = ------------------------------------------------------------------ (Total MiB of memory registered by container instances in cluster)
(Total GPUs reserved by tasks in cluster x 100) Cluster GPU reservation = ------------------------------------------------------------------ (Total GPUs registered by container instances in cluster)

当您在某个集群中运行某项任务时,Amazon ECS 将分析该集群的任务定义并预留在该集群的容器定义中指定的聚合 CPU 单元数、内存 MiB 数和 GPU 数。Amazon ECS 每分钟都会计算当前为在该集群中运行的每个任务预留的 CPU 单元数、内存 MiB 数和 GPU 数。它还会计算为在该集群上运行的所有任务预留的 CPU、内存和 GPU 的总量,这些数字将以占该集群的注册资源总量的百分比的形式报告给 CloudWatch。如果您指定软限制 (memoryReservation),它用于计算预留内存量。否则将使用硬限制 (memory)。有关软限制和硬限制的更多信息,请参阅任务定义参数

例如,某个集群注册了两个活动容器实例:一个 c4.4xlarge 实例和一个 c4.large 实例。c4.4xlarge 实例在集群中注册了 16,384 个 CPU 单元和 30,158 MiB 内存。c4.large 实例注册了 2,048 个 CPU 单元和 3,768 MiB 内存。此集群的聚合资源为 18,432 个 CPU 单元和 33,926 MiB 内存。

如果某个任务定义预留了 1024 个 CPU 单元和 2048 MiB 内存,并且在此集群上启动了 10 个使用此任务定义的任务(当前没有运行其他任务),则总共将预留 10240 个 CPU 单元和 20480 MiB 内存。此信息将以集群的 55% CPU 预留量和 60% 内存预留量的形式报告给 CloudWatch。

下图显示了在某个集群中注册的 CPU 单元总数,以及它们的预留和利用率对现有任务和新任务放置的意义。下面的块(已预留,已使用)和中间的块(已预留,未使用)表示为集群上运行的现有任务预留的总 CPU 单元数(即 CPUReservation CloudWatch 指标)。下面的块表示正在运行的任务在集群上实际正在使用的预留 CPU 单元数(即 CPUUtilization CloudWatch 指标)。上面的块表示现有任务未预留的 CPU 单元数;这些 CPU 单元可用于新任务放置。现有任务如果对 CPU 资源的需求增加,也可以使用这些未预留 CPU 单元。有关更多信息,请参阅 cpu 任务定义参数文档。


                集群 CPU 预留和利用率

集群利用率

集群利用率以所有 Amazon ECS 任务在某个集群上使用的 CPU 和内存占为该集群中每个活动容器实例注册的聚合 CPU 和内存的百分比的形式来度量。仅处于 ACTIVEDRAINING 状态的容器实例将影响集群利用率指标。不支持 GPU 利用率指标,因为它无法过度使用 GPU。此指标仅用于包含使用 EC2 启动类型的任务或服务的集群。包含使用 Fargate 启动类型的任务的集群不支持此指标。

(Total CPU units used by tasks in cluster) x 100 Cluster CPU utilization = -------------------------------------------------------------- (Total CPU units registered by container instances in cluster)
(Total MiB of memory used by tasks in cluster x 100) Cluster memory utilization = ------------------------------------------------------------------ (Total MiB of memory registered by container instances in cluster)

每个容器实例上的 Amazon ECS 容器代理每分钟都会计算当前用于该容器实例上正在运行的每个任务的 CPU 单元数和内存 MiB 数,并将此信息报告回 Amazon ECS。它还会计算用于在该集群上运行的所有任务的 CPU 和内存的总量,并将这些数字以占该集群的总注册资源数的百分比的形式报告给 CloudWatch。

例如,某个集群注册了两个活动容器实例:一个 c4.4xlarge 实例和一个 c4.large 实例。c4.4xlarge 实例在集群中注册了 16,384 个 CPU 单元和 30,158 MiB 内存。c4.large 实例注册了 2,048 个 CPU 单元和 3,768 MiB 内存。此集群的聚合资源为 18,432 个 CPU 单元和 33,926 MiB 内存。

如果有 10 个任务正在此集群上运行,并且每个任务使用 1024 个 CPU 单元和 2048 MiB 内存,则该集群上总共使用了 10240 个 CPU 单元和 20480 MiB 内存。此信息将以集群的 55% CPU 利用率和 60% 内存利用率的形式报告给 CloudWatch。

服务利用率

服务利用率以属于集群上某个服务的 Amazon ECS 任务使用的 CPU 和内存占该服务的任务定义中指定的 CPU 和内存的百分比的形式来度量。 具有使用 EC2 和 Fargate 启动类型的任务的服务支持此指标。

(Total CPU units used by tasks in service) x 100 Service CPU utilization = ---------------------------------------------------------------------------- (Total CPU units specified in task definition) x (number of tasks in service)
(Total MiB of memory used by tasks in service) x 100 Service memory utilization = -------------------------------------------------------------------------------- (Total MiB of memory specified in task definition) x (number of tasks in service)

每个容器实例上的 Amazon ECS 容器代理每分钟都会计算当前用于由该服务拥有且正在该容器实例上运行的每个任务的 CPU 单元数和内存 MiB 数,并将此信息报告回 Amazon ECS。它还将计算用于由该服务拥有且正在该集群上运行的所有任务的 CPU 和内存的总量,并将这些数字以占在该服务的任务定义中为该服务指定的总资源的百分比的形式报告给 CloudWatch。如果您指定软限制 (memoryReservation),它用于计算预留内存量。否则将使用硬限制 (memory)。有关软限制和硬限制的更多信息,请参阅任务定义参数

例如,某个服务的任务定义为其所有容器总共指定了 512 个 CPU 单元和 1,024 MiB 内存 (带硬限制 memory 参数)。该服务需要有 1 个正在运行的任务,并且该服务在一个包含 1 个 c4.large 容器实例 (具有 2,048 个 CPU 单元和 3,768 MiB 总内存) 的集群上运行,该集群上没有其他正在运行的任务。尽管该任务指定了 512 个 CPU 单元,但由于它是具有 2048 个 CPU 单元的容器实例上唯一一个正在运行的任务,它最多可以使用指定数量的四倍的资源 (2048/512)。但是,1024 MiB 的指定内存量是一个它无法超出的硬限制,因此在这种情况下,服务内存利用率不能超过 100%。

如果上述示例使用了软限制 memoryReservation 而不是硬限制 memory 参数,则该服务的任务可以根据需要使用超出指定的 1024MiB 的内存量。在这种情况下,该服务的内存利用率可能会超过 100%。

如果该任务在某个时间段内执行 CPU 密集型工作并且用尽了 2048 个可用 CPU 单元和 512 MiB 内存,则服务将报告 400% CPU 利用率和 50% 内存利用率。如果该任务处于空闲状态且使用了 128 个 CPU 单元和 128 MiB 内存,则服务将报告 25% CPU 利用率和 12.5% 内存利用率。

服务 RUNNING 任务计数

您可以使用 CloudWatch 指标查看您的服务中处于 RUNNING 状态的任务数。例如,您可以为此指标设置一个 CloudWatch 警报,用于在您的服务中运行的任务数下降至指定值以下时提醒您。

查看服务中正在运行的任务数

  1. 通过以下网址打开 CloudWatch 控制台:https://console.amazonaws.cn/cloudwatch/

  2. 在导航窗格上,选择 Metrics (指标)

  3. All metrics 选项卡上,选择 ECS

  4. 依次选择 ClusterNameServiceName,然后选择与要在其中查看正在运行的任务的服务对应的任何指标(CPUUtilizationMemoryUtilization)。

  5. 绘成图表的指标选项卡上,将周期更改为 1 分钟,将统计数据更改为样本数

    图中显示的值表示服务中的 RUNNING 任务的数量。

    
                        集群指标视图