ForgeVision Engineer Blog

フォージビジョン エンジニア ブログ

【コンテナ運用が楽々に!】Amazon CloudWatch Container InsightsでのECSのオブザーバビリティが強化されました

こんにちは、AWSグループの藤岡(@fuji_kol_ry)です。

AWS re:Invent 2024 にて、Amazon CloudWatch Container Insightsにおける Amazon ECS(Elastic Container Service)のオブザーバビリティ機能の強化が発表されました。 aws.amazon.com

私自身、複数のお客様でコンテナ活用を支援しており、このAmazon CloudWatch Container Insights(以降はContainer Insightsと記載)の発表はとても興味を惹かれました。

そこでこの記事では、既存のContainer Insightsと比較して「機能とコスト」でどのような差分があるかをフォーカスして、調べて分かったことをご紹介します。

Amazon CloudWatch Container Insightsとは

まずそもそも、Container Insightsのオブザーバビリティ対象であるECSは、コンテナオーケストレーションを効率化する強力なサービスです。
AWSマネージドされた管理によってコンテナを気軽に使える一方で、その運用にはモニタリングが欠かせません。しかし、ECSを運用するエンジニアの多くが、次のような課題に直面しているかと思います。

  • メトリクスの収集が手間:コンテナの動作状況を追跡するために複数のツールを使う必要がある。
  • ログ分析が煩雑:問題発生時に、どのタスクやサービスが原因か特定するまでに時間がかかる。

これらの課題は、システムの安定性や運用効率に影響を与える重大なポイントです。
その中でAWSは以前より、総合的なオブザーバビリティとして Container Insights を提供していました。

このContainer Insightsによって、メトリクス収集やログ分析の手間が大幅に簡略されていました。

例えば、ログ・メトリクス収集のために、ツールのインストールやサイドカーの配置などを省くことができました。(つまり、発表前から既に非常に便利なサービスでした。)

このサービスが更に機能強化されたとなれば、多くの人が喜ぶこと間違いなしです☺️

既存のContainer Insightsについての詳細は、AWSが提供する以下より確認できます。(この資料自体、非常にオススメです!) https://pages.awscloud.com/rs/112-TZM-766/images/202109_AWS_Black_Belt_Containers247_metrics.pdf

何が大きく変わったか

先に結論をお伝えすると、以下2つのポイントが大きな変化と個人的に思っています。

①クラスター、サービス、コンテナ、タスクのドリルダウン/ドリルアップでの確認によって、連続的に状況把握・分析できるようになった

②タスク・コンテナの粒度のメトリクスが充実して、より詳細なモニタリング・分析が出来るようになった

それぞれのポイントについて詳しく説明していきます。今回は1クラスター1サービス2タスクを用意しています。

タスク定義は以下を使用しました。

{
    "family": "test-fargate-task",
    "containerDefinitions": [
        {
            "name": "test-app-container",
            "image": "public.ecr.aws/docker/library/httpd:latest",
            "cpu": 256,
            "memory": 512,
            "portMappings": [
                {
                    "containerPort": 80,
                    "protocol": "tcp"
                }
            ],
            "essential": true,
            "logConfiguration": {
                "logDriver": "awslogs",
                "options": {
                    "awslogs-group": "/ecs/test-fargate-task",
                    "awslogs-region": "ap-northeast-1",
                    "awslogs-stream-prefix": "ecs"
                }
            }
        }
    ],
    "taskRoleArn": "arn:aws:iam::<account-id>:role/ecsTaskExecutionRole",
    "executionRoleArn": "arn:aws:iam::<account-id>:role/ecsTaskExecutionRole",
    "networkMode": "awsvpc",
    "requiresCompatibilities": [
        "FARGATE"
    ],
    "cpu": "256",
    "memory": "512"
}

なお本記事では、Container Insightsの有効化やクラスター作成など、事前の設定手順は割愛します。 詳しく知りたい方は、AWS公式ブログを以下リンクより確認ください。 aws.amazon.com

①ドリルダウン/ドリルアップでの連続的な確認

コンソールからCloudWatchへアクセスし、Container Insightsを表示してください。 そこからオブザーバビリティが強化された Container Insightsを設定したクラスターをを選択すると、以下のようなダッシュボードが表示されます。

左に表示されるパフォーマンスダッシュボードビューから、サービスやタスク、コンテナを選択することで表示を切り替えられます。

既存のContainer Insightsと比較すると、クラスターからコンテナまでを網羅して、手軽に粒度を切り替えながらメトリクスを確認できるのは、嬉しいポイントですね。

サービス

タスク

コンテナ

