[AWS] CloudWatch で EC2 インスタンスを監視する

全般

記事作成から1年以上経過しています。
内容が古い可能性があります。

AWS で EC2 インスタンスを監視する

以下の監視構成を構築する。

  1. 監視
    • Instance監視
    • Disk容量
    • Service監視
  2. 通知
    • メール通知
    • SMSショートメール
  3. セルフヒーリング
    • 自動再起動

目次

  1. インスタンス作成
  2. カスタムメトリクスの取得
  3. CloudWatchのアラーム設定
  4. 通知設定
  5. 再起動設定

インスタンス作成

検証用にインスタンスを作成する。

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 > アラーム > アラームの作成 > メトリクスの選択

監視するメトリクスを選択する(今回はディスク容量)

b1837393.png

統計を最大値、条件を静的,より大きい,80 で設定する。

通知先を PMS_miracleave に設定する。

必要に応じて再起動のEC2アクションを設定する

アラームに適切な名前を設定する。

内容を確認し、問題がなければ アラームの作成 ボタンでアラームを作成する。


通知設定

SNSでトピックとサブスクライブを設定する。
CloudWatchの作成時にサブスクライブが作成されているので、対象のメールアドレス来たメールからサブスクライブを承認する。

設定が完了したら通知が飛ぶかチェックするためにstress-ngコマンドでCPU負荷をかけてみる。

$ yum install -y stress-ng
$

再起動設定

CloudWatchのEC2アクションに再起動を設定する。


カスタムメトリクス

EC2初期設定 – Qiita

コメント