收集系统性能数据并通过gnuplot绘图

使用步骤:
1.设置一个定时任何 执行getperf.sh,采集性能数据
2.将采集到性能数据文件,如:192.168.1.1.tar.gz 解压
3.将性能分析的脚步performance_analyse.sh 放到解压后的目录中
4.安装gnuplot程序
5.将字体文件夹,拷贝到/usr/share/fonts/目录
6.直接运行 bash performance_analyse.sh

本文提到的脚本和字体文件可以在下载中心下载,链接如下:

http://down.51cto.com/data/2053872

getperf.sh脚本内容如下:

#################################################
#说明:
# 定义时间TIMES参数,表示采集的次数,
# 采集时间 = TIMES * INTERVAL
#eg:
# TIMES=180 , INTERVAL=10  采集时间就是半小时
#
#################################################
#!/bin/bash
TIMES=3600
INTERVAL=2
PWD=`pwd`
TIME=`date "+%F %H:%M:%S"`
TAR=`whereis tar|awk -F ":" ‘{print $2}‘|awk ‘{print $1}‘`
SAR=`whereis sar|awk -F ":" ‘{print $2}‘|awk ‘{print $1}‘`
IOSTAT=`whereis iostat|awk -F ":" ‘{print $2}‘|awk ‘{print $1}‘`
# Check Moniter Tool
SysInfo(){
    echo "sysip : $SYSIP"|tee $PWD/$SYSIP/sysinfo
    echo "starttime : $TIME" |tee -a $PWD/$SYSIP/sysinfo
    /sbin/ifconfig >>$PWD/$SYSIP/sysinfo
    echo "===================================" >>$PWD/$SYSIP/sysinfo
    /usr/sbin/dmidecode >>$PWD/$SYSIP/sysinfo
    echo "===================================" >>$PWD/$SYSIP/sysinfo
    /bin/cat /proc/cpuinfo >> $PWD/$SYSIP/sysinfo
    echo "===================================" >>$PWD/$SYSIP/sysinfo
    /sbin/fdisk -l >> $PWD/$SYSIP/sysinfo
    echo "===================================" >>$PWD/$SYSIP/sysinfo
    /bin/df -Th >>$PWD/$SYSIP/sysinfo
    echo "===================================" >>$PWD/$SYSIP/sysinfo
    /usr/bin/free -m >> $PWD/$SYSIP/sysinfo
    echo "===================================" >>$PWD/$SYSIP/sysinfo    
    echo ""
}
CheckEnv(){
    PUB_IP=`/sbin/ifconfig |grep "inet addr" | awk -F: ‘{print $2}‘| awk ‘{print $1}‘|grep -v "172\.\|10\.\|127\.\|192\."|sed -n 1p`
    PRI_IP=`/sbin/ifconfig |grep "inet addr" | awk -F: ‘{print $2}‘| awk ‘{print $1}‘|grep "10\.\|127\.\|192\."|sed -n 1p`
    if [ "snda$PUB_IP" == "snda" ];then
        SYSIP=$PRI_IP
    else
        SYSIP=$PUB_IP
    fi
    if [ -d $PWD/$SYSIP ];then
        rm -rf $PWD/$SYSIP
    fi
    mkdir -p $PWD/$SYSIP
    if ! grep iostat /usr/bin/iostat ;then
    yum -y install sysstat
    fi
}
GetPerf(){
    CPUUSAGE="$PWD/$SYSIP/cpuusage.log"
    MEMUSAGE="$PWD/$SYSIP/memusage.log"
    DISKUSAGE="$PWD/$SYSIP/diskusage.log"
    NETWORK="$PWD/$SYSIP/network.log"
    $SAR -P ALL $INTERVAL $TIMES>> $CPUUSAGE &
    $IOSTAT -dkx $INTERVAL $TIMES>> $DISKUSAGE &
    $SAR -n DEV $INTERVAL $TIMES>> $NETWORK &
    $SAR -r $INTERVAL $TIMES>> $MEMUSAGE &
    for ((i=0;i<$TIMES;i++))
    do
        sleep $INTERVAL
    done
}
CheckEnv
SysInfo
GetPerf
#在同一台机器上第二次采集数据时,会删除之前采集的数据,重新采集
#采集完成之后,会生产一个以 IP.tar.gz的压缩包。将这个压缩包,放到
#分析脚本performance_analyse.sh 的同级目录。
if [ -d $PWD/$SYSIP ];then
    cd $PWD
    rm -f $SYSIP.tar.gz
    tar zcvf $SYSIP.tar.gz $SYSIP
fi

performance_analyse.sh脚本内容如下:

