指定したある一定の期間の間にステータスチェックが失敗しているインスタンスの一覧取得

2015.07.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

多数のEC2インスタンスを稼働させている場合、インスタンスのステータスチェックが失敗しているインスタンスを一覧で取得したいというケースが少ないながらもあるかもしれません。

今回はその一覧を取得するスクリプトをご紹介します。

スクリプト内容と実行結果

スクリプトは弊社エンジニアの佐瀬 幹哉さんが作成してくださいました!

動作のポイントは以下になります。

  • aws ec2 describe-instances でインスタンス ID の一覧を取得する
  • 取得したすべてのインスタンスIDをそれぞれ dimensions に指定して aws cloudwatch get-metric-statistics を実行する
  • aws cloudwatch get-metric-statistics で取得したデータポイントにて、Statusが"0.0"ではないデータポイントがあれば指定期間内でステータスチェックに失敗しているため、インスタンスIDを出力する
#!/bin/bash

ME=$(basename $0)
if [ -z "$2" ]; then
echo "Usage: $ME start-time end-time"
exit 1
fi
START_TIME=$1
END_TIME=$2

INSTANCE_IDS=$(aws ec2 describe-instances --query Reservations[].Instances[].[InstanceId] --output text)
for instance_id in $INSTANCE_IDS; do
# 配列化
STATUS=($(aws cloudwatch get-metric-statistics \
--namespace AWS/EC2 \
--metric-name StatusCheckFailed \
--start-time ${START_TIME} \
--end-time ${END_TIME} \
--period 60 \
--statistics Average \
--dimension Name=InstanceId,Value=${instance_id} \
--query Datapoints[].Average \
--output text))
for s in ${STATUS[*]}; do
if [ $s != "0.0" ]; then
echo $instance_id
break
fi
done
done

スクリプト実行結果

スクリプトの実行結果を確認するため、2つのインスタンスのステータスを失敗にしています。 インスタンスID i-fba50d0e、i-a56dca50 がステータスチェックに失敗していることがわかります。

StatusCheckFailed-List001

StatusCheckFailed-List002

スクリプトを実行します。

$ ./status-check-failed-list.sh 2015-07-06T22:00:00 2015-07-07T22:00:00
i-fba50d0e
i-a56dca50
$

ステータスチェックが失敗しているインスタンスIDのみ出力されました!

なお、引数に開始時間、終了時間を指定しないとエラーになります。

$ ./status-check-failed-list.sh
Usage: status-check-failed-list.sh start-time end-time
$

まとめ

ステータスチェックが失敗しているインスタンスIDの一覧を取得する方法のご紹介でした。

ステータスチェックが失敗しているとEC2インスタンスでなんらかの問題が発生している可能性が考えられますので、本スクリプトがインスタンス管理のお役に立ちましたら幸いです。