higehikiのブログ

iPhoneアプリ「ログ雀」の中の人です。

EC2 ( CentOS ) をCloudWatchで監視する

デフォルトのCloudWatchで監視できる項目は以下。

  • CPU Utilization(CPU使用率)
  • Disk Reads(ディスク読み込み状況)
  • Disk Writes(ディスク書き込み状況)
  • Network In,Out(ネットワーク状況)
  • Status Check Failed(インスタンスのステータスチェック失敗)

http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/ec2-metricscollected.html#ec2-metrics

上記項目であれば何の苦労もなく、CLIからでもGUIからでも設定するだけで監視が開始できます。

面倒なのは、CustomMetricsを使用する場合です。
Custom Metrics を使用すると、好きな項目を自由に設定して、結果をCloudWatchに送信できます。
cronで一定時間置きにCloudWatchに送信することで、カスタムメトリクスを監視対象とすることができます!
f:id:higehiki:20140421171749p:plain

でも1個1個手で書くのは大変…そこで。
Amazonさんの優しさ100%スクリプト Amazon CloudWatch Monitoring Scripts for Linux ってのが公式で公開されています。
http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/mon-scripts-perl.html
こいつは、32bitだろうが64bitだろうが、AmazonLinuxはもちろん、Redhat, Ubuntu, SUSE Linuxまで動く perlスクリプトです。
すげーひゃっほーひゃっほー。

このスクリプトで提供される項目は以下。

  • MemoryUtilization
  • MemoryUsed
  • MemoryAvailable
  • SwapUtilization
  • SwapUsed
  • DiskSpaceUtilization
  • DiskSpaceUsed
  • DiskSpaceAvailable


Amazon CloudWatch Monitoring Scripts for LinuxCentOS で動かすまでの手順は続きから。

perl 実行環境の準備

# yum -y install perl-CPAN gcc perl-libwww-perl *YAML* openssl-devel
# perl -MCPAN -e shell
cpan[1]> install LWP
cpan[2]> install Crypt::SSLeay
 すべて yes

Amazon CloudWatch Monitoring Scripts for Linux 設定

$ mkdir /home/ec2-user/bin
$ cd /home/ec2-user/bin
$ wget http://ec2-downloads.s3.amazonaws.com/cloudwatch-samples/CloudWatchMonitoringScripts-v1.1.0.zip
$ unzip CloudWatchMonitoringScripts-v1.1.0.zip
$ rm CloudWatchMonitoringScripts-v1.1.0.zip
$ cd aws-scripts-mon
$ vi awscreds.conf
AWSAccessKeyId=************
AWSSecretKey=***********************
$ chmod 600 awscreds.conf

Amazon CloudWatch Monitoring Scripts for Linux 動作テスト

$ /home/ec2-user/bin/aws-scripts-mon/mon-put-instance-data.pl --mem-util --mem-used --mem-avail --verify

Amazon CloudWatch Monitoring Scripts for Linux cronセット

*/5 * * * * cd /home/ec2-user/bin/aws-scripts-mon; /usr/bin/perl ./mon-put-instance-data.pl --mem-util --mem-used --mem-avail --disk-space-avail --disk-path=/ --aws-credential-file=/home/ec2-user/bin/aws-scripts-mon/awscreds.conf --from-cron


#1 perl を cronで動かす場合、PATHが通らないでハマることが多かったので注意です。
#2 --aws-credential-fileオプションで keyを渡してあげないと動きません。でもエラーも吐きません。
#3 --from-cronオプションを付けると標準出力がOFFになります。

その他、オプションについては下記参照
http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/mon-scripts-perl.html


CloudWatchの設定は以下のサイトに載ってました!
http://dev.classmethod.jp/cloud/cloudwatch-custom-metrics-vmstat-free-uptime/
http://d.hatena.ne.jp/hiratake55/20130127/1359301757
http://moomindani.wordpress.com/2014/04/07/amazon-cloudwatch-monitoring-scripts-for-linux/


以上の手順でCloudWatchで、メモリやディスクの監視が可能となりました。

CloudWatchでhttpdプロセスを監視する - higehikiのブログ についても興味があればどうぞ。


まぁただ見ての通り、楽じゃないです。
僕は間違いなくZabbix入れます。

番外編 autoscaleインスタンスで custom metricsをやってみる

オートスケールに設定しているAMIに上記手順の構築を行っておけばOK。
cron セットする際に、オートスケールとしての監視値だけが必要なのであれば、オプションで設定できる。

*/5 * * * * cd /home/ec2-user/bin/aws-scripts-mon; /usr/bin/perl ./mon-put-instance-data.pl --mem-util --mem-used --mem-avail --disk-space-avail --disk-path=/ --aws-credential-file=/home/ec2-user/bin/aws-scripts-mon/awscreds.conf --from-cron --auto-scaling=only