#################################################
#
#    这个脚本的作用是处理由性能采集脚本收集到的性能数据
#然后使用gunplot生产直观的性能图。
#
#################################################
#!/bin/bash
SysInfo(){
    local file=$1
    local productname="unknow"
    local cpumodel="unknow"
    local cpucore="unknow"
    local cpumhz="unknow"
    local physical="unknow"
    local realcpucore="unknow"
    local diskpart="unknow"
    local memory="unknow"
    ipaddr=`cat $file |grep -i "net addr"|grep -v "127"`    
    productname=`cat $file |grep -i "product name"`
    cpumodel=`cat $file |grep -i "model name"|uniq -d`
    cpucore=`cat $file |grep  "processor"|wc -l`
    cpumhz=`cat $file |grep -i "cpu MHz"|uniq -d`
    physical=`cat $file |grep -i "physical id"|sort -n|uniq -d|wc -l`
    realcpucore=`cat $file |grep -i "cpu cores"|uniq -d|awk -F ":" ‘{print $2}‘`
    memory=` cat $file |grep -i -EB1 "mem:"`
    diskpart=`cat $file |grep -i "disk"|grep -E "[shv][d][a-z]"`
    echo "System Information:"|tee -a $REPORTFILE
    echo "IP address:"|tee -a $REPORTFILE
    echo -e "$ipaddr"|tee -a $REPORTFILE
    echo "$productname" |tee -a $REPORTFILE
    echo -e "\t$cpumodel" |tee -a $REPORTFILE
    echo -e "\tCPU cores\t:$cpucore"|tee -a $REPORTFILE
    echo -e "\t$cpumhz"|tee -a $REPORTFILE
    echo -e "\tPhysical cpu number:$physical"|tee -a $REPORTFILE
    echo -e "\tEach CPU real core:$realcpucore"|tee -a $REPORTFILE
    echo "$diskpart"|tee -a $REPORTFILE
    echo -e "Memory(MB):\n$memory"|tee -a $REPORTFILE
}
CpuAllUsage(){
    local file=$1
    cat $file|grep -i "all"|grep -v -i -E "average|linux|system" >$GNUPLOTFOLDER/sar_cpu.$$
    TITLE=`cat $file |sed "/^$/d"|grep -v -i "average|linux"|sed 1d|sed -n 1p`
    local SOURCE_SAR_CPU="$GNUPLOTFOLDER/sar_cpu.$$"
    local USER_UASGE=`echo $TITLE |awk ‘{print $3}‘`
    local NICE_UASGE=`echo $TITLE |awk ‘{print $4}‘`
    local SYSTEM_UASGE=`echo $TITLE |awk ‘{print $5}‘`
    local IOWAIT_UASGE=`echo $TITLE |awk ‘{print $6}‘`
    local STEAL_UASGE=`echo $TITLE |awk ‘{print $7}‘`
    local IDLE_UASGE=`echo $TITLE |awk ‘{print $8}‘`
    local cpuusagemax=`cat $SOURCE_SAR_CPU|awk ‘{print $3+$4+$5+$6+$7}‘|sort -r|sed -n 1p`
    local Tmp_ylable=`echo $cpuusagemax|awk -F "." ‘{print $1}‘`
    local ylable=`echo $Tmp_ylable+5|bc`
    local cpuusagemin=`cat $SOURCE_SAR_CPU|awk ‘{print $3+$4+$5+$6+$7}‘|sort|sed -n 1p`
     local cpuusageavg=`awk ‘BEGIN{total=0}{total+=$8}END{print 100-total/NR}‘ $SOURCE_SAR_CPU`
    echo "`date ‘+%F %H:%M:%S‘`: CPU Performance analysis" |tee -a $REPORTFILE
    echo -e "\t1.System Cpu load(%) \tmax=$cpuusagemax,average=$cpuusageavg,mim=$cpuusagemin" |tee -a $REPORTFILE
/usr/local/bin/gnuplot --persist <<EOF 
set term png size 800,600
#================= Cpu usage area pic ===========
set output "TotalCpuUsage.png"
set key title "Total CPU usage(%)"
set key box 3
set key below
set xlabel "times"  
set ylabel "TOTAL CPU USAGE(%)"
set style fill solid 1
set style histogram rowstacked
plot [1:][0:$ylable] ‘$SOURCE_SAR_CPU‘ using 3 with histogram lt rgb "#FFB3B3" title "$USER_UASGE",‘‘ using 4 with histogram title "$NICE_UASGE",‘‘ using 5 with histogram lt rgb "#B3CA7E" title "$SYSTEM_UASGE",‘‘ using 6 with histogram lt rgb "#A464BF" title "$IOWAIT_UASGE",‘‘ using 7 with histogram title "$STEAL_UASGE",‘‘ using 8 with histogram lt rgb "#212121" title "$IDLE_UASGE",$cpuusagemax lt 4 lw 2 title "Max Usage ($cpuusagemax%)"
EOF
}
CpuEachCoreUsage(){
    local file=$1
    sed -i ‘s/PM//g‘ $file
    local corenu=`cat $file|grep -v -i -E "average|system|all|linux"|sed "/^$/d"|awk ‘{print $2}‘|sort -n -r|uniq -d|sed -n 1p`
#    echo $corenu
    PLOT=""
    echo "">$GNUPLOTFOLDER/idle_sum.$$
    for (( i=0;i<=$corenu;i++ ))
    do
        cat $file |grep -v -i -E "average|system|all|linux"|sed "/^$/d"|awk "(\$2==$i){print}"|awk ‘{print $1 ," ",100-$8}‘>$GNUPLOTFOLDER/$i.txt
        local idlesum=`awk ‘BEGIN{total=0}{total+=$2}END{print total}‘ $GNUPLOTFOLDER/$i.txt`
        echo $i $idlesum >>$GNUPLOTFOLDER/idle_sum.$$
    done
    first_load=`cat $GNUPLOTFOLDER/idle_sum.$$|sort -n -k 2 -r|sed -n 1p|awk ‘{print $1}‘`
    second_load=`cat $GNUPLOTFOLDER/idle_sum.$$|sort -n -k 2 -r|sed -n 2p|awk ‘{print $1}‘`
    third_load=`cat $GNUPLOTFOLDER/idle_sum.$$|sort -n -k 2 -r|sed -n 3p|awk ‘{print $1}‘`
    load=($first_load $second_load $third_load)
    echo -e "\t2.Each core load:"
    local cpuload=("First" "Second" "Third")
    local nu=0
    for i in  ${load[@]}    
    do
        local coreloadmax=`cat $GNUPLOTFOLDER/$i.txt|sort -n -k 2 -r|sed -n 1p|awk ‘{print $2}‘`
        local coreloadavg=`awk ‘BEGIN{total=0}{total+=$2}END{print total/NR}‘ $GNUPLOTFOLDER/$i.txt`
        local coreloadmin=`cat $GNUPLOTFOLDER/$i.txt|sort -n -k 2|sed -n 1p|awk ‘{print $2}‘`
        
        echo -e "\t\t\t Load ${cpuload[$nu]} core $i : max=$coreloadmax , avg=$coreloadavg , min=$coreloadmin"|tee -a $REPORTFILE
        nu=`echo $nu+1|bc`
    done    
    for ((i=0;i<=corenu;i++))
    do
        if [ $i -eq $first_load ];then
            LW=4
        elif [ $i -eq $second_load ];then
            LW=3
        elif [ $i -eq $third_load ];then
            LW=2
        else
            LW=1
        fi
        TMP1="$GNUPLOTFOLDER/$i.txt" 
        TMP2="using 1:2 with l lw $LW"
        TMP3="core $i "
        PLOT="$PLOT \"$TMP1\" $TMP2 title  \"$TMP3\","
        
    done
    local tmp_ylabel_range=`cat $file|grep -v -i -E "average|system|all|linux"|sed "/^$/d"|awk ‘{print 100-$8}‘|sort -n -r|sed -n 1p|awk -F "." ‘{print $1}‘|sed -n 1p`
    local ylabel_range=`echo $tmp_ylabel_range+5|bc`
/usr/local/bin/gnuplot --persist <<EOF
#=============== Each core usage =====================
set term png size 800,600
set output "CpuCoreIdle.png"
set key title "Each Core Usage(%)"
set key box 3
set key below
set ylabel "CPU Core Usage(%)" 
set xdata time
set timefmt "%H:%M:%S"
plot [:][0:$ylabel_range] $PLOT
EOF
}
MemoryUsage(){
    local file=$1
    local title=`cat $file |sed ‘/^$/d‘|grep -i -E -v "average|linux"|grep -i mem`
    sed -i ‘s/PM//g‘ $file
    local kbmemused=`echo $title|awk ‘{print $3}‘` 
    local memused=`echo $title|awk ‘{print $4}‘` 
    local kbbuffers=`echo $title|awk ‘{print $5}‘` 
    local kbcached=`echo $title|awk ‘{print $6}‘` 
    local kbcommit=`echo $title|awk ‘{print $7}‘` 
    cat $file |sed ‘/^$/d‘|grep -i -E -v "average|linux"|grep -i -v mem|awk ‘{print $1,$2/1024,($2+$3)/1024,$3/1024,$4,$5/1024,$6/1024}‘>$GNUPLOTFOLDER/memory.$$
    SOURCE_FILE=$GNUPLOTFOLDER/memory.$$
    local memtotal=`awk ‘BEGIN{total=0}{total+=$3}END{print total/NR}‘ $SOURCE_FILE`
    local memusedmax=`awk ‘{print $4}‘ $SOURCE_FILE|sort -n -r|sed -n 1p`
    local memusedavg=`awk ‘BEGIN{total=0}{total+=$4}END{print total/NR}‘ $SOURCE_FILE`
    local memusedmin=`awk ‘{print $4}‘ $SOURCE_FILE|sort -n|sed -n 1p`
    local memfreemax=`awk ‘{print $2}‘ $SOURCE_FILE|sort -n -r|sed -n 1p`
    local memfreeavg=`awk ‘BEGIN{total=0}{total+=$2}END{print total/NR}‘ $SOURCE_FILE`
    local memfreemin=`awk ‘{print $2}‘ $SOURCE_FILE|sort -n|sed -n 1p`
    local memcachemax=`awk ‘{print $7}‘ $SOURCE_FILE|sort -n -r|sed -n 1p`
    local memcacheavg=`awk ‘BEGIN{total=0}{total+=$7}END{print total/NR}‘ $SOURCE_FILE`
    local memcachemin=`awk ‘{print $7}‘ $SOURCE_FILE|sort -n|sed -n 1p`
    local memused_cachemax=`awk ‘{print $4-$7}‘ $SOURCE_FILE|sort -n -r|sed -n 1p`
    local memused_cacheavg=`awk ‘BEGIN{total=0}{total+=($4-$7)}END{print total/NR}‘ $SOURCE_FILE`
    local memused_cachemin=`awk ‘{print $4-$7}‘ $SOURCE_FILE|sort -n|sed -n 1p`
    local used_percent=`awk ‘BEGIN{total=0}{total+=$5}END{print total/NR}‘ $SOURCE_FILE`
    echo "`date ‘+%F %H:%M:%S‘`: Memory usage analysis" |tee -a $REPORTFILE
    echo -e "\t\t1.total memory: $memtotal MB"|tee -a $REPORTFILE
    echo -e "\t\t2.memory used: max=$memusedmax MB ,avg=$memusedavg MB ,min=$memusedmin MB"|tee -a $REPORTFILE
    echo -e "\t\t3.memory free: max=$memfreemax MB ,avg=$memfreeavg MB ,min=$memfreemin MB"|tee -a $REPORTFILE
    echo -e "\t\t4.memory cache: max=$memcachemax MB ,avg=$memcacheavg MB ,min=$memcachemin MB"|tee -a $REPORTFILE
    echo -e "\t\t4.memory used-cache: max=$memused_cachemax MB ,avg=$memused_cacheavg MB ,min=$memused_cachemin MB"|tee -a $REPORTFILE
/usr/local/bin/gnuplot --persist <<EOF
set term png size 800,600
set output "MemoryUsage.png"
set key title "Memory Use state"
set key box 3
set key below
set ylabel "MB"
set y2label "(%)"
set x2range [0:]
set y2range [0:100]
set xdata time
set timefmt "%H:%M:%S"
set xtics;set x2tics;set ytics ;set y2tics;
plot ‘$SOURCE_FILE‘ using 1:3 w p title "Total Memory",‘‘ using 1:4 w p title "Used",‘‘ using 1:7 w p title "Cached"  ,‘‘ using 5 with l lt rgb "red" title "memused($used_percent%)" axis x2y2
EOF
}
DiskUsage(){
    local file=$1
    cat $file |sed "/^$/d"|grep -v -i -E "device|linux"|sed 1d >$GNUPLOTFOLDER/disk.$$
    local SOURCE_FILE=$GNUPLOTFOLDER/disk.$$
    plot_readiops=""
    plot_writeiops=""
    local nu=1
    echo "`date ‘+%F %H:%M:%S‘`: Disk Performance analysis" |tee -a $REPORTFILE
    for diskpart in `cat $file |sed ‘1,2d‘|grep -v -i "device"|awk -F " " ‘{print $1}‘|sort|uniq -d|sed ‘/^$/d‘|grep -E "^[a-z][a-z][a-z]$"`
    do
        awk "(\$1==\"$diskpart\"){print}" $SOURCE_FILE >$GNUPLOTFOLDER/gnu_tmpfile.$diskpart
        plot_readiops="$plot_readiops \"$GNUPLOTFOLDER/gnu_tmpfile.$diskpart\" using  4 w l title \"$diskpart read IOPS\","
        awk "(\$1==\"$diskpart\"){print}" $SOURCE_FILE|awk ‘BEGIN{total=0}{total+=$4}END{print total/NR}‘>$GNUPLOTFOLDER/t.$$
        local read_avg_iops=`cat $GNUPLOTFOLDER/t.$$`
        rm -f $GNUPLOTFOLDER/t.$$
        awk "(\$1==\"$diskpart\"){print}" $SOURCE_FILE|awk ‘{print $4}‘|sort -n|sed -n 1p>$GNUPLOTFOLDER/t.$$
        local read_min_iops=`cat $GNUPLOTFOLDER/t.$$`
        rm -f $GNUPLOTFOLDER/t.$$
        awk "(\$1==\"$diskpart\"){print}" $SOURCE_FILE|awk ‘{print $4}‘|sort -n -r |sed -n 1p>$GNUPLOTFOLDER/t.$$
        local read_max_iops=`cat $GNUPLOTFOLDER/t.$$`
        rm -f $GNUPLOTFOLDER/t.$$
        plot_writeiops="$plot_writeiops \"$GNUPLOTFOLDER/gnu_tmpfile.$diskpart\" using  5 w l title \"$diskpart write IOPS\","
        
        awk "(\$1==\"$diskpart\"){print}" $SOURCE_FILE|awk ‘BEGIN{total=0}{total+=$5}END{print total/NR}‘>$GNUPLOTFOLDER/t.$$
        local write_avg_iops=`cat $GNUPLOTFOLDER/t.$$`
        rm -f $GNUPLOTFOLDER/t.$$
        awk "(\$1==\"$diskpart\"){print}" $SOURCE_FILE|awk ‘{print $5}‘|sort -n|sed -n 1p>$GNUPLOTFOLDER/t.$$
        local write_min_iops=`cat $GNUPLOTFOLDER/t.$$`
        rm -f $GNUPLOTFOLDER/t.$$
        awk "(\$1==\"$diskpart\"){print}" $SOURCE_FILE|awk ‘{print $5}‘|sort -n -r |sed -n 1p>$GNUPLOTFOLDER/t.$$
        local write_max_iops=`cat $GNUPLOTFOLDER/t.$$`
        rm -f $GNUPLOTFOLDER/t.$$
        
        awk "(\$1==\"$diskpart\"){print}" $SOURCE_FILE|awk ‘BEGIN{total=0}{total+=$6}END{print total/NR}‘>$GNUPLOTFOLDER/t.$$
        local avg_read_throughput=`cat $GNUPLOTFOLDER/t.$$`
        rm -f $GNUPLOTFOLDER/t.$$
        awk "(\$1==\"$diskpart\"){print}" $SOURCE_FILE|awk ‘{print $6}‘|sort -n|sed -n 1p>$GNUPLOTFOLDER/t.$$
        local min_read_throughput=`cat $GNUPLOTFOLDER/t.$$`
        rm -f $GNUPLOTFOLDER/t.$$
        awk "(\$1==\"$diskpart\"){print}" $SOURCE_FILE|awk ‘{print $6}‘|sort -n -r |sed -n 1p>$GNUPLOTFOLDER/t.$$
        local max_read_throughput=`cat $GNUPLOTFOLDER/t.$$`
        rm -f $GNUPLOTFOLDER/t.$$
        awk "(\$1==\"$diskpart\"){print}" $SOURCE_FILE|awk ‘BEGIN{total=0}{total+=$7}END{print total/NR}‘>$GNUPLOTFOLDER/t.$$
        local avg_write_throughput=`cat $GNUPLOTFOLDER/t.$$`
        rm -f $GNUPLOTFOLDER/t.$$
        awk "(\$1==\"$diskpart\"){print}" $SOURCE_FILE|awk ‘{print $7}‘|sort -n|sed -n 1p>$GNUPLOTFOLDER/t.$$
        local min_write_throughput=`cat $GNUPLOTFOLDER/t.$$`
        rm -f $GNUPLOTFOLDER/t.$$
        awk "(\$1==\"$diskpart\"){print}" $SOURCE_FILE|awk ‘{print $7}‘|sort -n -r |sed -n 1p>$GNUPLOTFOLDER/t.$$
        local max_write_throughput=`cat $GNUPLOTFOLDER/t.$$`
        rm -f $GNUPLOTFOLDER/t.$$
        
        awk "(\$1==\"$diskpart\"){print}" $SOURCE_FILE|awk ‘BEGIN{total=0}{total+=$10}END{print total/NR}‘>$GNUPLOTFOLDER/t.$$
        local avg_await=`cat $GNUPLOTFOLDER/t.$$`
        rm -f $GNUPLOTFOLDER/t.$$
        awk "(\$1==\"$diskpart\"){print}" $SOURCE_FILE|awk ‘{print $10}‘|sort -n|sed -n 1p>$GNUPLOTFOLDER/t.$$
        local min_await=`cat $GNUPLOTFOLDER/t.$$`
        rm -f $GNUPLOTFOLDER/t.$$
        awk "(\$1==\"$diskpart\"){print}" $SOURCE_FILE|awk ‘{print $10}‘|sort -n -r |sed -n 1p>$GNUPLOTFOLDER/t.$$
        local max_await=`cat $GNUPLOTFOLDER/t.$$`
        rm -f $GNUPLOTFOLDER/t.$$
        
        echo -e "\t\t$nu.$diskpart performance:"|tee -a $REPORTFILE
        echo -e "\t\t\t read iops:\t\t max=$read_max_iops ,\t avg=$read_avg_iops ,\t min=$read_min_iops"|tee -a $REPORTFILE
        echo -e "\t\t\t write iops:\t\t max=$write_max_iops ,\t avg=$write_avg_iops ,\t min=$write_min_iops"|tee -a $REPORTFILE
        echo -e "\t\t\t read data per second:\t max=$max_read_throughput KB,\t avg=$avg_read_throughput KB,\t min=$min_read_throughput KB"|tee -a $REPORTFILE
        echo -e "\t\t\t write data per second:\t max=$max_write_throughput KB,\t avg=$avg_write_throughput KB,\t min=$min_write_throughput KB"|tee -a $REPORTFILE
        echo -e "\t\t\t each io wait time:\t max=$max_await ms ,\t avg=$avg_await ms ,\t min=$min_await ms"|tee -a $REPORTFILE
    done
        
/usr/local/bin/gnuplot --persist <<EOF
set term png size 800,600
set output "DiskIOPSPerformance.png"
set key title "Disk IOPS"
set key box 3
set key below
set ylabel "IOPS"
plot $plot_readiops $plot_writeiops
EOF
}
NetworkPerformance(){
        local file=$1
        sed -i ‘s/PM//g‘ $file
        cat $file |grep -E "eth|em"|grep -v -i "average">$GNUPLOTFOLDER/network_sourcefile.txt
        local sourcefile=$GNUPLOTFOLDER/network_sourcefile.txt
        local titlerxpackage=`cat $file |grep -i "IFACE"|awk ‘{print $3}‘|uniq -d`
        local titletxpackage=`cat $file |grep -i "IFACE"|awk ‘{print $4}‘|uniq -d`
        local titlerxbyte=`cat $file |grep -i "IFACE"|awk ‘{print $5}‘|uniq -d`
        local titletxbyte=`cat $file |grep -i "IFACE"|awk ‘{print $6}‘|uniq -d`
        if [ $titlerxbyte == ‘rxkB/s‘ ];then
            unit="KB"
        elif [ $titlerxbyte == ‘rxbyt/s‘ ];then
            unit="byte"
        fi
        local rxpackage=‘‘
        local txpackage=‘‘
        local rxbyte=‘‘
        local txbyte=‘‘
        local nu=1
        echo "`date ‘+%F %H:%M:%S‘`: Network Performance analysis" |tee -a $REPORTFILE
        for netcard in `cat $file |grep -E "eth|em"|grep -v -i "average"|awk ‘{print $2}‘|sort|uniq -d`
        do
            cat $sourcefile|grep $netcard>$GNUPLOTFOLDER/gnu_network.$netcard
            rxpackage="$rxpackage \"$GNUPLOTFOLDER/gnu_network.$netcard\" using 1:3 w l title \"$netcard $titlerxpackage\","
            txpackage="$txpackage \"$GNUPLOTFOLDER/gnu_network.$netcard\" using 1:4 w l title \"$netcard $titletxpackage\","
            rxbyte="$rxbyte  \"$GNUPLOTFOLDER/gnu_network.$netcard\" using 1:5 w l title \"$netcard $titlerxbyte\","
            txbyte="$txbyte  \"$GNUPLOTFOLDER/gnu_network.$netcard\" using 1:6 w l title \"$netcard $titletxbyte\","
            max_rxpck=` cat $GNUPLOTFOLDER/gnu_network.$netcard|sort -n -r -k 3|sed -n 1p|awk ‘{print $4}‘`      
            avg_rxpck=`awk ‘BEGIN{total=0}{total+=$3}END{print total/NR}‘ $GNUPLOTFOLDER/gnu_network.$netcard`
            min_rxpck=` cat $GNUPLOTFOLDER/gnu_network.$netcard|sort -n -k 3|sed -n 1p|awk ‘{print $4}‘`      
            max_txpck=` cat $GNUPLOTFOLDER/gnu_network.$netcard|sort -n -r -k 4|sed -n 1p|awk ‘{print $5}‘`      
            avg_txpck=`awk ‘BEGIN{total=0}{total+=$4}END{print total/NR}‘ $GNUPLOTFOLDER/gnu_network.$netcard`
            min_txpck=` cat $GNUPLOTFOLDER/gnu_network.$netcard|sort -n -k 4|sed -n 1p|awk ‘{print $5}‘`      
            max_rxbyt=` cat $GNUPLOTFOLDER/gnu_network.$netcard|sort -n -r -k 5|sed -n 1p|awk ‘{print $6}‘`      
            avg_rxbyt=`awk ‘BEGIN{total=0}{total+=$5}END{print total/NR}‘ $GNUPLOTFOLDER/gnu_network.$netcard`
            min_rxbyt=` cat $GNUPLOTFOLDER/gnu_network.$netcard|sort -n -k 5|sed -n 1p|awk ‘{print $6}‘`      
            max_txbyt=` cat $GNUPLOTFOLDER/gnu_network.$netcard|sort -n -r -k 6|sed -n 1p|awk ‘{print $7}‘`      
            avg_txbyt=`awk ‘BEGIN{total=0}{total+=$6}END{print total/NR}‘ $GNUPLOTFOLDER/gnu_network.$netcard`
            min_txbyt=` cat $GNUPLOTFOLDER/gnu_network.$netcard|sort -n -k 6|sed -n 1p|awk ‘{print $7}‘`      
            echo -e "\t\t$nu.$netcard load:"|tee -a $REPORTFILE
            echo -e "\t\t\t rxpck/s:\t\t max=$max_rxpck ,\t avg=$avg_rxpck ,\t min=$min_rxpck"|tee -a $REPORTFILE
            echo -e "\t\t\t txpck/s:\t\t max=$max_txpck ,\t avg=$avg_txpck ,\t min=$min_txpck"|tee -a $REPORTFILE
            echo -e "\t\t\t rxbyt/s:\t max=$max_rxbyt $unit,\t avg=$avg_rxbyt $unit,\t min=$min_rxbyt $unit"|tee -a $REPORTFILE
            echo -e "\t\t\t txbyt/s:\t max=$max_txbyt $unit,\t avg=$avg_txbyt $unit,\t min=$min_txbyt $unit"|tee -a $REPORTFILE
            nu=`echo $nu+1|bc`
            
        done
/usr/local/bin/gnuplot --persist <<EOF
set term png size 800,600
set output "NetworkPackagePerformance.png"
set key title "network performance"
set key box 3
set key below
set ylabel "Package/s"
set xdata time
set timefmt "%H:%M:%S"
plot $rxpackage $txpackage 
EOF
/usr/local/bin/gnuplot --persist <<EOF
set term png size 800,600
set output "NetworkThougtputPerformance.png"
set key title "Throughput performance"
set key box 3
set key below
set ylabel "$unit"
set xdata time
set timefmt "%H:%M:%S"
plot $rxbyte $txbyte
EOF
}
#定义gnuplot的字体msttcore目录及字体,这个在压缩包里有,放到指定目录即可。
export GDFONTPATH="/usr/share/fonts/msttcore"
export GNUPLOT_DEFAULT_GDFONT="arial"
SYSINFO_FILE=sysinfo
CPU_USAGE_FILE=cpuusage.log
MEMORY_USAGE_FILE=memusage.log
DISK_USAGE_FILE=diskusage.log
NETWORK_USAGE_FILE=network.log
PWD=`pwd`
REPORTFILE=report.txt
GNUPLOTFOLDER="/tmp/gnuplotlinux"
mkdir -p $GNUPLOTFOLDER
#Time=`date ‘+%F %H:%M:%S‘`
echo -e "\t\t\t\t\t\tSDG Aystem Analysis Report" > $REPORTFILE
SysInfo $SYSINFO_FILE
echo "" >> $REPORTFILE
CpuAllUsage $CPU_USAGE_FILE
CpuEachCoreUsage $CPU_USAGE_FILE
echo "" >> $REPORTFILE
MemoryUsage $MEMORY_USAGE_FILE
echo "" >> $REPORTFILE
DiskUsage $DISK_USAGE_FILE
echo "" >> $REPORTFILE
NetworkPerformance $NETWORK_USAGE_FILE
echo "" >> $REPORTFILE
#脚本执行完成之后,会在性能数据所在的目录中生成
#report.txt     性能报告文本
#TotalCpuUsage.png   CPU利用率图表
#CpuCoreIdle.png     每个CPU核心的Idle
#MemoryUsage.png     内存使用率
#DiskIOPSPerformance.png   磁盘IOPS性能
#NetworkPackagePerformance.png    网卡发包率性能
#NetworkThougtputPerformance.png  网卡吞吐性能
#################################################
时间: 2024-10-12 23:36:58

