Amazon Elastic Container Service
開発者ガイド (API バージョン 2014-11-13)

Amazon ECS CloudWatch のメトリクス

Amazon CloudWatch を使用して、Amazon ECS リソースをモニタリングすることで Amazon ECS から raw データを収集し、リアルタイムに近い読み取り可能なメトリクスに加工することができます。これらの統計情報は 2 週間記録されるため、履歴情報にアクセスしてクラスターまたはサービスの動作をより的確に把握できます。Amazon ECS メトリクスデータは 1 分間隔で CloudWatch に自動的に送信されます。CloudWatch の詳細については、「Amazon CloudWatch ユーザーガイド」を参照してください。

CloudWatch メトリクスを有効にする

Fargate 起動タイプを使用するどの Amazon ECS サービスでも CloudWatch の CPU とメモリの使用率メトリクスが自動的に有効になっているため、手動で有効にする必要はありません。

EC2 起動タイプを使用する Amazon ECS タスクまたはサービスの場合、Amazon ECS コンテナインスタンスでは、CloudWatch メトリクスを有効にするために、コンテナエージェントのバージョン 1.4.0 以降が必要です。ただし、最新のコンテナエージェントのバージョンを使用することをお勧めします。エージェントのバージョンの確認と最新バージョンへの更新については、「Amazon ECS コンテナエージェントの更新」を参照してください。

手動でエージェントを開始する場合 (コンテナインスタンスで Amazon ECS-optimized AMI を使用していない場合など) は、「Amazon ECS コンテナエージェントの手動更新 (Amazon ECS-Optimized AMI 以外の場合)」を参照してください。

Amazon ECS コンテナインスタンスには、コンテナインスタンスを起動するための ecs:StartTelemetrySession アクセス権限を付与した IAM ロールも必要です。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 がメトリクスを収集する際は、1 分ごとに、複数のデータポイントを収集します。次に、それらを 1 つのデータポイントに集計してから、データを CloudWatch に送信します。したがって、CloudWatch では、1 つのサンプル数は実際には 1 分間の複数のデータポイントの集計になります。

AWS/ECS 名前空間には、次のメトリクスが含まれます。

メトリクス 説明

CPUReservation

クラスターでタスクを実行することで予約されている CPU ユニットの割合。

クラスターの CPU 予約率 (このメトリクスは ClusterName でのみフィルタ処理できます) は、クラスター内の Amazon ECS タスクによって予約されている CPU ユニットの合計を、クラスター内のすべてのコンテナインスタンスに登録されている CPU ユニットの合計で割った数として測定されます。ステータスが ACTIVE または DRAINING であるコンテナインスタンスのみが、CPU 予約メトリクスに影響します。このメトリクスは、EC2

起動タイプを使用するタスクにのみ使用されます。

有効なディメンション: ClusterName

有効な統計: 平均、最小、最大、合計、サンプル数。最も有用な統計は Average です。

単位: パーセント。

CPUUtilization

クラスターやサービスで使用されている CPU の割合。

クラスターの CPU 使用率 (このメトリクスは ServiceName を除く ClusterName でフィルタ処理されます) は、クラスター内の Amazon ECS タスクによって使用されている CPU ユニットの合計を、クラスター内のすべてのコンテナインスタンスに登録されている CPU ユニットの合計で割った数として測定されます。ステータスが ACTIVE または DRAINING であるコンテナインスタンスのみが、CPU 使用率メトリクスに影響します。クラスターの CPU 使用率メトリクスは、EC2 起動タイプを使用するタスクにのみ適用されます。

サービスの CPU 使用率 ( ClusterNameServiceName の両方でフィルタリングされたメトリクス) は、サービスに属するタスクで使用されている CPU ユニット数を、サービスに属するタスクで予約されている CPU ユニット数で割った値です。サービスの CPU 使用率メトリクスは、Fargate と EC2 の両方の起動タイプを使用するタスクに適用されます。

有効なディメンション: ClusterNameServiceName

有効な統計: 平均、最小、最大、合計、サンプル数。最も有用な統計は Average です。

単位: パーセント。

MemoryReservation

クラスターでタスクを実行することで予約されているメモリの割合。

