编写Bash Shell通过gnuplot绘制系统性能数据图的方法

   2015-11-18 0
核心提示:这篇文章主要介绍了编写Bash Shell通过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
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 网卡吞吐性能
#################################################

 
标签: Shell gnuplot
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • PHP安全之webshell和后门检测
    PHP安全之webshell和后门检测
    基于PHP的应用面临着各种各样的攻击:XSS:对PHP的Web应用而言,跨站脚本是一个易受攻击的点。攻击者可以利用它盗取用户信息。你可以配置Apache,或是写更安全的PHP代码(验证所有用户输入)来防范XSS攻击SQL注入:这是PHP应用中,数据库层的易受攻击点。防范
    02-09
  • 【译】使用 Rust 构建你自己的 Shell
    Build Your Own Shell using Rust 译文原文地址:https://www.joshmcguigan.com/blog/build-your-own-shell-rust/原文作者:Josh Mcguigan译文出自:https://github.com/suhanyujie/article-transfer-rs本文永久链接: https://github.com/suhanyujie/article
    02-09
  • ShellExecute使用详解(DELPHI版)
    有三个API函数可以运行可执行文件WinExec、ShellExecute和CreateProcess。 1.CreateProcess因为使用复杂,比较少用。 2.WinExec主要运行EXE文件。如:WinExec(’Notepad.exe Readme.txt’, SW_SHOW); 3.ShellExecute不仅可以运行EXE文件,也可以运行已经关联
    02-09
  • shell perl 等
    tail -f xls2csv.sh |perl -pe 's/(csv)/\e[1;31m$1\e[0m/g'数据替换grep -E '_id|PHONE|PROFILE30|PROFILE31|PROFILE32|PROFILE35'LABEL272_VALUE_labelLABEL272_VALUE_label_2统计bug,并根据计数排序$NF最后一列为创建时间 $NF-1为处理人awk -F ","'/^(1|2|
    02-09
  • perl版 Webshell存活检测
    原理:检测url返回状态即可源码: 1 #!c:\\perl\\bin\\perl.exe 2 use warnings; 3 use strict; 4 use LWP::UserAgent; 5 $| = 1; 6 print "---------------------------------------------------------\n"; 7 print "|Webshell online check v1.0 |\n"; 8 pri
    02-09
  • shell执行lua脚本传参数 shell脚本执行时传入参
    #lua test.lua 2 5arg[0]= test.lua arg[1]= 2arg[2]= 5if arg[1] and arg[1] == "2" then  print("arg[1]=2")end 
    02-09
  • lua调用shell 脚本
    Lua中,os.execute可以执行dos命令,但是返回的是系统状态码,默认输出。io.popen()也可以执行dos命令,但是返回一个文件。eg:复制代码 代码如下:local t = io.popen('svn help')local a = t:read("*all")--a返回一个字符串,内容是svn help的内容如果想执
    02-09
  • 脚本语言语言脚本语言:Shell , JavaScript、VBS
    今天一直在研究脚本语言语言之类的问题,上午正好有机会和大家共享一下.     脚本语言:Shell , JavaScript、VBScript、Perl、PHP、Python、Ruby、Lua                  工作控制语言和shell    Shell 脚本    此类脚本用于自动
    02-09
  • VB.net shell、IO.File.Open、Process.Start、S
      打开文件还有很多方法,但我了解到运用较多的是上面几种- -,为了防止以后忘记,先把了解到的写下来。1、Shell  这个看了很多网页,最靠谱的运用方法:Shell("cmd.exe /c "Br_PathLocal) ' 一般用shell调用cmd命令来打开文件但问题是,命令窗口关不了- -
    02-09
  • vb6.0的各种SHELL,CMD内部命令、外部命令、SHEL
    1 Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long
    02-09
点击排行