收集系统性能数据并通过gnuplot绘图的相关文章

如何收集客户数据(转)

我曾遇过一位广州的小伙子做淘宝C店,他的网店流水不错,每月几十万,但利润几乎为零.马海祥问他,你对自己的顾客有梳理吗?他说没有,还非常谦恭的接着问:梳理客户这个重要吗?他说:我们就四个人,分别做客服.接单.盯直通车.打爆款.管库存.盯着同品类的店,我们美工还是外包的,根本忙不过来. 类似的情况,在很多电商平台和自有B2C网站的商家中也有很多.对于这一现象,马海祥觉得这挺有意思的,按理说,你能盯着竞争对手,更应该有精力盯着您的客户才对呀! 马海祥始终在讲:CRM(客户关系管理)不是系统,它是一种客

Facebook 被指收集用户数据:通过照片和文本

北京时间5月25日消息,在加利福尼亚州进行的对Facebook泄露用户信息一案中,法院对Facebook提起一项新的诉讼,指控该公司通过App收集了用户及他们朋友的信息. 上周向加利福尼亚州圣马特奥市高级法院提起的该项诉讼是2015年由现已停止运营的创业公司Six4Three向Facebook提起诉讼的一部分. 据卫报报道,Facebook的高级管理人员的机密邮件和消息中泄露了该公司的信息.这些指控称,Facebook使用了几种方法来收集用户信息,从而用于商业目的.据报告,这些方法包括追踪用户的

