AWS Fargateがストレージ容量を監視できるようになりました
Amazon ECS FargateがECSタスクメタデータエンドポイントまたはECS Container Insights経由でストレージの総容量と使用量をモニタリングできるようになりました。 容量不足のアプリ障害ともおさらばです。
AWS Fargate adds support for monitoring the storage utilization@2022/11/18
ECS FargateのLinuxプラットフォーム1.4.0以降にのみ対応しています。
追加されたストレージのメトリクスについて
Fargateに割り当てられたストレージの容量と使用しているサイズの2種類のメトリクスが追加されました。
サービス | Task metadata endpoint | Container Insights |
---|---|---|
割当サイズ | EphemeralStorageMetrics.Utilized | EphemeralStorageUtilization |
使用サイズ | EphemeralStorageMetrics.Reserved | EphemeralStorageReservation |
単位 | MiB | GiB |
ドキュメント | URL | URL |
ECSタスクメタデータエンドポイントから確認
Fargateコンテナ内からタスクメタデータエンドポイントv4の task
にアクセスします。
$ curl $ECS_CONTAINER_METADATA_URI_V4/task | jq . { "Cluster": "arn:aws:ecs:eu-central-1:123456789012:cluster/test", "TaskARN": "arn:aws:ecs:eu-central-1:123456789012:task/test/70aff84b5dc041d183bdc7791c117890", ... "EphemeralStorageMetrics": { "Utilized": 20692, "Reserved": 50711 } }
単位は MiB です。
Container Insightsから確認
前提として、Container Insightsの有効化が必要です。
ディメンションとして
- TaskDefinitionFamily
- ClusterName
- ServiceName
を利用できます。
単位は GiB です。
ストレージサイズの指定
ECS Fargateのエフェメラル(ローカル)ストレージにはデフォルトの20GiBから最大で200GiBまで割当られます。
{ "taskDefinitionArn": "arn:aws:ecs:...", "containerDefinitions": [ ... ], "cpu": "256", "memory": "512", "ephemeralStorage": { "sizeInGiB": 50 }, ... }
df との関連
コンテナ内でdf
からストレージサイズを確認すると、総容量はタスクのephemeralStorage
で指定したサイズよりも大きいです。
エフェメラル・ストレージが20GiBのタスクを起動した直後の状態で、df
結果と今回追加されたストレージ系メトリクスを確認します。
$ df -H Filesystem Size Used Avail Use% Mounted on overlay 32G 11G 20G 35% / tmpfs 68M 0 68M 0% /dev shm 2.1G 0 2.1G 0% /dev/shm tmpfs 2.1G 0 2.1G 0% /sys/fs/cgroup /dev/nvme1n1 32G 11G 20G 35% /etc/hosts /dev/nvme0n1p1 5.3G 1.6G 3.6G 31% /managed-agents/execute-command tmpfs 2.1G 0 2.1G 0% /proc/acpi tmpfs 2.1G 0 2.1G 0% /sys/firmware $ curl $ECS_CONTAINER_METADATA_URI_V4/task { ... "EphemeralStorageMetrics": { "Utilized": 212, "Reserved": 20481 } }
df 結果から、コンテナの総サイズは32GiBあるのに対して Available は EphemeralStorageMetrics
で指定したのと同じ20GiBです。
次のドキュメントにあるように、df結果にはコンテナイメージも含んでいるからです。
The pulled, compressed, and the uncompressed container image for the task is stored on the ephemeral storage. To determine the total amount of ephemeral storage that your task has to use, you must subtract the amount of storage that your container image uses from the total amount of ephemeral storage your task is allocated.
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/fargate-task-storage.html
今回追加されたメトリクスを利用することで、アプリケーションが利用可能なストレージ総容量(Reserved
)と実際に利用している容量(Utilized
)を直接的にモニタリングできます。