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

Amazon ECS CloudWatch のメトリクス

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

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

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

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

手動でエージェントを開始する場合 (たとえば、コンテナインスタンスで Amazon ECS 最適化 AMI を使用していない場合) は、「Amazon ECS コンテナエージェントの手動更新 (Amazon ECS 対応 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 とメモリの使用率を監視するためのメトリクスが用意されています。

使用可能になるメトリクスは、クラスター内のタスクとサービスの起動タイプに応じて変化します。サービスに Fargate 起動タイプを使用している場合、サービスのモニタリングを支援するための CPU とメモリの使用状況メトリクスが提供されます。Amazon EC2 起動タイプの場合、基盤となるインフラストラクチャを構成する EC2 インスタンスを所有し、これらのインスタンスをモニタリングする必要があるため、CPU とメモリの予約率と使用率のメトリクスが、クラスター、サービス、およびタスクレベルで追加提供されます。

Amazon ECS は以下のメトリクスを CloudWatch に毎分送信します。Amazon ECS がメトリクスを収集する際は、1 分ごとに、複数のデータポイントを収集します。次に、それらを 1 つのデータポイントに集計してから、データを CloudWatch に送信します。したがって、CloudWatch では、1 つのサンプル数は実際には 1 分間の複数のデータポイントの集計になります。

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

メトリクス 説明

CPUReservation

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

クラスターの CPU 予約率 (このメトリクスは ClusterName でのみフィルタリングできます) は、クラスターの Amazon ECS タスクにより予約された合計 CPU ユニット数を、クラスターの全コンテナインスタンスに登録されている合計 CPU ユニット数で割って測定します。このメトリクスは、EC2 起動タイプを使用するタスクにのみ使用されます。

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

有効な統計: Average、Minimum、Maximum、Sum、Sample Count。最も有用な統計は Average です。

単位: パーセント

CPUUtilization

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

クラスターの CPU 使用率 (メトリクスは ServiceName を除く ClusterName でフィルタリングされます) では、クラスターの Amazon ECS タスク数をクラスターの全コンテナインスタンスに登録されている CPU ユニットの全数で割った数で使用されている合計 CPU ユニットを測定します。クラスターの CPU 使用率メトリクスは、EC2 起動タイプを使用するタスクにのみ使用されます。

サービスの CPU 使用率 (メトリクスは ServiceNameClusterName でフィルタリングされます) では、サービスに属するタスク数をサービスに属するタスクから CPU 合計で割った総数で合計 CPU ユニットを測定します。サービスの CPU 使用率メトリクスは、Fargate と EC2 起動タイプの両方を使用するタスクに使用されます。

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

有効な統計: Average、Minimum、Maximum、Sum、Sample Count。最も有用な統計は Average です。

単位: パーセント

MemoryReservation

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

クラスターメモリ予約率 (このメトリクスは ClusterName でのみフィルタリングできます) は、クラスターの Amazon ECS タスクで予約された合計メモリー量を、クラスターの全コンテナインスタンスに登録されている合計メモリー量で割って測定されます。このメトリクスは、EC2 起動タイプを使用するタスクにのみ使用されます。

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

有効な統計: Average、Minimum、Maximum、Sum、Sample Count。最も有用な統計は Average です。

単位: パーセント

MemoryUtilization

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

クラスターメモリ使用率 (メトリクスに ServiceName を指定せず ClusterName のみでフィルタリングした場合) は、クラスター内の Amazon ECS タスクで使用中の合計メモリーを、クラスターの全コンテナインスタンスに搭載されているメモリー容量で割った値です。 クラスターのメモリの使用率メトリクスは、EC2 起動タイプを使用するタスクにのみ使用されます。

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

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

有効な統計: Average、Minimum、Maximum、Sum、Sample Count。最も有用な統計は Average です。

単位: パーセント

注記

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

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

ServiceName

このディメンションは、指定したクラスター内の特定サービスの全リソースからリクエストしたデータをフィルタリングします。

クラスター予約

クラスターの予約メトリクスは、クラスター内のアクティブなコンテナインスタンスそれぞれに登録された CPU およびメモリの合計に対する、クラスター内のすべての Amazon ECS タスクによって予約されている CPU とメモリの比率として測定されます。このメトリクスは、標準起動クラスターを使用して、タスクまたはサービスとともにクラスターで利用され、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)

クラスターでタスクを実行すると、Amazon ECS はタスク定義を解析し、そのコンテナの定義で指定される CPU ユニットとメモリ (MiB) の合計を予約します。Amazon ECS は毎分、クラスターで実行中の各タスクで現在予約されている CPU ユニット数とメモリの MiB を計算します。クラスターで実行中のすべてのタスクで予約されている CPU とメモリの合計が計算され、その数字がクラスターの予約リソースの合計に対する比率として 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 のメモリが予約され、CloudWatch にはクラスターの CPU 予約 55%、メモリ予約 60% としてレポートされます。

次の図は、クラスターの合計予約 CPU ユニットと、これらの予約および使用率が既存のタスクおよび新規タスク配置にどのように影響するかを示しています。下段 (予約済み、使用中) および中段 (予約済み、未使用) ブロックは、クラスターで実行中の既存タスクで予約されている CPU ユニットの合計、または CPUReservation CloudWatch メトリクスを表わしています。下段ブロックは、実行中のタスクがクラスターで実際に使用している予約 CPU ユニット、または CPUUtilization CloudWatch メトリクスを表しています。上段ブロックは既存のタスクによって予約されていない CPU ユニットを表します。これらの CPU ユニットを新しいタスクの配置に利用できます。既存タスクの CPU リソースを増やす必要がある場合に、これらの予約されていない CPU ユニットを使用することもできます。詳細については、「cpu」タスク定義パラメーターのドキュメントを参照してください。

 クラスターの CPU 予約と使用率

クラスター使用率

クラスターの使用率は、クラスター内のアクティブなコンテナインスタンスそれぞれに登録された CPU およびメモリの合計に対する、クラスターのすべての Amazon ECS タスクによって使用されている CPU とメモリの比率として測定されます。このメトリクスは、標準起動クラスターを使用して、タスクまたはサービスとともにクラスターで利用され、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 とメモリの比率として測定されます。このメトリクスは標準および 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 ユニットを指定していますが、CPU ユニットが 2,048 あるコンテナインスタンスで実行中の唯一のタスクであるため、指定量の 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. [Graphed metrics] タブで、[Period] を [1 Minute] に、[Statistic] を [Sample Count] に変更します。

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

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