AWS Cloud WatchでEC2のCPU使用率が0%と表示される

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

こんにちは!技術三課の三木です。

新型肺炎対策としてリモートワーク(在宅勤務)をするようになりました。陽のささぬマンションの1階に住んでいるせいか、部屋が1日中寒いことに悲しみを覚えています。春が待ち遠しいです。

さて、今日はAmazon Cloud Watch(以下Cloud Watch)で、EC2(Nitro系)のCPU利用率が0%になってしまう現象について記載します。

この記事の内容を三行でまとめると

  • CloudWatchのメトリクスで、EC2のCPU使用率(CPUUtilization)が0%となることがある
  • Nitroベースのインスタンスのメトリクス値は常に整数で取得される

  • 上記仕様によって、CPU利用率が0.23%など一定値を下回っている場合は、0%と表示される

Windows ServerのCPU利用率(CPUUtilization)が0%と表示される(Cloud Watch)

何が起きたか

2つのEC2インスタンスは、どちらも同じAMI(Windows Server 2016)から、同じ日に作成したものです。

しかし、片方のインスタンスだけCPU Utilizationが0%の時間がある状態です。

またCPU負荷がかかった際は出力されており、全くデータが取得出来てない訳でもありませんでした。

加えて、CPU Utilization以外のメトリクスは取得出来ています。

画像は同時刻のNetworkInメトリクスですが、こちらは常に数KBを示していました。

何が原因か

Cloud Watchの公式ドキュメントに以下の記載がありました。

Nitro ベースのインスタンスのメトリクス値は常に整数 (0 と正の整数) で、Xen ベースのインスタンスの値は小数をサポートしています。したがってNitro ベースインスタンスでインスタンスの CPU 使用率が低い場合は、0 に切り下げられて表示される場合があります。 『インスタンスの利用可能な CloudWatch メトリクスのリスト表示』

今回利用しているr5.largeはNitroベースのインスタンスであるためこれに該当する、というのが答えでした。

試しにメトリクスを「グラフ化したメトリクス > 統計」を「最大」にして各値を見てみると、確かにすべて整数値であることが分かります。

まとめ

Nitroベースのインスタンスはそもそもの仕様が異なることが多いので、EC2周りで「おかしいぞ?」となった際は気を付けてみることをおすすめします。

なお、Nitroベースのインスタンスは以下にまとめられています。

『AWS Docs - Amazon EC2 > インスタンスタイプ』

参考になれば幸いです。