なお、インスタンスは、今回はFargateを選択しているため表示されませんでした。(EC2を選択している場合には表示されるようです)

表示の手軽さだけでなく、網羅的なメトリクスを表示できる環境を手軽に構築できるのが大きなメリットと思いました。

(今回は手順は割愛していますが、)クラスター新規作成もしくは既存クラスター更新でオブザーバビリティ強化を有効化するだけで設定できます。 また、AWSサービスで完結してオブザーバビリティを始められるのも、手軽さを感じられるポイントとして大きいです。

②タスク・コンテナの粒度のメトリクスの充実

画面右の「関連するものを詳しく見る」を選択してください。

すると、トポロジーマップとメトリクスタブが表示されます。

メトリクスタブの末尾のECS/ContainerInsights にて「この名前空間のすべてのメトリクスを表示」を選択すると、表示可能なメトリクス一覧が表示されます。

試しに、オブザーバビリティ強化されたコンテナのメトリクスを確認してみようと思います。 すると以下のようなメトリクス名一覧が表示され、以下のように表示することができました。

このようにコンテナ単位で詳細なメトリクスを確認できることが、今回のアップデートで一番インパクトがあると個人的に思いました。

例えばECSのよくある構成で、アプリケーションコンテナに加えて、ログやメトリクスのコンテナ(サイドカー)が1サービス上に配置されていることがあると思います。 この時、「アプリケーションはリソースを有効活用できているか知りたいが、このメトリクスは正確だろうか?それともサイドカーの値で平均されてしまっているのだろうか?」と、悩んでしまった経験が私はありました。

上記のような分析や、インシデント発生時など、任意のコンテナに対してメトリクスやログを把握したいケースで、オブザーバビリティの強化は大きな効果を発揮すると思います。

またメトリクスだけでなく、詳細なログやトレースを確認したい場合には、ページ末尾の「リソースのパフォーマンス」にて確認したいリソースを選択することができます。

既存・新規での料金の比較

Container Insightsを利用する際には、CloudWatchの基本的な課金体系に基づいて、追加のコストが発生します。

ここでポイントとなるのが、既存と新規で扱われるメトリクス数の違いです。

料金ページを確認すると、既に「Example 12 - Container Insights for Amazon ECS (with & without enhanced observability)」として料金例が公開されています。 aws.amazon.com

料金ページを参考に、Fargate起動タイプを想定した場合を想定して、それぞれの設定における1要素当たりのメトリクス数をまとめると、以下表のようになります。

クラスター サービス タスクファミリー タスク コンテナ 合計メトリクス数
without enhanced(既存) 13 15 - 10 - 38
with enhanced(新規) 29 31 26 26 26 138

思ったよりも大きい差ですね…

それでは更に、料金ページのExample 12の価格例を参考に、具体的なリソース数を当てはめると、料金はそれぞれ以下となります。 (クラスター:1、サービス:5、タスクファミリー:10、タスク:20、コンテナ:50 とします。)

without enhanced(既存) = 20.16 USD (= 13×1 + 15×5 + 0 + 10×20 + 0) × 0.07

with enhanced(新規) = 158.48 USD (= 29×1 + 31×5 + 26×10 + 26×20 + 26×50) × 0.07

上記の試算結果では大きな金額差が生じましたが、ここで以下の注意点があります。

  • リソース数(特にタスクファミリー数やコンテナ数)によって料金差は比例するため、構成次第で料金差は変動する
  • 1要素当たりのメトリクス数は必ずしも、決まった数にならない可能性がある。
    今回の検証では、タスクのメトリクス数は13(26の半分)となり、想定よりも少ない値となりました。(これは検証用の簡易的なクラスターで試したことが要因かもしれないため、今後より詳細確認が必要なポイントになります)

上記の注意点を踏まえつつ、各プロジェクトの構成や要求に応じて、コストと効果のバランスを踏まえてContainer Insightsのオブザーバビリティ強化を選択することがオススメです。

まとめ

re:Invent 2024で発表された、Container InsightsでのECSのオブザーバビリティ強化について、機能やコストを中心にご紹介しました。

  • ドリルダウン/ドリルアップ機能:クラスターからコンテナまでの粒度でメトリクスを確認できるようになりました。
  • 詳細なメトリクス:タスク・コンテナレベルの詳細なメトリクスが利用可能になりました。
  • コスト:新機能の導入により、メトリクス数が増加し、コストも上がります。プロジェクトの構成や要求に応じて、コストと効果のバランスを考慮して導入を検討してください。

より詳細かつ手軽に、ECSでコンテナ運用が出来るようになったので、プロジェクトの構成を踏まえて料金を試算しながら、オブザーバビリティの強化を導入していきましょう!