AWS CloudWatchのカスタムメトリクスでAWS EC2インスタンスのディスク使用量を監視する

健康管理とステータス管理

皆さんこんにちは、鈴木です。
今シーズンは自宅では暖房を使わないぞと意気込んでいましたが、室内で手がかじかむので使うことにしました。
暖房はうまく使わないと暑くなりすぎて体調を崩してしまいます。
体調管理は重要ですが、我々が普段使っているシステムの体調もきちんとチェックしないといけません。

マーケットエンタープライズで開発しているシステムはほぼ全てAmazon Web Service(AWS)上で活躍しています。
日々の業務を適切に行うにはシステムのステータスチェックが不可欠です。
今回はAWS EC2のインスタンスのステータスチェックの話です。

AWS CloudWatchによるAWS EC2のステータスチェック

EC2インスタンスのステータスをチェックする方法の1つにAWS CloudWatchがあります。
CPU利用率やネットワークの入出力のバイト数などを簡単にチェックできます。

しかし、簡単にチェックできないものもあります。
その中の1つにディスク使用量があります。
例えば、EC2インスタンス内で動かすアプリケーションにログを出力させる、という状況を考えます。
適切にログローテーションすればディスクを使い切るという事態は生じませんが、
設定ミスや何らかのトラブルでローテーションに失敗するかもしれません。
ディスク使用量をチェックすれば使用量が漸増傾向にあることや容量が少なってきていることがわかり、必要な対策を打てます。
このようなアプリケーション独自のメトリクスをカスタムメトリクスと呼びます。

今回はPythonでカスタムメトリクスとしてディスク使用量の取得し、カスタムメトリクスをCloudWatchへ送信することまで行います。

ディスク使用量を取得する

まずはディスク使用量を取得します。
そのためには、インスタンス上でファイルシステムの統計値に関するシステムコールstatvfsを叩く必要があります。
Pythonのosモジュールのos.statvfs()メソッドを使えば簡単にファイルシステムの統計値statvfsを得ることができます。
その結果からディスクの全容量、使用量、使用率を求めることができます。

CloudWatchへ送信

CloudWatchへのアクセスはboto3を使えば簡単にできます。
まずCloudWatchクライアントを作成し、必要な情報を送るだけです。

スクリプトの全体像

以上の結果をまとめると次のスクリプトになります。
このスクリプトをcronで定期的に実行するだけです。

最後に

EC2のインスタンスのステータスチェックのためにCloudWatchのカスタムメトリクスを利用して、カスタムメトリクスの取得・送信をPythonで行いました。このように簡単にカスタムメトリクスの取得・送信を行うことができますが、カスタムメトリクスの個数に応じて料金が発生することに注意しましょう。むしろ、簡単に作成できる分、何をチェックすべきなのかを精査する方が重要です。