IT技术博客大学习 共学习 共进步

我常用的主机监控shell脚本

DBA Blog 2009-11-06 09:20:27 浏览 13,103 次

     有一段时间没更新Blog了主要是时间有点紧张。然而最近时不时有互联网的朋友问我关于服务器监控方面的问题?问常用的服务器监控除了用开源软件,比如:cactinagios监控外是否可以自己写shell脚本呢?根据自己的需求写出的shell脚本更能满足需求,更能细化主机监控的全面性。

     下面是我常用的几个主机监控的脚本,大家可以根据自己的情况在进行修改,希望能给大家一点帮助。

    1、查看主机网卡流量

 

以下是代码片段:
#!/bin/bash
#network
#Mike.Xu
while : ; do
      time=\’date +%m"-"%d" "%k":"%M\’
      day=\’date +%m"-"%d\’
      rx_before=\’ifconfig eth0|sed -n "8"p|awk \’{print $2}\’|cut -c7-\’
      tx_before=\’ifconfig eth0|sed -n "8"p|awk \’{print $6}\’|cut -c7-\’
      sleep 2
      rx_after=\’ifconfig eth0|sed -n "8"p|awk \’{print $2}\’|cut -c7-\’
      tx_after=\’ifconfig eth0|sed -n "8"p|awk \’{print $6}\’|cut -c7-\’
      rx_result=$[(rx_after-rx_before)/256]
      tx_result=$[(tx_after-tx_before)/256]
      echo "$time Now_In_Speed: "$rx_result"kbps Now_OUt_Speed: "$tx_result"kbps"
      sleep 2
done

 

 

2、系统状况监控

 

以下是代码片段:
#!/bin/sh
#systemstat.sh
#Mike.Xu
IP=192.168.1.227
top -n 2| grep "Cpu" >>./temp/cpu.txt
free -m | grep "Mem" >> ./temp/mem.txt
df -k | grep "sda1" >> ./temp/drive_sda1.txt
#df -k | grep sda2 >> ./temp/drive_sda2.txt
df -k | grep "/mnt/storage_0" >> ./temp/mnt_storage_0.txt
df -k | grep "/mnt/storage_pic" >> ./temp/mnt_storage_pic.txt
time=`date +%m"."%d" "%k":"%M`
connect=`netstat -na | grep "219.238.148.30:80" | wc -l`
echo "$time  $connect" >> ./temp/connect_count.txt

 

3、监控主机的磁盘空间,当使用空间超过90%就通过发mail来发警告

 

以下是代码片段:
#!/bin/bash
#monitor available disk space
SPACE=\’df | sed -n \’/ \\ / $ / p\’ | gawk \’{print $5}\’ | sed  \’s/%//\’
if [ $SPACE -ge 90 ]
then 
fty89@163.com
fi

 

4、 监控CPU和内存的使用情况

 

以下是代码片段:
#!/bin/bash
#script  to capture system statistics
OUTFILE=/home/xu/capstats.csv
DATE=\’date +%m/%d/%Y\’
TIME=\’date +%k:%m:%s\’
TIMEOUT=\’uptime\’
VMOUT=\’vmstat 1 2\’
 USERS=\’echo $TIMEOUT | gawk \’{print $4}\’ \’
LOAD=\’echo $TIMEOUT | gawk \’{print $9}\’ | sed "s/,//\’ \’
FREE=\’echo $VMOUT | sed -n \’/[0-9]/p\’ | sed -n \’2p\’ | gawk \’{print $4} \’ \’
IDLE=\’echo  $VMOUT | sed -n \’/[0-9]/p\’ | sed -n \’2p\’ |gawk \’{print $15}\’ \’ 
echo "$DATE,$TIME,$USERS,$LOAD,$FREE,$IDLE" >> $OUTFILE

 

5、全方位监控主机

 

以下是代码片段:
#!/bin/bash
# check_xu.sh
# 0 * * * * /home/check_xu.sh

DAT="`date +%Y%m%d`"
HOUR="`date +%H`"
DIR="/home/oslog/host_${DAT}/${HOUR}"
DELAY=60
COUNT=60
# whether the responsible directory exist 
if ! test -d ${DIR}
then
        /bin/mkdir -p ${DIR}
fi
# general check
export TERM=linux
/usr/bin/top -b -d ${DELAY} -n ${COUNT} > ${DIR}/top_${DAT}.log 2>&1 &
# cpu check
/usr/bin/sar -u ${DELAY} ${COUNT} > ${DIR}/cpu_${DAT}.log 2>&1 &
#/usr/bin/mpstat -P 0 ${DELAY} ${COUNT} > ${DIR}/cpu_0_${DAT}.log 2>&1 &
#/usr/bin/mpstat -P 1 ${DELAY} ${COUNT} > ${DIR}/cpu_1_${DAT}.log 2>&1 &
# memory check
/usr/bin/vmstat ${DELAY} ${COUNT} > ${DIR}/vmstat_${DAT}.log 2>&1 &
# I/O check
/usr/bin/iostat ${DELAY} ${COUNT} > ${DIR}/iostat_${DAT}.log 2>&1 &
# network check
/usr/bin/sar -n DEV ${DELAY} ${COUNT} > ${DIR}/net_${DAT}.log 2>&1 &
#/usr/bin/sar -n EDEV ${DELAY} ${COUNT} > ${DIR}/net_edev_${DAT}.log 2>&1 &

 

   放在crontab里每小时自动执行:

以下是代码片段:
0 * * * * /home/check_xu.sh

 

   这样会在/home/oslog/host_yyyymmdd/hh目录下生成各小时cpu、内存、网络,IO的统计数据。

 

   如果某个时间段产生问题了,就可以去看对应的日志信息,看看当时的主机性能如何。

建议继续学习

  1. Mysql监控指南 (阅读 21,102)
  2. 批量添加主机到cacti+nagios的监控报警系统中 (阅读 14,681)
  3. 7 天打造前端性能监控系统 (阅读 11,062)
  4. 如何监控HP服务器硬件状态 (阅读 10,505)
  5. Cacti 添加 Nginx 监控 (阅读 10,362)
  6. Linux下三种常用的流量监控软件对比 (阅读 9,982)
  7. Cacti 添加 Memcached 监控 (阅读 9,162)
  8. Cacti 添加 Apache 监控 (阅读 8,983)
  9. 你应该知道的16个Linux服务器监控命令 (阅读 8,407)
  10. cacti+apache+php+mysql+rrdtool搭建流量监控平台 (阅读 6,663)