サーバの監視ツールには色々な種類があるけれども、
ちょっとこうしたいといった時には、shellスクリプト書いたほうがてっとり早かったり。
例えば、障害発生前後で、top/psがどういう状況だったのか?みたい時とか。
今回は、「cronで5分おきにshellスクリプトを実行し、Load Averageが5を超えたときに、top,ps結果を保存する」
といった、Shellスクリプトを書いたのでメモしておく。
# vi /scripts/toppslog.sh |
LOAD_AVG=`uptime | cut -d, -f4 | cut -d: -f2 | cut -d. -f1` |
if [ $LOAD_AVG -gt $MAX_LOAD_AVG ]; then |
LOG_TIME=`date '+%Y%m%d_%H%M%S'` |
LOG_FILE="/var/log/topps/tp${LOGTIME}.log" |
echo -e "top cmd: ${LOG_TIME} \n****************" >> $LOG_FILE |
echo -e "ps cmd: ${LOG_TIME} \n*****************" >> $LOG_FILE |
ps alx --sort -rss >> $LOG_FILE |
ログ保存先ディレクトリの作成と実行権限の付与
# chmod 700 /scripts/toppslog.sh |
cronで5分おきに実行する.
# echo */5 * * * * root /root/scripts/toppslog.sh > /etc/cron.d/toppslog |
下記のように、ファイル名が”ymd_h:i:s.log”で保存されていく。
-rw-r--r-- 1 root root 19495 11月 4 15:00 tp20101104_150001.log |
-rw-r--r-- 1 root root 20257 11月 4 15:05 tp20101104_150501.log |
-rw-r--r-- 1 root root 20336 11月 4 15:10 tp20101104_151001.log |
logrotateを行っていないので、その点は気をつける必要あり。
shellじゃなくてもperlとか慣れた言語で書いたほうが早いかも。
A simple program to start a root shell if setup correctly with the suid. On RHEL-based systems appending 1 to the end of kernel command line will cause to start into runlevel 1 directly without asking for root password.