AWSは、どのサービスも高い高可用性を誇っており、オンプレ環境とは比較にならないほど運用に手間がかからない。
しかしいくら高い可用性を誇るAWSと言えど、時には物理障害やAWSのVMホストなどの障害に遭ってしまうことはある。
特にRAMメモリを使用したサービスであるElastiCacheは、物理障害が比較的発生しやすいサービスである。
しかし、EC2などと違ってCloudWatchで死活監視を行う仕組みやMetricsは、デフォルトでは用意されていない。
多くの場合は自動復旧するが、障害解析などの目的でElastiCacheに障害が発生したことを検知したい場合がある。
そこで、今回はElastiCache(Redis)のService downを検知する方法を紹介する。
必要なもの
- AWS CLI(ElastiCacheおよびCloudWatchにアクセスできる権限が付与されていること)
- redis-cli
Source code
check-redis.sh
# !/bin/bash
export LANG=C
FAIL_COUNT=0
NODES=(`aws elasticache describe-cache-clusters | grep **CLUSTER NAME** | awk '{print $4}'`)
for NODE in ${NODES[*]}
do
HOST=$NODE.abcd12.0001.apne1.cache.amazonaws.com
redis-cli -h $HOST ping 2 >/dev/null 2>&1
if [ $? -ne 0 ]
then
FAIL_COUNT=`expr $FAIL_COUNT + 1`
logger -p 3 "ElastiCache connection failed. Host: $HOST"
fi
done
aws cloudwatch put-metric-data --namespace "ElastiCache" --value $FAIL_COUNT --metric-name 'Unhealthy node count' --dimensions "Cluster=**CLUSTER NAME**" --unit "Count"
**CLUSTER NAME**やHOST変数のエンドポイントは、各自の環境に合わせて読み替えること。
設定方法
- 上記のScriptを任意の場所(
/usr/local/bin/など)に配置する。 - 配置したScriptをCron実行
* * * * * /usr/local/bin/check-redis >/dev/null 2>&1
これで、ElastiCacheのノードがダウンした場合に、CloudWatchによって検知できるようになる。