Gnuplot vmstat

Gnuplot vmstat

After you installed following packages:

apt-get install gnuplot ttf-bitstream-vera sharutils

you can run collect-data script:

DIR='/var/tmp'
PREFIX='vmstat'
HOSTNAME=`hostname`
SLEEPTIME='60'
vmstat -n -S M $SLEEPTIME | while read line; do LOGFILE=" ${DIR}/${PREFIX}_${HOSTNAME}_`date '+%Y-%m-%d'`.log"; echo "`date '+%T ' `$line" >> $LOGFILE; done &

Crontabize the plotting script:

#!/bin/bash

DIR='/var/tmp'
PREFIX='vmstat'
HOSTNAME=`hostname`
MAX_MEMORY=`free -m | awk 'NR==2 {print $2}' | head`
SCALE=`echo "scale=0;$MAX_MEMORY/10" | bc`

if [ -n "$1" ]
    then
        DATE=`date '+%Y-%m-%d' -r $1`
        DATA="$1"
    else
        DATE=`date --date="-1 day" '+%Y-%m-%d'`
        DATA="${DIR}/${PREFIX}_${HOSTNAME}_${DATE}.log"
fi
DATA_PLOT=`dirname $DATA`/`basename $DATA .log`.png

gnuplot << EOF
set terminal png size 1920,1200 font '/usr/share/fonts/truetype/ttf-bitstream-vera/Vera.ttf' 9
set lmargin 10
set tmargin 3
set rmargin 5
set bmargin 4
set border 3
set grid
set output "${DATA_PLOT}"
set xdata time
set timefmt "%H:%M:%S"
set format x "%H:%M:%S"
set xlabel "Time"
set ylabel "Value"
set multiplot layout 2, 2 title "${HOSTNAME} - ${DATE}"
#
set size 0.5, 0.5;
set origin 0, 0;
set title "Memory"
set yrange [ 0 : $MAX_MEMORY ]
set ytics 0,$SCALE
plot "${DATA}" using 1:4 ti "swap" w l, "${DATA}" using 1:5 ti "free" w l, "${DATA}" using 1:6 ti "buff" w l, "${DATA}" using 1:7 ti "cache" w l
#
set size 0.5, 0.5;
set origin 0.5, 0;
set title "IO"
set autoscale xy
set yrange [ 0 : 4000 ]
set ytics 0,1000
set mytics 2
plot "${DATA}" using 1:10 ti "in" w l, "${DATA}" using 1:11 ti "out" w l
#
set size 0.5, 0.5;
set origin 0, 0.5;
set title "System"
set yrange [ 0 : 5000 ]
set ytics 0,1000
set mytics 2
plot "${DATA}" using 1:12 ti "in" w l, "${DATA}" using 1:13 ti "cs" w l
#
set size 0.5, 0.5;
set origin 0.5, 0.5;
set title "Cpu"
set yrange [ 0 : 100 ]
set ytics 0,10
set mytics 2
plot "${DATA}" using 1:14 ti "user" w l, "${DATA}" using 1:15 ti "system" w l, "${DATA}" using 1:16 ti "idle" w l, "${DATA}" using 1:17 ti "wait" w l
unset multiplot
EOF

rm -f $TEMPFILE

exit 0

configure your report program and run it:

#!/bin/bash

TEMPFILE=`mktemp -p /tmp/`
trap "rm -f ${TEMPFILE}; exit 1" INT

HOSTNAME=`hostname`
DATE=`date --date="-1 day" '+%Y-%m-%d'`

DIR='/var/tmp'
PREFIX='vmstat'
DATA="${DIR}/${PREFIX}_${HOSTNAME}_${DATE}.log"
DATA_PLOT=${DIR}/`basename $DATA .log`.png
IP=`/sbin/ifconfig | grep -C 1 eth|grep 'inet '|awk {'print $2'}|cut -d":" -f2`

MAILING_LIST='santi@*****.**'
LOG='1'
MAIL='1'
MOVE='1'
RETENTION='+30'
DEST_DIR='/var/www/blabla/doc_root/vmstat/'

##########
RED='\033[31;1m'
GREEN='\033[32;1m'
BOLD='\033[1m'
DEFAULT='\033[0m'
##########

if [ "$MAIL" -eq '1' ]
        then
        SUBJECT="Report vmstat $HOSTNAME"
        MESSAGE="$DATE\n\nMacchina: $HOSTNAME - $IP\n"
        echo "$MESSAGE" >> "$TEMPFILE"
        echo "Email inviata a: ${BOLD}${MAILING_LIST}${DEFAULT}"
        if [ "$LOG" -eq '1' ]
                then
                    ( cat "$TEMPFILE"; uuencode "${DATA}" "${DATA}"; uuencode "${DATA_PLOT}" "${DATA_PLOT}"; ) | mailx -s "$SUBJECT" "$MAILING_LIST"
                else
                    ( cat "$TEMPFILE"; uuencode "${DATA_PLOT}" "${DATA_PLOT}"; ) | mailx -s "$SUBJECT" "$MAILING_LIST"
        fi
fi

if [ "${MOVE}" -eq '1' ]
        then
            mv ${DATA_PLOT} ${DEST_DIR}
fi

[ "$LOG" -eq '1' ] && echo "Logging is ${GREEN}ON${DEFAULT}" || echo "Logging is ${RED}OFF${DEFAULT}"
[ "$MAIL" -eq '1' ] && echo "Mailing is ${GREEN}ON${DEFAULT}" || echo "Mailing is ${RED}OFF${DEFAULT}"
[ "$MOVE" -eq '1' ] && echo "Moving log is ${GREEN}ON${DEFAULT}" || echo "Moving log is ${RED}OFF${DEFAULT}"

find $DEST_DIR -mtime $RETENTION -iname '*.png' -exec rm -f {} \;

rm -f $TEMPFILE

exit 0

Actually, those scripts are running on this machine, so you can see results below:

Article By :