日報 #15 - ピザとる?
長い夜だった。 玉置浩二がいなかったら死んでたよ俺。
さて、昨日のことはちょっと忘れて、日報いこうか。
今日のテーマは「CPU過負荷について」
よく読んで終了。ありがてぇありがてぇ。
以上終了なんだが、一応俺がここ2,3日で継続的にやってるCloudWatchを使ったサーバ監視についてまとめる。
取得対象としたのは下記一覧。
- ApacheCount : apacheプロセスの起動数
- CPU/IDLE : CPUのIDLE割合
- CPU/SYSTEM : システムが実行しているプロセスの割合
- CPU/USER : ユーザが実行しているプロセスの割合
- CPU/WAITE : プロセス待ちの割合
- LoadAverage : ロードアベレージ(1min)
- MemoryAvailable : 残りメモリバイト
- MemoryUsed : 使用メモリバイト
- MemoryUtilization : 使用メモリ百分率
この内、メモリに関するものは、一昨日触れた
http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/DeveloperGuide/mon-scripts-perl.html
ここで手に入るperlスクリプトmod-put-instance-data.plでなんとかなる。
LAやCPU周りの数値は、当初CloudWatch CLI ( https://aws.amazon.com/developertools/2534 )から飛ばしていたが、これはjavaを使用するため、シングルコアのEC2で複数項目を1分毎にcronしたりすると中々厳しい。
ということで、mod-put-instance-data.plで何とかする。
まず、該当のApacheCountやCPU周りの数値を吐き出すシェルを作成する。
hoge.sh
#!/bin/bash # LoadAvg CPU_LOAD_AVERAGE=`uptime | sed -e "s/load/|/" | sed -e "s/,//g" | cut -d'|' -f2 | cut -d':' -f2` CPU_AVR_1min=`echo "$CPU_LOAD_AVERAGE" | cut -d' ' -f2` CPU_AVR_5min=`echo "$CPU_LOAD_AVERAGE" | cut -d' ' -f3` CPU_AVR_15min=`echo "$CPU_LOAD_AVERAGE" | cut -d' ' -f4` # VMSTAT cpu state VMST=`vmstat | sed -n '3,3p'` VMST_US=`echo $VMST | awk 'NR == 1 {print $13}'` VMST_SY=`echo $VMST | awk 'NR == 1 {print $14}'` VMST_ID=`echo $VMST | awk 'NR == 1 {print $15}'` VMST_WA=`echo $VMST | awk 'NR == 1 {print $16}'` # Apache count APACHE_COUNT=`ps -ef | grep apache -c` # ALL DATA OUT PUT echo -e "$CPU_AVR_1min,$APACHE_COUNT,$VMST_US,$VMST_SY,$VMST_ID,$VMST_WA"
そして、それをmod-put-instance-data.plに食わせる。
俺の場合、適当に400行目くらいにある、
add_metric('MemoryAvailable', $mem_units, $mem_avail / $mem_unit_div);
を参考に、
ただ並べる。
my $custom_metrix_value= `/home/ubuntu/cw/aws-scripts-mon/custom_metrix_value.sh`; my @custom_metrix_values= split(/,/, $custom_metrix_value); # LA,APC,US,SY,ID,WA add_metric('LoadAverage', 'Count', $custom_metrix_values[0]); add_metric('ApacheCount', 'Count', $custom_metrix_values[1]); add_metric('CPU/USER', 'Percent', $custom_metrix_values[2]); add_metric('CPU/SYSTEM', 'Percent', $custom_metrix_values[3]); add_metric('CPU/IDLE', 'Percent', $custom_metrix_values[4]); add_metric('CPU/WAITE', 'Percent', $custom_metrix_values[5]);
強引だけど。コレのほうがmon-put-dataで送信するよりずっと軽く処理できる。
ということで、俺はこれを今ずーーーーっと眺めている。
ちなみにEC2のI/Oも監視している。
iotop ( http://guichaz.free.fr/iotop/ )をたまに動かしながら。
ピークタイムが過ぎるのを待っている。
まるで間抜けだ。
だが不安だからずーーーーーーっと見ている。
ずーーーーっと。
お腹が空いた。
ピザとる?