AWS で EC2 インスタンスを監視する
以下の監視構成を構築する。
- 監視
- Instance監視
- Disk容量
- Service監視
- 通知
- メール通知
- SMSショートメール
- セルフヒーリング
- 自動再起動
目次
- インスタンス作成
- カスタムメトリクスの取得
- CloudWatchのアラーム設定
- 通知設定
- 再起動設定
インスタンス作成
検証用にインスタンスを作成する。
AmazonLinux
でEC2インスタンスを起動 > httpdをinstall > port:80を許可する > welcomeページの表示を確認する。
完了。
カスタムメトリクスの取得
以下の項目はCloudWatchのデフォルトのメトリクスでは監視できないので、カスタムメトリクスとしてデータを取得する。
- Disk容量
- Service監視
カスタムメトリクスを取得し、CloudWatchに送信するスクリプトを作成する。
まずはcliで操作するためのアカウントと資格情報を取得する。
カスタムメトリクス用のアカウント作成
IAM > ユーザー > ユーザーを追加
ユーザー名(今回はCustomMetrics
とする)とアクセスの種類(プログラムによるアクセス
)を入力する。
CustomMetrics
ユーザーに必要な権限を付与する。
今回は 既存のポリシーを直接アタッチ
から CloudWatchFullAccess
を付与する。
※ 必要に応じて最小の権限を付与することを推奨します。
必要に応じてタグを追加する(今回は付与しない)。
内容を確認し、問題がなければユーザーを作成する。
CSVをダウンロードし、アクセスキーIDとシークレットアクセスキーを控えておく。
スクリプトから読み込むためにファイルに保存しておく。
# 監視スクリプトの領域を作成
mkdir -p ~/Bashdir/customMetrics
cd ~/Bashdir/customMetrics
# アクセスキー情報をファイルに保存する
echo "AWSAccessKeyId=xxxxxxxxxxxxxxxxxxxx" > credential
echo "AWSSecretKey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" >> credential
アカウント作成およびアクセスキー情報の取得完了。
Disk容量監視設定
ディスクの使用率が既定値以内に収まっているか監視する。
参考
Amazon EC2 Linux インスタンスのメモリとディスクのメトリクスのモニタリング – Amazon Elastic Compute Cloud
準備
### root 実行 ###
sudo -i
# 必要モジュールインストール
yum install -y perl-Switch perl-DateTime perl-Sys-Syslog perl-LWP-Protocol-https perl-Digest-SHA
exit
### ec2-user 実行 ###
# 監視ツールを取得
cd ~/Bashdir/customMetrics
wget http://aws-cloudwatch.s3.amazonaws.com/downloads/CloudWatchMonitoringScripts-1.2.1.zip
unzip -q CloudWatchMonitoringScripts-1.2.1.zip
rm -f CloudWatchMonitoringScripts-1.2.1.zip
touch disk_check.sh
chmod +x disk_check.sh
vi disk_check.sh
ディスク容量をチェックするスクリプトを作成する。
#!/bin/bash
SCRIPT_DIR=/home/ec2-user/Bashdir/customMetrics/aws-scripts-mon
# --disk-path は監視対象のディスクの分だけ渡す
${SCRIPT_DIR}/mon-put-instance-data.pl --disk-space-util --disk-path=/ --disk-path=/data --aws-credential-file=/home/ec2-user/Bashdir/customMetrics/credential --from-cron
cronに登録
# 毎分実行する場合の設定
* * * * * /home/ec2-user/Bashdir/customMetrics/disk_check.sh 1>/dev/null
ディスク容量のカスタムメトリクスの準備が完了。
あとはこのメトリクスの内容に従ってアラームを設定する。
アラームの設定は後述
Service監視設定
サービスが稼働しているか監視する。
cd /home/ec2-user/Bashdir/customMetrics
touch service_check.sh
chmod +x service_check.sh
vi service_check.sh
#!/bin/bash
CUR_DIR=/home/ec2-user/Bashdir/customMetrics
export JAVA_HOME=/usr/lib/jvm/jre
export AWS_CLOUDWATCH_HOME=/opt/aws/apitools/mon
export EC2_REGION=ap-northeast-1
export AWS_CREDENTIAL_FILE=${CUR_DIR}/credential
InstanceId=`cat /var/tmp/aws-mon/instance-id`
# HTTP Healthcheck
URL=https://staging.pms-colon.jp/pms-cloud/Id001/show.action
WORD="<title>ログイン|Pearl Colon</title>"
COUNT=`curl $URL | grep "${WORD}" | wc -l`
echo $URL:$COUNT
/opt/aws/bin/mon-put-data --metric-name HTTP_SERVICE_CHECK --namespace "CustomMetrix" --dimensions "InstanceId=${InstanceId}" --value ${COUNT}
※ HTTPSのリクエストを送信しているため、セキュリティグループなどは合わせて修正する。
cronに登録
# 毎分実行する場合の設定
* * * * * /home/ec2-user/Bashdir/customMetrics/service_check.sh 1>/dev/null
CloudWatchのアラーム設定
CloudWatch > アラーム > アラームの作成 > メトリクスの選択
監視するメトリクスを選択する(今回はディスク容量)
統計を最大値
、条件を静的
,より大きい
,80
で設定する。
通知先を PMS_miracleave
に設定する。
必要に応じて再起動のEC2アクションを設定する
アラームに適切な名前を設定する。
内容を確認し、問題がなければ アラームの作成
ボタンでアラームを作成する。
通知設定
SNSでトピックとサブスクライブを設定する。
CloudWatchの作成時にサブスクライブが作成されているので、対象のメールアドレス来たメールからサブスクライブを承認する。
設定が完了したら通知が飛ぶかチェックするためにstress-ng
コマンドでCPU負荷をかけてみる。
$ yum install -y stress-ng
$
再起動設定
CloudWatchのEC2アクションに再起動を設定する。