监控系统资源的脚本system-person-monitor.sh

652阅读 0评论2011-09-13 正愚
分类:

system-person-monitor.sh

监控脚本在crontab中的配置:

0,5,10,15,20,25,30,35,40,45,50,55 * * * * /usr/local/shell/alltest/system-person-monitor.sh > /dev/null 2>&1

     脚本监控对象:

loadcpu利用率、内存利用率、ping、磁盘分区利用率、eth0eth1数据流量

     脚本原理:

Load 

脚本会取wload值并计算出它1min5min15min平均值,如果连续监测load平均值超过阀值的次数,超过警线次数就会连接报警平台。内容包括:ip地址、时间、超过阀值的load值。

 

cpu利用率

脚本会取vmstatcpu空闲率并计算出cpu利用率。如果连续监测cpu利用率超过阀值的次数,超过警线次数就会连接报警平台。内容包括:ip地址、时间、cpu利用率。

 

内存利用率

脚本会取free取出内存使用量与内存总量,并计算出内存利用率。如果连续监测内存利用率超过阀值的次数,超过警线次数就会连接报警平台。报警内容包括:ip地址、时间、内存利用率。

       

         磁盘分区利用率

脚本会取df -hdf -i中磁盘分区利用率(空间利用率和inodes利用率)最大的值, 如果这个最大值超过阀值就会连接报警平台。报警内容包括:ip地址、时间、磁盘利用率最大的值、磁盘利用率阀值。

eth0eth1数据流量

      脚本需要人为的设置选择监控eth0还是监控eth1,它会从sar -n DEV 1,提取出相应网口每秒进入的平均数据量及传出的平均数据量,计算并以KB/S为单位输出。如果计算出进入或者传出的数据大于或等于10000,会认为是脚本判断是错误,会把记录进入或传出的数据的变量归为0.如果进入或传出的数据大于阀值就会连接报警平台。报警内容包括:IP、时间、网卡接口、数据速率。

    Ping测试

     脚本会用ping -c 5向新浪主页发送5个数据包,如果延时超过阀值的次数超过警线次数就会连接报警平台。报警内容包括:IP、时间、延迟的时间。

 

以下是脚本代码

 

#!/bin/sh

msgid=xxxxxxx

#fazhi#

loadfazhi="50"

loadcishu="2"

 

cpufazhi="101"

cpucishu="2"

 

memfazhi="10000"

memcishu="3"

 

pingfazhi="300"

pingcishu="3"

 

diskfazhi="90"

 

netxuanzeeth0="yes"

netxuanzeeth1="no"

neteth0fazhi="8000"

neteth1fazhi="8000"

 

#####################################################################

#variable#

dir1="/usr/local/shell/alltest/system"

time1=`date  +%Y%m%d"-"%T`

time2=`date +%Y%m%d`

ipis=`cat /etc/sysconfig/network-scripts/ifcfg-eth0 |grep "IPADDR"|awk -F "=" '{print$2}'`

 

#preparation#

mkdir -p $dir1/tmp

 

#load#

load=`w|grep load|awk -F "average:" '{print $2}'|sed 's/,//g'|sed 's/^.//g'|sed 's/ /\n/g'|awk 'BEGIN { a=0 }; { a=a+$0 }; END { printf "%.3f\n", a/NR }'`

echo $load

loadtmp=`echo $load |awk -F "." '{ print $1}'`

if [ $loadtmp -ge $loadfazhi ] ; then

echo "alarm load : $ipis $time1 load = $load!" >> $dir1/$ipis.alltest.system.$time2.log

echo "history load : $ipis $time1 load = $load!" >> $dir1/$ipis.alltest.system.$time2.log

echo "1"  >> $dir1/tmp/cpu-load.system.tmp

else

echo "history load : $ipis $time1 load = $load!" >> $dir1/$ipis.alltest.system.$time2.log

echo "0"  >> $dir1/tmp/cpu-load.system.tmp

fi

 

  for (( loadi = 1 ; loadi <= $loadcishu ; loadi++))

  do

    loada=`tac $dir1/tmp/cpu-load.system.tmp | sed -n "${loadi}p"`

      loadb=$((loadb + loada))

  done

