AWS ECS を使ったコンテナ監視戦略~標準メトリクス・Container Insights・強化オブザーバビリティの違い~

記事タイトルとURLをコピーする

みなさんこんにちは。マネージドサービス部MSS課の塩野(正)です。

突然ですがコンテナって使われてますか?コンテナといってもEC2にdockerなどのコンテナエンジンをインストールして動かすパターンやAWS ECS Fargateのようなマネージドで動かすパターンまで色々あると思います。もちろん実際の運用環境にそれらが乗った場合にそれぞれの環境で見るべきポイントが違ってきたりします。そういえばAWS ECSを監視する際に標準CloudWatchメトリクス、Container Insights、そして強化オブザーバビリティ(Enhanced Observability)という3つの選択肢があって、個人的にそれぞれどう使い分ければいいんだっけ?となりましたので、今回はそのあたりをまとめてみました。

目次

概要

AWS ECSでコンテナを運用していると、「どのレベルまで監視すれば良いんだろう?」という悩みに必ずと言っていいほど直面しますよね。AWSには標準CloudWatchメトリクス、Container Insights、そして強化オブザーバビリティ(Enhanced Observability)という3つの選択肢があるのですが、それぞれで監視の詳しさやコスト、運用の手間が結構違ってくるんです。

この記事では、これら3つの監視方法がそれぞれどんな特徴を持っているのか、コスト面ではどう違うのか、そして実際の現場ではどんな場面でどれを選べばよいのかを、できるだけ分かりやすく整理してみました。皆さんがシステムに最適な監視戦略を見つけるお手伝いができれば嬉しいです。

3つの監視手法の基本的な違い

標準ECS CloudWatchメトリクス ~まずはここから始めよう~

標準ECSメトリクスは、ECSサービスによって自動的に提供される基本的な監視機能です。基本的な監視機能ですが、クラスターやサービスレベルでのリソース使用状況をしっかりと把握できます。

監視できるのは、CPU使用率、メモリ使用率、CPU予約率、メモリ予約率といった、システム運用で本当に大切な基本メトリクスに絞られています。データは1分間隔で収集されて、AWS/ECSネームスペースに保存される仕組みです。シンプルなWebアプリケーションや開発環境なら、この標準メトリクスだけでも必要十分な監視ができます。

Container Insights ~もう少し詳しく見てみたい場合~

Container Insightsを有効にすると、標準メトリクスに加えて、タスクレベルでのより詳しい監視ができるようになります。特に便利なのは、ネットワークトラフィック、ストレージI/O、タスクの起動・停止の様子など、マイクロサービス環境で「これが分かったらいいのに」と思っていた詳細な情報が手に入ることです。標準ECS CloudWatchメトリクスに比べると、追加で生成されるカスタムメトリクスのコストが追加料金となりますので、メトリクス数が増えるとその分コストも上がってしまう点は考慮しておく必要があります。

強化オブザーバビリティ ~最新の詳細監視機能~

2024年11月のAWS re:Inventで発表されたばかりの強化オブザーバビリティは、これまでで一番詳しいコンテナレベルの監視を可能にしてくれます。今まで「きっとこのコンテナが重いんだろうな」と推測するしかなかった「タスク内のどのコンテナがリソースを食っているのか」や「タスク間でのリソース使用量の偏り具合」などが、はっきりと見えるようになります。この機能が本当に力を発揮するのは、複雑なマルチコンテナアプリケーションや、絶対に止められないミッションクリティカルなシステムでしょう。

メトリクス比較表

以下の表は、各監視レベルで取得可能なメトリクスの詳細な比較です。運用計画を立てる際の参考としてご活用ください。

メトリクス名 標準ECS Container Insights 強化オブザーバビリティ 備考
基本リソースメトリクス
CPUUtilization CPU使用率(%)
CPUReservation CPU予約率(%)
MemoryUtilization メモリ使用率(%)
MemoryReservation メモリ予約率(%)
EBSFilesystemUtilization EBSファイルシステム使用率(%)※1
Container Insights追加メトリクス
ContainerInstanceCount コンテナインスタンス数
DeploymentCount サービスのデプロイ数
DesiredTaskCount 希望タスク数
RunningTaskCount 実行中タスク数
PendingTaskCount 保留中タスク数
ServiceCount サービス数
TaskCount タスク総数
TaskSetCount タスクセット数
RestartCount コンテナ再起動回数
NetworkRxBytes ネットワーク受信バイト数
NetworkTxBytes ネットワーク送信バイト数
StorageReadBytes ストレージ読み取りバイト数
StorageWriteBytes ストレージ書き込みバイト数
EphemeralStorageReserved 一時ストレージ予約量(GB)
EphemeralStorageUtilized 一時ストレージ使用量(GB)
強化オブザーバビリティ専用メトリクス
ContainerCpuUtilized コンテナCPU使用量
ContainerCpuReserved コンテナCPU予約量
ContainerCpuUtilization コンテナCPU使用率(%)
ContainerMemoryUtilized コンテナメモリ使用量(MB)
ContainerMemoryReserved コンテナメモリ予約量(MB)
ContainerMemoryUtilization コンテナメモリ使用率(%)
ContainerNetworkRxBytes コンテナネットワーク受信バイト数
ContainerNetworkTxBytes コンテナネットワーク送信バイト数
ContainerStorageReadBytes コンテナストレージ読み取りバイト数
ContainerStorageWriteBytes コンテナストレージ書き込みバイト数
EBSFilesystemSize EBSファイルシステムの合計容量 (GB)※1
EBSFilesystemUtilized EBSファイルシステムの合計容量 (GB)※1
TaskCpuUtilization タスクCPU使用率(%)
TaskMemoryUtilization タスクメモリ使用率(%)
TaskEphemeralStorageUtilization タスク一時ストレージ使用率(%)