クラスターのメモリ予約率 (このメトリクスは ClusterName でのみフィルタ処理できます) は、クラスター内の Amazon ECS タスクによって予約されているメモリの合計を、クラスター内のすべてのコンテナインスタンスに登録されているメモリの合計で割った数として測定されます。ステータスが ACTIVE または DRAINING であるコンテナインスタンスのみが、メモリ予約メトリクスに影響します。このメトリクスは、EC2 起動タイプを使用するタスクにのみ適用されます。

有効なディメンション: ClusterName

有効な統計: 平均、最小、最大、合計、サンプル数。最も有用な統計は Average です。

単位: パーセント。

MemoryUtilization

クラスターやサービスで利用されるメモリの割合。

クラスターのメモリ使用率 (このメトリクスは ServiceName を除く ClusterName でフィルタ処理されます) は、クラスター内の Amazon ECS タスクによって使用されているメモリの合計を、クラスター内のすべてのコンテナインスタンスに登録されているメモリの合計で割った数として測定されます。ステータスが ACTIVE または DRAINING であるコンテナインスタンスのみが、メモリ使用率メトリクスに影響します。クラスターのメモリ使用率メトリクスは、EC2 起動タイプを使用するタスクにのみ適用されます。

サービスメモリの使用率は (メトリクスは ClusterNameServiceName 出フィルタリングされます)、サービスに付属するタスク数をサービスに属するタスクのためのメモリ総数で割った数で使用中の合計メモリを測定します。サービスのメモリ使用率メトリクスは、Fargate と EC2 の両方の起動タイプを使用するタスクに適用されます。

有効なディメンション: ClusterNameServiceName

有効な統計: 平均、最小、最大、合計、サンプル数。最も有用な統計は Average です。

単位: パーセント。

GPUReservation

使用可能な GPU の合計に対する、クラスター内の実行中のタスクによって予約されている GPU の割合。

クラスターの GPU 予約率は、クラスター内の Amazon ECS タスクによって予約されている GPU の合計を、クラスター内のすべての GPU 対応コンテナインスタンスで使用可能だった GPU の合計で割った数として測定されます。ステータスが ACTIVE または DRAINING であるコンテナインスタンスのみが、GPU 予約メトリクスに影響します。

有効なディメンション: ClusterName

有効な統計: 平均、最小、最大、合計、サンプル数。最も有用な統計は Average です。

単位: パーセント。

注記

EC2 起動タイプを使用するタスク、および Linux コンテナインスタンスがある場合、Amazon ECS コンテナエージェントは Docker stats メトリクスを利用して、インスタンスで実行中の各コンテナの CPU およびメモリデータを収集します。バージョン 1.14.0 より前の Amazon ECS エージェントを使用している場合、Amazon ECS には、メモリ使用率を CloudWatch にレポートするときのファイルシステムのキャッシュ使用量が含まれるため、CloudWatch のグラフでは、タスクのメモリ使用率は実際のものよりも高く示されます。これを修正するため、Amazon ECS バージョン 1.14.0 から、Amazon ECS コンテナエージェントではメモリ使用率メトリクスからファイルシステムのキャッシュ使用量が除外されます。この変更により、コンテナのメモリ不足時の動作への影響はありません。

Amazon ECS メトリクスのディメンション

Amazon ECS メトリックスは AWS/ECS 名前空間を使用し、以下のディメンションのメトリックスを提供しています。

ディメンション 説明

ClusterName

このディメンションにより、指定したクラスター内のすべてのリソースから、リクエストしたデータがフィルタ処理されます。すべての Amazon ECS メトリクスは ClusterName でフィルタ処理されます。

ServiceName

このディメンションにより、指定したクラスター内の特定サービスのすべてのリソースから、リクエストしたデータがフィルタ処理されます。

クラスター予約

クラスターの予約メトリクスは、クラスター内のアクティブな各コンテナインスタンスに登録された CPU、メモリ、GPU に対する、クラスター内のすべての Amazon ECS タスクによって予約されている CPU、メモリ、GPU の割合として測定されます。ステータスが ACTIVE または DRAINING であるコンテナインスタンスのみが、クラスター予約メトリクスに影響します。このメトリクスは、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) が使用されます。ハード制限とソフト制限の詳細については、「タスク定義パラメータ」を参照してください。

