目次

CloudWatchの標準のメトリクスでは監視項目が足りない

CloudWatch では、EC2 の CPU 使用率や RDS の各リソースなど、チェックしておきたい項目がいくつか標準で用意されています。

しかし、EC2 でいうと「メモリ使用率」や「ディスク使用率」は用意されていないので、別途、自分で作成して EC2 から CloudWatch へ通知しなければいけません。

一応、それを可能にする perl スクリプトは提供してくれているのですが、それをインストールして cron に定期実行される処理を定義しないと監視ができません。

それと同様に、EC2 のインスタンスの死活監視は標準で対応できるのですが、冒頭で説明した通り、RDS や ElastiCache(Redis)の死活監視は用意されていません。

それぞれ、CPU 使用率などのリソース項目はあるのですが、サービスが生きているかどうか、それを判断するメトリクスは用意されていないのです。

CloudWatchのカスタムメトリクスの作成

そこで、カスタムメトリクスを作成して、そこに RDS や ElastiCache(Redis) が生きているか死んでいるかの結果を送ってあげることにします。

CloudWatch のカスタムメトリクスに対して、値を送信する方法はいくつかありますが、CloudWatch への通知権限を持った IAM ユーザが既にあるのならそれを利用するのが早いです。

もちろん、厳密に権限を管理するのであれば、CloudWatch の通知用に別途 IAM ユーザを作成してもいいと思います。

ここでは、aws コマンド実行時に credentials に定義されているプロファイルを指定するようにします。

以前、「AWSのEC2にgoofysを入れてS3をマウントする」の設定をまとめた時に、S3 向けの権限を持ったユーザを aws configure でプロファイル指定せずに作成していました。

今回は、プロファイル指定して CloudWatch 用のユーザを作成します。

$ aws configure --profile cloudwatch_user

AWS Access Key ID [None]: [アクセスキー]
AWS Secret Access Key [None]: [シークレットキー]
Default region name [None]: ap-northeast-1 ※東京リージョン
Default output format [None]: 

プロファイルを作成しておけば、aws コマンドを呼び出すときに使用するプロファイルを指定することができます。

以下に簡易的な通知のシェルスクリプトを書いてみます。実際には、mysql の接続にパスワードは直接書かず、auth ファイルを作成し、--defaults-extra-file で指定して呼び出すなどしてください。

#!/bin/sh

FAIL_COUNT=0

CHECK=`mysqladmin -uxxxxx -pxxxxx -hxxxxx ping 2> /dev/null`

if [ $? = 1 ]; then
  FAIL_COUNT=1
fi

/usr/bin/aws cloudwatch --profile [プロファイル名] --region [リージョン] put-metric-data --metric-name [メトリクス名] --namespace [メトリクスの名前空間] --value ${FAIL_COUNT} --unit Count

Redis の場合は以下のコマンドで判定ができます。

FAIL_COUNT=0

CHECK=`redis-cli -h xxxxx ping 2> /dev/null`

if [ $? = 1 ]; then
  FAIL_COUNT=1
fi

/usr/bin/aws cloudwatch --profile [プロファイル名] --region [リージョン] put-metric-data --metric-name [メトリクス名] --namespace [メトリクスの名前空間] --value ${FAIL_COUNT} --unit Count

Tips記事一覧

新着記事一覧です。

関連記事一覧

「RDSやElastiCache(Redis)の死活監視をCloudWatchで管理」に関連した記事一覧です。