EC2 ( CentOS ) をCloudWatchで監視する
デフォルトのCloudWatchで監視できる項目は以下。
- CPU Utilization(CPU使用率)
- Disk Reads(ディスク読み込み状況)
- Disk Writes(ディスク書き込み状況)
- Network In,Out(ネットワーク状況)
- Status Check Failed(インスタンスのステータスチェック失敗)
上記項目であれば何の苦労もなく、CLIからでもGUIからでも設定するだけで監視が開始できます。
面倒なのは、CustomMetricsを使用する場合です。
Custom Metrics を使用すると、好きな項目を自由に設定して、結果をCloudWatchに送信できます。
cronで一定時間置きにCloudWatchに送信することで、カスタムメトリクスを監視対象とすることができます!
でも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 Linux を CentOS で動かすまでの手順は続きから。
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