if [ $loadb -ge $loadcishu ] ; then

#ssh 10.10.10.248 "fetion.sh phone="$msgid" msg='alarm load : $ipis $time1 load = $load!'"

wget  --output-document=/dev/null " load : $ipis $time1 load = $load"

echo yes

else

echo no

fi

 

 

#cpu#

cpukong=`vmstat 1 2|tail -n 1 |awk '{print $15}'`

cpu=`expr 100 - $cpukong`

echo $cpu

if [ $cpu -ge $cpufazhi ] ; then

echo "alarm cpu : $ipis $time1 cpu used = $cpu%!" >> $dir1/$ipis.alltest.system.$time2.log

echo "history cpu : $ipis $time1 cpu used = $cpu%!" >> $dir1/$ipis.alltest.system.$time2.log

echo "1"  >> $dir1/tmp/cpu.system.tmp

else

echo "history cpu : $ipis $time1 cpu used = $cpu%!" >> $dir1/$ipis.alltest.system.$time2.log

echo "0"  >> $dir1/tmp/cpu.system.tmp

fi

  for (( cpui = 1 ; cpui <= $cpucishu ; cpui++))

  do

    cpua=`tac $dir1/tmp/cpu.system.tmp | sed -n "${cpui}p"`

      cpub=$((cpub + cpua))

  done

if [ $cpub -ge $cpucishu ] ; then

#ssh 10.10.10.248 "fetion.sh phone="$msgid" msg='alarm cpu : $ipis $time1 cpu = $cpu%!'"

wget  --output-document=/dev/null " cpu : $ipis $time1 cpu = $cpu%"

echo yes

else

echo no

fi

 

#memory#

mem=`free|grep Mem|awk '{print $3/$2*10000 }'|awk 'BEGIN { a=0 }; { a=a+$0 }; END { printf "%.2f\n", a/NR }'`

echo $mem

memtmp=`echo $mem |awk -F "." '{ print $1}'`

if [ $memtmp -ge $memfazhi ] ; then

echo "alarm memory : $ipis $time1 memory used = $mem%!" >> $dir1/$ipis.alltest.system.$time2.log

echo "history memory : $ipis $time1 memory used = $mem%!" >> $dir1/$ipis.alltest.system.$time2.log

echo "1"  >> $dir1/tmp/memory.system.tmp

else

echo "history memory : $ipis $time1 memory used = $mem%!" >> $dir1/$ipis.alltest.system.$time2.log

echo "0"  >> $dir1/tmp/memory.system.tmp

fi

  for (( memi = 1 ; memi <= $memcishu ; memi++))

  do

    mema=`tac $dir1/tmp/memory.system.tmp | sed -n "${memi}p"`

      memb=$((memb + mema))

  done

if [ $memb -ge $memcishu ] ; then

#ssh 10.10.10.248 "fetion.sh phone="$msgid" msg='alarm memory : $ipis $time1 memory = $mem!'"

wget --output-document=/dev/null " memory : $ipis $time1 memory = $mem"

echo yes

else

echo no

fi

 

#disk#

#disk space#

percent=`df -h | grep -v Used | grep -v boot | grep -v mnt | grep -v shm | awk '{if ( $1 ~/^[0-9]/ ) print $4 ; else print $5}'| grep -v ^$ | sed "s/%/ /g"`

diski=0

for i in $percent

do

   if [ $i -gt $diski ]

      then   diski=$i

   fi

done

    diskweizhi=`df -h | sed "s/%/ /g" | awk -v a="$diski" '$4 == a  || $5 == a' | awk '{if ( $1 !~/^[0-9]/ ) print $6"-"$4 ;else print $5"-"$3 }'`

echo space $diski

if [ $diski -ge $diskfazhi ] ; then

   echo $diski

  echo "alarm disk : $ipis $time1 max disk used is $diski%, $diskweizhi !" >> $dir1/$ipis.alltest.system.$time2.log

  echo "history disk : $ipis $time1 max disk used is $diski%, $diskweizhi!" >> $dir1/$ipis.alltest.system.$time2.log

 #ssh 10.10.10.120 "fetion-ops --mobile=13811193602 --pwd=nanyuan0301 --to=13426056563,13811193602 --msg-utf8='alarm disk : $ipis $time1 max disk used is $diski%, $diskweizhi !'"

  wget  --output-document=/dev/null " disk : $ipis $time1 max disk used is $diski%, $diskweizhi !"

  unset diskweizhi

  unset diski

  unset i

  unset percent