检查已终止。收集事实数据时检测到错误

数据类型 SQL2005 数据容量 470 MB 故障类型 服务器断电导致数据库系统表异常.消息 8921,级别 16,状态 1,第 1 行 检查已终止.收集事实数据时检测到错误.可能是 tempdb 空间用尽或某个系统表不一致.请检查前面的错误消息. 修复结果 文件发来后 手工纠正系统表后,数据库其他表恢复顺利,但是gl_doc表损坏及其严重,没有软件可以获取到表数据,分析原因是该表 分配信息丢失. 手工从残余记录分析到分配信息后 重新提取完成恢复. 整个数据库完全被用友直接使用,完全OK.

telegraf 使用 inputs.exec插件收集监控数据

telegraf (v1.5.2)虽然好用但是默认情况下并不能帮你收集好所有你需要的数据,比如io数据,默认情况下只收集了iotime, iops_in_process, weighted_io_time, read, write等相关数据,并不能收集到每个盘的iops, await, svctm, util 等数据,最近正好有这个需求,查了下官网telegraf可以支持用户自定义脚本收集监控数据上传到infulxdb,下面直奔主题吧 1,自己写脚本收集好每块盘的iops, await, svc

newlisp 使用gnuplot绘图

gnuplot是个很好的数学绘图工具,eamcs org mode 中可以使用,1现在发现newlisp早就支持了. 先演示一个例子,看图: 此图有三根折线,分别可以用三个list表示数据.参考下面的newlisp代码: #!/usr/bin/newlisp ;;(module "plot.lsp") (load "b.lsp") (set 'plot:title "集群存储总结") (set 'plot:sub-title "按月份展

