こんにちは!技術三課の三木です。
新型肺炎対策としてリモートワーク(在宅勤務)をするようになりました。陽のささぬマンションの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 > インスタンスタイプ』
参考になれば幸いです。