はじめに
AWSのEC2インスタンスでディスク容量やメモリの使用率をCloudWatchで監視をする際に、ハマったポイントをご紹介したいと思います。
メモリとディスクのメトリクスモニタリング
EC2のインスタンスを作成するとCPU使用率などのモニタリングは最初からできるようになっており、その項目に対してCloudWatchでの監視もコンソールから直ぐに設定可能です。
ただ、メモリやディスク容量に関してはモニタリングされていないので、EC2インスタンス上で設定が必要になります。
設定方法は、AWSのサイトに詳しく記載されていますので、こちらを参照ください。いくつかのパッケージを環境に合わせて、インストールして、CloudWatchMonitoringScriptsをダウンロードし、/usr/localディレクトリ配下などに配置します。
あとは、下記のようにcronで定期実行されるように設定するだけです。(パーミッションには気をつけてくださいね。)
1 | */5 * * * * /usr/local/aws-scripts-mon/mon-put-instance-data.pl --mem-util --disk-space-util --disk-path=/ --from-cron |
ハマりポイント
上記の設定をしたEC2インスタンスを作成し、AMIを作ったとします。
その後、そのAMIから別のEC2インスタンを作成します、当然cronも設定済みなので新しいEC2インスタンスのメモリやディスク使用率もモニタリングできていると思いきやできていません!!
実はmon-put-instance-data.plは、CloudWatchにEC2インスタンスIDを送信するのですが、その際に毎回スクリプトの実行環境のEC2インスタンスIDを取得してから、送信するのではなく、一度インスタンスIDを取得するとファイルにキャッシュして、2回目以降はそのインスタンスIDを送信します。
そのため、AMIから作成するとキャッシュファイルが残っており、新しく作成されたEC2のインスタンスIDではなく、AMIのもととなったEC2のインスタンスIDを送信してしまうのです。
対応方法
対応方法は簡単です。単なるキャッシュですので、思い切って下記のファイルをrmで削除してしまいましょう。
1 | rm /var/tmp/aws-mon/instance-id |
さいごに
如何でしたでしょうか。ちょっとしたCloudWatchで監視をする際のちょっとしたハマりポイントを紹介させていただきました。
AWSはとても便利ですが、このようなちょっとしたことでつまずくこともありますので、参考にしていただければと思います。