CloudWatchでEC2上のプロセス監視

以下の記事のカスタムメトリクス導入により、メモリ使用率やディスク使用率などをCloudWatchで監視する設定を紹介しました。

CloudWatch AgentでEC2のメトリクスとログの収集

EC2(Linux)上のプロセス数取得処理

EC2(Linux)上のプロセスの監視の設定もしたいと思います。

多くの記事に紹介されている「mon-put-data」などの「Amazon CloudWatch Command Line Interface」はサポートが終了しているようなので、「AWS CLI CloudWatch Metrics API 」の「put-metric-data」で実装することにします。

EC2に付与するロールは、上記記事で作成した「CloudWatch Agent を実行しメトリックスを取得する IAM ロール」で大丈夫です。

プロセス監視は、psの結果から対象プロセス名の行数をカウントしたものを監視することで実現します。この結果が、1個以上上がっていれば対象プロセスが上がっていると判断できます。

対象プロセス名の数をCloudWatchに登録するコマンドは以下になります。

aws cloudwatch put-metric-data --metric-name [メトリック] --namespace [ネームスペース] --dimensions [ディメンジョン] --value [対象プロセス名の数] --unit "Count" --region "ap-northeast-1"

監視対象プロセスは process-list.txt に以下のように記載していきます。(プロセスは必要に応じて追記)

httpd
postfix

以下のスクリプトで、監視プロセス一覧を読み込みプロセス数をカウントした結果をCloudWatchに登録します。

#!/bin/sh
CUR_DIR=/usr/local/bin
NAMESPACE="Ec2Process"
UNIT="Count"
REGION="ap-northeast-1"
HOST_NAME=`echo $HOSTNAME | cut -f1 -d.`
INSTANCE_ID=`curl -s http://169.254.169.254/latest/meta-data/instance-id`

#監視対象プロセスリスト
PROCESS_LIST=$CUR_DIR/process-list.txt

PUT_COMMAND="aws cloudwatch put-metric-data"
DIMENSIONS="InstanceName=$HOST_NAME,InstanceId=$INSTANCE_ID"

#監視対象プロセス毎にプロセス数をカウントしてCloudWatchに格納する
cat $PROCESS_LIST | sed '/^$/d' | grep -v '^#.*' | while read PROCESS
do
	COUNT=`ps aux | grep $PROCESS | grep -v grep | wc -l`
	echo $PROCESS:$COUNT
	$PUT_COMMAND --metric-name $PROCESS --namespace $NAMESPACE --dimensions $DIMENSIONS --value $COUNT --unit $UNIT --region $REGION
done

このシェルスクリプトを実行すると、CloudWatch上の「メトリクス」メニューで「Ec2Process」というカスタム名前空間ができ、その中に各種メトリクスが登録されています。

※ オンプレミスサーバーでもCentOS7では、上記シェルスクリプトのインスタンスID取得のところを省きディメンジョンをホスト名のみにすることで同様にカウント結果をCloudWatchに登録することが可能です。
CentOS6環境については以下を参照。

CentOS6 python2.6環境へのawscliのインストール

プロセス数の監視設定

上記シェルスクリプトをCRONに登録することで定期的にプロセスが上がっているかCloudWatchで監視することができるようになります。

/etc/crontab

# Put Metrics to CloudWatch
00-59/1 * * * * root /usr/local/bin/put-metric-data-process.sh >/dev/null 2>&1

ちなみに、カスタムメトリクスは1時間に1回以上のCloudWatchへの送信の単位で課金となるので、1時間に1回でも1分間隔でも金額は変わりません。

あとは、CloudWatchで当該プロセスが1未満になっていれば警告になるアラートを作成します。

参考にさせていただいた記事:

以下は、ディメンジョンやメトリクス名についての解説が判り易いです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です