CentOS6.6にCloudWatchを設定する。

CloudWatchデフォルトで監視できる項目は、CPU使用率、ネットワーク帯域などOSに依存しない項目のみとなっていて、Memory、DISK、SWAP、プロセスなどOSに依存する項目は、インスタンスにCloudWatchCommandLineTool / CloudWatchモニタリングスクリプトをインストールしてメトリクスを取得する必要があります。

CloudWatchCommandLineToolのインストール

CloudWatchCommandLineToolの前提としてJavaがインストールされていることを確認します。 インストールディレクトリは/usr/local/srcとしています。

# /usr/java/latest/bin/java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)

CloudWatchCommandLineTool SDKをダウンロードする。

# cd /usr/local/src
# curl -O curl -O http://ec2-downloads.s3.amazonaws.com/CloudWatch-2010-08-01.zip
# unzip CloudWatch-2010-08-01.zip

CloudWatchモニタリングスクリプトのインストール

依存パッケージをインストールします。

# yum -y install perl-DateTime perl-Sys-Syslog perl-LWP-Protocol-https perl-Digest-SHA
# yum -y install perl-CPAN perl-libwww-perl openssl-devel
# yum -y install libyaml

足りないモジュールをCPANを使ってインストールする。色々聞かれますが、とりあえずすべてyesで。

# perl -MCPAN -e shell
cpan[1]> install Bundle::LWP6 LWP
cpan[2]> install YAML
cpan[3]> install Crypt::SSLeay

CloudWatchモニタリングスクリプトをインストールします。

# cd /usr/local/src/CloudWatch-1.0.20.0/
# curl -O http://aws-cloudwatch.s3.amazonaws.com/downloads/CloudWatchMonitoringScripts-1.2.1.zip
# unzip ./CloudWatchMonitoringScripts-1.2.1.zip
Archive:  ./CloudWatchMonitoringScripts-1.2.1.zip
 extracting: aws-scripts-mon/awscreds.template
  inflating: aws-scripts-mon/AwsSignatureV4.pm
  inflating: aws-scripts-mon/CloudWatchClient.pm
  inflating: aws-scripts-mon/LICENSE.txt
  inflating: aws-scripts-mon/mon-get-instance-stats.pl
  inflating: aws-scripts-mon/mon-put-instance-data.pl
  inflating: aws-scripts-mon/NOTICE.txt

/usr/local/src/CloudWatch-1.0.20.0/aws-scripts-monにインストールされました。

Aws Credentialを設定する

AWS CLIで利用するクレデンシャルを設定します。インスタンスにiamを設定している場合は、そちらの方法を優先させます。

クレデンシャル記述のテンプレートを確認。CLIツールと同じですね。

# cat CloudWatch-1.0.20.0/credential-file-path.template
AWSAccessKeyId=<Write your AWS access ID>
AWSSecretKey=<Write your AWS secret key>

クレデンシャルを設定します。

# mkdir -p /etc/aws
# cp -p  ./CloudWatch-1.0.20.0/credential-file-path.template /etc/aws/awscreds.conf
# vim /etc/aws/awscreds.conf

監視スクリプトを設置する

プロセスの存在性、リソースをClowdWatchに登録するスクリプトを設置します。

# vim /usr/bin/check_cw_stats
----
#!/bin/bash
# Parameter
    export AWS_CLOUDWATCH_HOME=/usr/local/src/CloudWatch-1.0.20.0
    export AWS_CREDENTIAL_FILE=/etc/aws/awscreds.conf
    export AWS_MONITOR_PROCESSLIST=/etc/aws/mon_pro_list
    export AWS_CLOUDWATCH_URL=https://monitoring.amazonaws.com
    export PATH=$AWS_CLOUDWATCH_HOME/bin:$PATH
    export JAVA_HOME=/usr/java/default
    export INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)
    InstanceId=$INSTANCE_ID

### Memory & Disk util Check
 perl ${AWS_CLOUDWATCH_HOME}/aws-scripts-mon/mon-put-instance-data.pl --mem-util --disk-space-util --disk-path=/ --aws-credential-file=${AWS_CREDENTIAL_FILE}

  if [ $? != 0 ]; then
     logger -p user.err -t "batch[${$}][Error]" "${0##*/} Memory & Disk util Check execution failed."
  fi

### Process Check
 while read line
  do
     PRO_NAME=`echo $line |awk -F"," '{print $1}'`
     PRO_GREP_STRINGS=`echo $line |awk -F"," '{print $2}'`
     PRO_COUNT=`ps ax| grep "${PRO_GREP_STRINGS}" | grep -v grep | wc -l`
     mon-put-data --metric-name "${PRO_NAME}" --namespace "System/Linux" --dimensions "InstanceId=$InstanceId" --value "$PRO_COUNT" --unit "Count" --region ap-northeast-1
  done < ${AWS_MONITOR_PROCESSLIST}
---

監視対象のプロセスを定義します。

vim /etc/aws/mon_pro_list
----
crond,crond
sshd,/usr/sbin/ssh
httpd,/usr/sbin/httpd
postfix,/usr/libexec/postfix/master

スクリプトに権限設定する。

# chmod +x /usr/bin/check_cw_stats

スクリプトを実行してみる。

# /usr/bin/check_cw_stats

Successfully reported metrics to CloudWatch. Reference Id: fba01c9f-e4d1-11e5-843f-87deeeda5ed9

成功。ClowdWatchコンソールから登録されていることを確認する。

f:id:youshjp:20160308111253p:plain

最後にスクリプトをcronで設定して、定期的にCloudWatchに登録するようにしたらおしまい。

# crontab -e
----
*/5 * * * * /usr/bin/check_cw_stats

それでは。m(__)m