用Javascript大批量收集网站数据

最近为了写论文,要大批量收集慕课网的相关用户数据(因为用户个人主页是公开的),故而写了一个插件进行收集.需要在慕课网控制台输入.最后收集了3000多份数据. /* 收集项 收集标准 用户编号 慕课网用户编号是七位数递增的,范围在5000000以内.故而本次收集将在1000000至5000000内分区段进行数据的随机收集. 学习时长 慕课有记录用户的总共学习时长,如110时34分.为方便后期统计,将该数据转化为以分钟为单位的数据. 积分 积分反映的是用户参与网站社交的程度. 经验 相比学习时长,经

Python 调用阿里云 API 收集 ECS 数据

#!/usr/bin/env python # coding: utf-8 # author: Wang XiaoQiang ''' 功能介绍: 1.调用阿里云API,收集所有区域 ECS 信息 2.将需要的数据整理.生成 Excel 文档 3.关于阿里 sdk 的安装,api 的调用请参考阿里云官网 4.xlsxwriter 请参考这里:http://xlsxwriter.readthedocs.org/ ''' import json, sys try: from termcolor imp

R语言之数据可视化 - R的绘图颜色

5. R语言绘图之 颜色 · grDevice 包 - colorRamp() 和 colorRampPalette() - 颜色名字可使用 colors() 获取 · RColorBrewer 包 - 三类调色板: 1. sequential:从一个极端渐变到另一个极端,适合用于呈现顺序数据 2. diverging:两端鲜艳而中间较淡,适合凸显处在极端的数值,即想强调高低对比时可选择 3. qualitative:颜色间对比鲜明,适合呈现分类变量 - 调色板信息可与 colorRamp /

R语言之数据可视化 - R的绘图系统1 - R的三大绘图系统简介

1. R的三大绘图系统简介 1.1 基本绘图系统(Base Plotting System) - 艺术家的调色板:绘图适于空白帆布 · 需要实现计划:直观地实时反映绘图和分析数据的逻辑 - 两步 = 图 + 修饰/添加 = 执行一系列函数 - 适于绘制2D图 1.2 Lattice 绘图系统(Lattice Plotting System) - 绘图 = 使用一次函数调用(一次成图) - 特别适用于观测变量间的交互:在变量z的不同水平,变量y如何随变量x变化 1.3 ggplot2 绘图系统(g