たとえば、クラスターに 2 つのアクティブなコンテナインスタンス、c4.4xlarge インスタンスおよび c4.large インスタンスが登録されているとします。c4.4xlarge インスタンスは、CPU ユニット 16,384、メモリ 30,158 MiB でクラスターに登録されています。c4.large インスタンスは、CPU ユニット 2,048、メモリ 3,768 MiB で登録されています。このクラスターの合計リソースは、CPU ユニット 18,432、メモリ 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 予約と使用率

クラスター使用率

クラスターの使用率は、クラスター内のアクティブなコンテナインスタンスそれぞれに登録された CPU およびメモリの合計に対する、クラスターのすべての Amazon ECS タスクによって使用されている CPU とメモリの比率として測定されます。ステータスが ACTIVE または DRAINING であるコンテナインスタンスのみが、クラスター使用率メトリクスに影響します。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 にレポートされます。

たとえば、クラスターに 2 つのアクティブなコンテナインスタンス、c4.4xlarge インスタンスおよび c4.large インスタンスが登録されているとします。c4.4xlarge インスタンスは、CPU ユニット 16,384、メモリ 30,158 MiB でクラスターに登録されています。c4.large インスタンスは、CPU ユニット 2,048、メモリ 3,768 MiB で登録されています。このクラスターの合計リソースは、CPU ユニット 18,432、メモリ 33,926 MiB です。

このクラスターで 10 個のタスクが実行中であり、各タスクが 1,024 CPU ユニットと 2,048 MiB のメモリを消費している場合、クラスターでは合計で 10,240 CPU ユニットと 20,480 MiB のメモリが使用されています。この場合、クラスターについて CPU 使用率 55%、メモリ使用率 60% として CloudWatch にレポートされます。

サービス使用率

サービスの使用率は、サービスのタスク定義で指定された CPU およびメモリに対する、クラスターのサービスに属する Amazon ECS タスクによって使用されている 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 ユニットを指定していますが、2,048 CPU ユニットを搭載したコンテナインスタンスで唯一実行されているタスクであるため、指定した量の 4 倍 (2,048/512) まで使用できます。ただし、指定した 1,024 MiB のメモリはハード制限であり、それを超えることはできません。したがってこの場合、サービスのメモリ使用率は 100% を超えることはできません。

前の例で、ハードリミットの memory パラメータの代わりにソフト制限の memoryReservation を使用した場合、サービスのタスクでは、必要に応じて指定された 1,024 MiB を超えるメモリを使用できます。この場合、サービスのメモリ使用率が 100% を超える可能性があります。

このタスクが一定期間中に CPU 負荷の高い作業を実行し、使用可能な 2,048 CPU ユニットすべてと 512 MiB のメモリを使用している場合、サービスからは CPU 使用率 400%、メモリ使用率 50% としてレポートされます。タスクがアイドル状態で 128 CPU ユニットおよび 128 MiB のメモリを使用している場合、サービスからは CPU 使用率 25%、メモリ使用率 12.5% としてレポートされます。

サービスの RUNNING タスク数

CloudWatch メトリクスを使用して、RUNNING 状態のサービス内のタスク数を表示できます。たとえば、このメトリクスに CloudWatch アラームを設定して、サービスで実行中のタスクの数が指定された値を下回った場合にアラートを送信できます。

サービスの実行中のタスク数を表示するには

  1. https://console.aws.amazon.com/cloudwatch/にある CloudWatch コンソールを開きます。

  2. ナビゲーションペインで [Metrics (メトリクス)] を選択します。

  3. [All metrics] タブで、[ECS] を選択します。

  4. [ClusterName]、[ServiceName] を選択してから、実行中のタスクを表示するサービスに対応したメトリクス (CPUUtilization または MemoryUtilization) を選択します。

  5. [グラフ化したメトリクス] タブで、[期間] を [1 分] に、[統計] を [サンプル数] に変更します。

    グラフに表示された値は、サービスの RUNNING タスクの数を示しています。

    
                        クラスターメトリクスビュー