AWSのAMIから作ったEC2インスタンスの情報がCloudWatchで取れなくてハマった話。
2017.12.27

はじめに
ハマった時に検索したけどあまり情報がなく、他にも困っている人がいると思い解決策を書いておく。
経緯
運用中のEC2インスタンスと同じ状態の新規インスタンスを作成するため、AMIを作成して、EC2インスタンスを新たに作成した。
作成はスムーズに完了したが、作成後にCloudWatchを見るといつまでたっても特定のデータが連携されなくて調査した。
まず、今回データが取得できなかったのは以下の2項目
- DiskSpaceUtilization
- MemoryUtilization
上記の2つはEC2を立ち上げただけでは、データを取ることができないので、「mon-scripts」を利用して、情報を取得する必要がある。
もともと、コピー元のインスタンスにはCron設定していたためなんら問題はないと思い込んでいた。
実際インスタンスにログインして、スクリプトを実行すると
[ec2-user@xxx.xxx.xxx.xxx ~]$ /home/ac2-user/aws-scripts-mon/mon-put-instance-data.pl --mem-util --mem-used --disk-space-util --disk-path=/ Successfully reported metrics to CloudWatch.
のように処理が成功したことがメッセージからわかる。
ここで疑いだしたのが、そもそも送っているデータや送信先がどうなっているかということ。
そして各設定などを読み直してて最終的に行き着いたのがこちら
CloudWatchClient.pm
# # Obtains EC2 instance id from meta data. # sub get_instance_id { if (!$instance_id) { $instance_id = get_meta_data('/instance-id', USE_CACHE); } return $instance_id; }
??????
$instance_id = get_meta_data('/instance-id', USE_CACHE);
そう、キャッシュを読んでいるのです。
そして、よくよくAWSのドキュメントを読んで見ると、一番下に「トラブルシューティング」としての記載が書いてあった。
結局データ自体は送信できていたけど、インスタンスIDがキャッシュされて違うインスタンスIDでCloudWatchに連携されていたため、正しく確認できなかったということでした。
解決策
キャッシュを削除すると正常に現在のインスタンスIDが取得できる様になった。
rm -rf /var/tmp/aws-mon/*
CONTACT
お問い合わせ
あなたの「想い」に挑戦します。
どうぞお気軽にお問い合わせください。
受付時間:平日9:00〜18:00 日・祝日・弊社指定休業日は除く