※1.ただしEBSボリュームがアタッチされているタスクの場合

どの場面でどの監視レベルを選ぶべきか

標準メトリクス ~こんな環境にぴったり~

標準メトリクスがおすすめなのは、システム構成がシンプルで「基本的なことが分かれば十分」という環境です。開発・検証環境や、シンプルなWebアプリ、静的コンテンツの配信システムなんかでは、余計な費用をかけずに必要な監視ができます。

それから、バッチ処理システムみたいに、構成がシンプルで「ネットワークの細かい分析まではいらないかな」という場合も、標準メトリクスで事足ります。CPU使用率やメモリ使用率といった基本的なリソース使用状況さえ見えていれば、基本的なキャパシティ管理では十分なケースが多いと思います。

Container Insights ~こんな時に検討してみて~

Container Insightsが本領を発揮するのは、マイクロサービスアーキテクチャを使っている環境や、サービス同士がよく通信するようなシステムです。API Gateway の下に複数のバックエンドサービスがぶら下がっているような構成や、データベースアクセスが多いアプリケーションでは、ネットワークトラフィックやストレージI/Oの詳細が見えると嬉しい時があります。

特にCI/CDパイプラインと組み合わせているシステムでは、デプロイがうまくいったかどうかや、タスクがちゃんと動いているかの管理が大事な指標になってきます。Container Insightsがあれば、こういった情報をしっかり把握できて、問題の早期発見や素早い対応ができるようになるでしょう。

CloudWatch Logsとカスタムメトリクスのデータ量が増えることによりその分コストも上がってしまうので、保存期間を調整したり、本当に必要なものだけに絞ったりして、上手にコスト管理していくことが大切です。

強化オブザーバビリティ ~本格的な監視が必要な時~

強化オブザーバビリティが一番力を発揮するのは、絶対に止められないミッションクリティカルなシステムや、アクセスが多いWebサービスです。決済システム、リアルタイム処理システム、機械学習の推論サービスなど、「ちょっとでも止まったら大変なことになる」レベルのシステムでは、コンテナ一つ一つまで詳しく分析できることが本当に重要になってきます。

この監視レベルになると、タスクの中でコンテナ同士がリソースを取り合っていないかとか、個々のコンテナがどんなパフォーマンスを出しているかまで分かるようになります。今まで「なんとなくここが重そう」と推測するしかなかった詳細なボトルネックの特定や、先回りしたキャパシティプランニングができるようになるので、高い可用性とパフォーマンスが求められる環境では、かけたコストに見合った効果が期待できるでしょう。

技術的制約と実装時の注意点

ネットワークメトリクス ~設定で気をつけたいポイント~

Container InsightsやContainer Insights強化オブザーバビリティでネットワークメトリクスを取得したい場合、ECSタスクのネットワークモード設定がちょっと重要になってきます。bridgeモードやawsvpcモードなら問題なくメトリクスが取得できるのですが、hostモードだと取得できないんです。

Fargateを使っている場合は自動的にawsvpcモードになるので特に心配はいりませんが、EC2起動タイプでhostモードを使っている既存のシステムがある場合は、ネットワークモードの変更を検討してみてもいいかもしれません。

プラットフォーム ~それぞれの特徴と制限~

Fargateを使っている場合、EphemeralStorageメトリクスはLinux platform version 1.4.0以降でないと使えないという制限があります。それから、インスタンスレベルのメトリクスは取得できないので、もしインフラレベルでもっと詳しく監視したいということであれば、EC2起動タイプを検討してみるのも一つの手です。

EC2起動タイプの場合は、インスタンスレベルのメトリクスを取得するのにCloudWatchエージェントの追加設定が必要になります。GPUを使っているワークロードでは、GPUインスタンスを使っている時だけGPUメトリクスが取得できる仕組みになっています。

まとめ

AWS ECSの監視戦略選択は、システムがどのくらい重要か、技術的にどんなことが必要か、そしてコストはどこまでかけられるかを総合的に考えて決めていくのがベストです。基本的な監視で事足りそうなら標準メトリクスから始めて、「ネットワークやストレージもちゃんと見たいな」となったらContainer Insights、「コンテナ一つ一つまで詳しく知りたい」という場合にContainer Insights強化オブザーバビリティに移行していく、という段階的なやり方が現実的だと思います。

大切なのは、いきなり大きく始めずに、小さな環境でまずはお試し(PoC)から始めて、実際に使ってみて分かったことを元に少しずつ機能を広げていくことです。それから、監視に求められることは時間が経つにつれて変わってくるものなので、定期的に「これで合っているかな?」と見直しを行って、システムの成長に合わせて調整し続けることが、うまくいくコツだと思います。

適切な監視戦略を選ぶことで、システムの安定性を高めながらコストも最適化するという、両方のいいとこ取りができるはずです。この記事で紹介した選び方の基準や設定方法を参考にして、皆さんの環境にぴったりの監視レベルを見つけてもらえればと思います。

◆ 塩野 正人
◆ マネージドサービス部 所属
◆ X(Twitter):@shioccii
◆ 過去記事はこちら

前職ではオンプレミスで仮想化基盤の構築や運用に従事。現在は運用部隊でNew Relicを使ってサービス改善に奮闘中。New Relic User Group運営。