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

2017/12/27 藤生怜史
Share on Facebook0Tweet about this on TwitterShare on Google+0Share on LinkedIn0Share on Tumblr0
CloudWatch-320x320

はじめに

ハマった時に検索したけどあまり情報がなく、他にも困っている人がいると思い解決策を書いておく。

経緯

運用中の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/*
Share on Facebook0Tweet about this on TwitterShare on Google+0Share on LinkedIn0Share on Tumblr0