Unix系サーバでCPUやメモリ、ネットワークなどのリソースログを出力する

 Linux上で使用されるコマンド(top、vmstat、netstat)でプロセスごとのCPU・使用メモリなど(top)、システム全体のそれ(vmstat)、及びネットワークトラフィックnetstat)をログに出力する。

 topコマンドのログ

#/bin/sh

# check hoge.pid file
if [ -e ${HOME}/bin/hoge.pid ]
then
        echo Program hoge is not running.
        exit 1
fi

LOGFILE=${HOME}/performance/log/topinfo.log
INTERVAL=$1
if [ -x $INTERVAL ]
then
        # Set Default Interval time (60sec)
        INTERVAL=60
fi

# check logger's pid file
if [ -e ./topinfo.pid ]
then
        echo Already running.
        exit 1
fi
echo $$ > topinfo.pid

while [ ! -e ./topinfo_stop ]
do
        PROGRAM_PID=`cat ${HOME}/bin/hoge.pid`
        TOPINFO=`top -b -n 1 -p $PROGRAM_PID`

        TOPINFO=`echo $TOPINFO | awk '{print $27$28$29$30$31$32$33$34","$36","$38","$40","$42","$45","$47","$49","$51","$67","$68","$69","$70","$71","$72","$73","$74","$75}'`
        echo `date "+%Y/%m/%d %H:%M:%S"`,$TOPINFO >> $LOGFILE
        sleep $INTERVAL
done
rm -f ./topinfo.pid

 
 vmstatのログ

#/bin/sh
LOGFILE=${HOME}/performance/log/vmstat.log
INTERVAL=$1
if [ -x $INTERVAL ]
then
        # Set Default Interval time (5 sec)
        INTERVAL=5
fi
if [ -e ./vmstat.pid ]
then
        echo Already running.
        exit 1
fi
echo $$ > vmstat.pid
while [ ! -e ./vmstat_stop ]
do
#       SRVSTAT=`vmstat 2 2 | tail -1 | awk '{printf $4","$7","$8","$13","$14","$15","$16}' `
        SRVSTAT=`vmstat $INTERVAL 2 | tail -1 | awk '{printf ","$1","$2","$3","$4","$5","$6","$7","$8","$9","$10","$11","$12","$13","$14","$15","$16}' `
        echo `date "+%Y/%m/%d %H:%M:%S"` $SRVSTAT >> $LOGFILE
done
rm -f ./vmstat.pid

 
 netstatのログ

#/bin/sh
LOGFILE=/home/YqP5Bu8z/performance/log/ntstat.log
INTERFACE=$1
INTERVAL=$2
if [ -x $INTERFACE ]
then
        echo Usage: ntstat_logger.sh interface [interval]
        exit 1
fi
if [ -x $INTERVAL ]
then
        # Set Default Interval time (5sec)
        INTERVAL=5
fi
if [ -e ./ntstat.pid ]
then
        echo Already running.
        exit 1
fi
echo $$ > ntstat.pid
while [ ! -e ./ntstat_stop ]
do
        NTSTAT=`netstat -I$INTERFACE | tail -1 | awk '{printf ","$1","$2","$3","$4","$5","$6","$7","$8","$9","$10","$11","$12}' `
        echo `date "+%Y/%m/%d %H:%M:%S"` $NTSTAT >> $LOGFILE
        sleep $INTERVAL
done
rm -f ./ntstat.pid