fi

 

#disk inode#

percent=`df -i | grep -v Used | grep -v boot | grep -v mnt | grep -v shm | awk '{if ( $1 ~/^[0-9]/ ) print $4 ; else print $5}'| grep -v ^$ | sed "s/%/ /g"`

diski=0

for i in $percent

do

   if [ $i -gt $diski ]

      then   diski=$i

   fi

done

echo inode $diski

    diskweizhi=`df -i | sed "s/%/ /g" | awk -v a="$diski" '$4 == a  || $5 == a' | awk '{if ( $1 !~/^[0-9]/ ) print $6"-"$4 ;else print $5"-"$3 }'`

 

if [ $diski -ge $diskfazhi ] ; then

   echo $diski

  echo "alarm disk : $ipis $time1 max inode used is $diski%, $diskweizhi !" >> $dir1/$ipis.alltest.system.$time2.log

  echo "history disk : $ipis $time1 max inode used is $diski%, $diskweizhi!" >> $dir1/$ipis.alltest.system.$time2.log

  #ssh 10.10.10.248 "fetion.sh phone="$msgid" msg='alarm disk : $ipis $time1 max inode used is $diski%, $diskweizhi !'"

  wget  --output-document=/dev/null " disk : $ipis $time1 max inode used is $diski%, $diskweizhi "

  unset diskweizhi

fi

 

#net#

if [ $netxuanzeeth0 = "yes" -o $netxuanzeeth1 = "yes" ];then

    sar -n DEV 1 | tail -n 3 | head -n 2 > sar1.txt

fi

while [ $netxuanzeeth0 = "yes" ] ; do

  neteth0in=`cat sar1.txt | head -n 1 | awk '{print $5}' | awk -F. '{print $1}'`

  neteth0out=`cat sar1.txt | head -n 1  | awk '{print $6}' | awk -F. '{print $1}'`

  neteth0inaver=`expr $neteth0in / 1024`

  neteth0outaver=`expr $neteth0out / 1024`

    echo $neteth0inaver $neteth0outaver

    if [ $neteth0inaver -ge 100000 ] ; then

        neteth0inaver=0

    fi

    if [ $neteth0inaver -ge $neteth0fazhi ] ; then

         echo "alarm net : $ipis $time1 net eth0 in flux = $neteth0inaver Kb/s!" >> $dir1/$ipis.alltest.system.$time2.log

         echo "history net : $ipis $time1 net eth0 in flux = $neteth0inaver Kb/s!" >> $dir1/$ipis.alltest.system.$time2.log

        #ssh 10.10.10.248 "fetion.sh phone="$msgid" msg='net alarm: $ipis $time1 eth0 in=$neteth0inaver Kb/s!'"

         wget  --output-document=/dev/null " alarm: $ipis $time1 eth0 in=$neteth0inaver Kb/s!"

       else

         echo "history net : $ipis $time1 net eth0 in flux = $neteth0inaver Kb/s!" >> $dir1/$ipis.alltest.system.$time2.log

    fi

      

   if [ $neteth0outaver -ge 100000 ] ; then

        neteth0outaver=0

   fi

   if [ $neteth0outaver -ge $neteth0fazhi ] ; then

      echo "alarm net : $ipis $time1 net eth0 out flux = $neteth0outaver Kb/s!" >> $dir1/$ipis.alltest.system.$time2.log

      echo "history net : $ipis $time1 net eth0 out flux = $neteth0outaver Kb/s!" >> $dir1/$ipis.alltest.system.$time2.log

  #ssh 10.10.10.248 "fetion.sh phone="$msgid" msg='alarm net: $ipis $time1 net eth0 out flux=$neteth0outaver Kb/s!'"

   wget  --output-document=/dev/null " net: $ipis $time1 net eth0 out flux=$neteth0outaver Kb/s!"

     else

      echo "history net : $ipis $time1 net eth0 out flux = $neteth0outaver Kb/s!" >> $dir1/$ipis.alltest.system.$time2.log

   fi

   netxuanzeeth0=done

