ECS Fargate でタスク毎のネットワーク転送量を確認する方法を教えてください

2024.03.18

困っていた内容

ECS Fargate でタスク毎の平均データ転送量を確認したいです。
Container Insights のメトリクスを確認しましたが、最小粒度はタスク定義ファミリーでタスク毎ではありませんでした。
タスク毎で確認する方法を教えてください。

どう対応すればいいの?

パフォーマンスログイベントを確認してください。

Containers Insights で自動的に生成されるメトリクスは、タスク毎の値を追跡できるほど詳細ではありません。一方で、メトリクスの元となるデータがパフォーマンスログイベントとして CloudWatch Logs に保管されています。

そのため、パフォーマンスログイベントのデータを確認すると、タスク毎の平均データ転送量が確認できます。確認の際は CloudWatch Logs Insights を使用すると柔軟に集計できます。

ECS タスクとコンテナデプロイをモニタリングするように CloudWatch Container Insights を設定する | AWS re:Post

Amazon ECS の Containers Insights によって収集されるメトリクスは、1 つのタスクを追跡できるほど詳細ではありません。これは、利用可能なすべてのメトリクスがタスク定義ファミリレベルで集計され、平均化されるためです。収集されたパフォーマンスデータをより詳細に分析するには、CloudWatch Logs Insights クエリを使用します。

やってみた

CloudWatch コンソールを開き、ログセクションの「ログのインサイト」をクリックします。

パフォーマンスログイベントが保存されたロググループを選択します。

ロググループ命名規則

/aws/ecs/containerinsights/<クラスター名>/performance

クエリ(赤枠で囲った部分)に、タスク別の平均データ転送量を取得するクエリを入力し「クエリの実行」をクリックします。
※必要に応じて 集計の関数(例:max)は変更してください。

クエリ例

stats avg(NetworkRxBytes) as RxBytes,avg(NetworkTxBytes) as TxBytes by TaskId
| filter Type="Task"

タスク別の平均データ転送量が表示されます。

参考資料

Container Insights のコスト管理に役立てるため、CloudWatch によりログデータからあらゆるメトリクスが自動的に作成されるわけではありません。CloudWatch Logs Insights を使って生のパフォーマンスログイベントを分析すると、メトリクスと粒度レベルの詳細を確認できます。

Container Insights は、埋め込みメトリクス形式を使用して、パフォーマンスログイベントでメトリクスを収集します。ログは CloudWatch Logs に保存されます。CloudWatch は、CloudWatch コンソールで表示できるログから複数のメトリクスを自動的に生成します。また、CloudWatch Logs Insight クエリを使用して収集されるパフォーマンスデータをより深く分析することもできます。