Amazon Elastic Container Service
开发人员指南 (API Version 2014-11-13)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

Amazon ECS CloudWatch 指标

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

启用 CloudWatch 指标

您的 Amazon ECS 容器实例需要不低于 1.4.0 版的容器代理才能启用 CloudWatch 指标;但建议您使用最新的容器代理版本。有关检查您的代理版本并更新到最新版本的信息,请参阅更新 Amazon ECS 容器代理

如果您要手动启动代理 (例如,如果您未对容器实例使用针对 Amazon ECS 优化过的 AMI),请参阅手动更新 Amazon ECS 容器代理(适用于没有针对 Amazon ECS 优化过的 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 和内存使用率。

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

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

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

指标 描述

CPUReservation

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

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

有效维度:ClusterNameServiceName

有效统计数据:Average、Minimum、Maximum、Sum、Data Samples。

单位:百分比

CPUUtilization

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

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

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

有效维度:ClusterNameServiceName

有效统计数据:Average、Minimum、Maximum、Sum、Data Samples。

单位:百分比

MemoryReservation

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

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

有效维度:ClusterNameServiceName

有效统计数据:Average、Minimum、Maximum、Sum、Data Samples。

单位:百分比

MemoryUtilization

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

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

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

有效维度:ClusterNameServiceName

有效统计数据:Average、Minimum、Maximum、Sum、Data Samples。

单位:百分比

注意

如果您使用的是使用 EC2 启动类型的任务并且具有 Linux 容器实例,则 Amazon ECS 容器代理将依靠 Docker stats 指标收集在实例上运行的每个容器的 CPU 和内存数据。如果您使用版本早于 1.14.0 的 Amazon ECS 代理,ECS 会在向 CloudWatch 报告内存利用率时包括文件系统缓存使用率,此时您的 CloudWatch 图表显示的使用率会高于任务实际内存利用率。为修复这一问题,自 Amazon ECS 代理版本 1.14.0 起,Amazon ECS 容器代理会从内存利用率指标中排除文件系统缓存使用率。此更改不会影响容器的内存不足行为。

Amazon ECS 指标的维度

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

维度 说明

ClusterName

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

ServiceName

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

集群预留

集群预留指标以所有 Amazon ECS 任务在某个集群上预留的 CPU 和内存占为该集群中每个活动容器实例注册的聚合 CPU 和内存的百分比来度量。

(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)

当您在某个集群中运行某项任务时,Amazon ECS 将分析该集群的任务定义并预留在该集群的容器定义中指定的聚合 CPU 单元数和内存 MiB 数。Amazon ECS 每分钟都会计算当前为在该集群中运行的每个任务预留的 CPU 单元数和内存 MiB 数。它还会计算为在该集群上运行的所有任务预留的 CPU 和内存的总量,这些数字将以占该集群的注册资源总量的百分比的形式报告给 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 内存。

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

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

 集群 CPU 预留和利用率

集群利用率

集群利用率以所有 Amazon ECS 任务在某个集群上使用的 CPU 和内存占为该集群中每个活动容器实例注册的聚合 CPU 和内存的百分比的形式来度量。

(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 个任务正在此集群上运行,并且每个任务使用 1,024 个 CPU 单元和 2,048 MiB 内存,则该集群上总共利用了 10,240 个 CPU 单元和 20,480 MiB 内存,此信息将以占集群的 CPU 利用率的 55% 和内存利用率的 60% 的形式报告给 CloudWatch。

服务利用率

服务利用率以属于集群上某个服务的 Amazon ECS 任务使用的 CPU 和内存占该服务的任务定义中定义的 CPU 和内存的百分比的形式来度量。

(Total CPU units used by tasks in service) x 100 Service CPU utilization = ---------------------------------------------------------------------------- (Total CPU units reserved 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 reserved in task definition) x (number of tasks in service)

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

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

如果该任务在某个时间段内执行 CPU 密集型工作并且用尽了 2,048 个可用 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. 选择 ClusterName, ServiceName,然后选择与要在其中查看正在运行的任务的服务对应的任何指标 (CPUUtilizationMemoryUtilization)。

  5. Graphed metrics 选项卡上,将 Period 更改为 1 Minute,将 Statistic 更改为 Data Samples

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

     集群指标视图