done

 

while [ $netxuanzeeth1 = "yes" ] ; do

  neteth1in=`cat sar1.txt | head -n 1 | awk '{print $5}' | awk -F. '{print $1}'`

  neteth1out=`cat sar1.txt | head -n 1  | awk '{print $6}' | awk -F. '{print $1}'`

  neteth1inaver=`expr $neteth1in / 1024`

  neteth1outaver=`expr $neteth1out / 1024`

    echo $neteth1inaver $neteth1outaver

 

    if [ $neteth1inaver -ge 100000 ] ; then

        neteth1inaver=0

    fi

    if [ $neteth1inaver -ge $neteth1fazhi ] ; then

         echo "alarm net : $ipis $time1 net eth1 in flux = $neteth1inaver Kb/s!" >> $dir1/$ipis.alltest.system.$time2.log

         echo "history net : $ipis $time1 net eth1 in flux = $neteth1inaver Kb/s!" >> $dir1/$ipis.alltest.system.$time2.log

        #ssh 10.10.10.248 "fetion.sh phone="$msgid" msg='net alarm: $ipis $time1 eth1 in=$neteth1inaver Kb/s!'"

         wget --output-document=/dev/null " alarm: $ipis $time1 eth1 in=$neteth1inaver Kb/s!"

       else

         echo "history net : $ipis $time1 net eth1 in flux = $neteth1inaver Kb/s!" >> $dir1/$ipis.alltest.system.$time2.log

    fi

 

   if [ $neteth1outaver -ge 100000 ] ; then

        neteth1outaver=0

    fi

   if [ $neteth1outaver -ge $neteth1fazhi ] ; then

      echo "alarm net : $ipis $time1 net eth1 out flux = $neteth1outaver Kb/s!" >> $dir1/$ipis.alltest.system.$time2.log

      echo "history net : $ipis $time1 net eth1 out flux = $neteth1outaver Kb/s!" >> $dir1/$ipis.alltest.system.$time2.log

  #ssh 10.10.10.248 "fetion.sh phone="$msgid" msg='alarm net: $ipis $time1 net eth1 out flux=$neteth1outaver Kb/s!'"

   wget  --output-document=/dev/null " net: $ipis $time1 net eth1 out flux=$neteth1outaver Kb/s!"

     else

      echo "history net : $ipis $time1 net eth1 out flux = $neteth1outaver Kb/s!" >> $dir1/$ipis.alltest.system.$time2.log

    fi

    netxuanzeeth1=done

done

 

#ping

ping=`ping -c 5 | awk -F'=' '/time=/ {n++;sum+=$NF+0}END{print sum/n}'|awk -F "." '{print$1}'`

echo $ping

if [ $ping -ge $pingfazhi ] ; then

    echo "alarm ping : $ipis $time1 ping = $ping ms!" >> $dir1/$ipis.alltest.system.$time2.log

    echo "history ping : $ipis $time1 ping = $ping ms!"  >> $dir1/$ipis.alltest.system.$time2.log

    echo "1"  >> $dir1/tmp/ping.system.tmp

else

    echo "history ping : $ipis $time1 ping = $ping ms!"  >> $dir1/$ipis.alltest.system.$time2.log

    echo "0"  >> $dir1/tmp/ping.system.tmp

fi

  for (( pingi = 1 ; pingi <= $pingcishu ; pingi++))

  do

    pinga=`tac $dir1/tmp/ping.system.tmp | sed -n "${pingi}p"`

      pingb=$((pingb + pinga))

  done

if [ $pingb -ge $pingcishu ] ; then

# ssh 10.10.10.248 "fetion.sh phone="$msgid" msg='alarm ping : $ipis $time1 ping = $ping ms!'"

  wget  --output-document=/dev/null " ping : $ipis $time1 ping = $ping ms"

echo yes

else

echo no

fi

上一篇:如何查服务器的型号与S/N
下一篇:检测网络健康状况