在服务器较多的系统环境中,手工运维方式显然已经不能满足需求,当故障发生时,我们需要提前获得预警消息,及时解决故障隐患。同时还要省时省力,通过SHELL脚本来协助我们完成一些重复性的工作是一个不错的选择。这里主要提供了CPU、内存、磁盘利用率监控的SHELL脚本。可以根据自己的系统环境做简单的修改即可使用。

   附CPU压力测试SHELL脚本(网上找到的,经测试可用)执行脚本时后面添加CPU数量,如:

  ./killcpu.sh 2 会产生两个进程号,记住这2个进程号,测试完后杀掉进程,释放CPU资源。

 
  
  1. #! /bin/sh  
  2. # filename killcpu.sh 
  3. for i in `seq $1` 
  4. do 
  5.   echo -ne "  
  6. i=0;  
  7. while true  
  8. do  
  9. ii=i+1;  
  10. done" | /bin/sh & 
  11.   pid_array[$i]=$! ; 
  12. done 
  13. for i in "${pid_array[@]}"; do 
  14.   echo 'kill ' $i ';'; 
  15. done 
 
  
  1.  
  2. # 服务器CPU/MEM/DISK监控脚本(server_moniter.sh) 
  3. #------------------------------------------------------------------ 
  4. # 对服务器的CPU/MEM/DISK设定阈值,动态监控利用率,超过阈值发送邮件 
  5. # 或者短信告警 
  6. # 
  7. # 本脚本通过调用watch_mem函数实现内存利用率监控,这里的内存利用率计算是进程实
  8. # 际使用的内存,也就是used-buffer/cache,超过阈值发送息。 
  9. #  
  10. # 通过调用watch_hd函数实现磁盘利用率监控,这里的磁盘利用率,我采用 
  11. # 一个一个磁盘或分区检索,这种方式对于磁盘或分区较多时,可能不太方 
  12. # 便,可以采用循环判断。之前提供的脚本里面有,可以参考。 
  13. #  
  14. # 通过调用wath_cpu函数实现CPU利用率监控,这里是通过在一分钟内2次采 
  15. # 集/proc/stat中的CPU数据,再对每1次采集点的数据中的使用CPU时间与空闲CPU时
  16. # 间累加求和,最后将2次采集点运算结果求差,获得CPU在一分钟类# 使用时间利用率,
  17. # 这种计算方式比较准确,如果超过阈值发送消息。 
  18. # 
  19. # 在每一个函数中设置一个判断返回值,如果超过阈值,条件为真则返回1,如果返回值
  20. # 为1则 将告警消息附加到report中,最后如果report这个文件 
  21. # 存在,发送邮件通知管理员,将report做为邮件的正文。 
  22. #
  23. # 可以将这个脚本添加到定时任务,每隔10分种执行一次检查。
  24. #------------------------------------------------------------------ 
  25.  
  26. #! /bin/bash 
  27.  
  28. mem_quota=20 
  29. hd_quota=50 
  30. cpu_quota=80 
  31.  
  32.  
  33. # watch memory usage 
  34.  
  35. watch_mem() 
  36. { 
  37.   memtotal=`cat /proc/meminfo |grep "MemTotal"|awk '{print $2}'` 
  38.   memfree=`cat /proc/meminfo |grep "MemFree"|awk '{print $2}'` 
  39.   cached=`cat /proc/meminfo |grep "^Cached"|awk '{print $2}'` 
  40.   buffers=`cat /proc/meminfo |grep "Buffers"|awk '{print $2}'` 
  41.  
  42.   mem_usage=$((100-memfree*100/memtotal-buffers*100/memtotal-cached*100/memtotal)) 
  43.  
  44.   if [ $mem_usage -gt $mem_quota ];then 
  45.      mem_message="WARN! The Memory usage is over than $mem_usage%" 
  46.      return 1 
  47.      else 
  48.      return 0 
  49.   fi 
  50. } 
  51.  
  52.  
  53. # watch disk usage 
  54.  
  55. watch_hd() 
  56. { 
  57.   sda1_usage=`df |grep 'sda1'|awk '{print $5}'|sed 's/%//g'` 
  58.   sda2_usage=`df |grep 'sda2'|awk '{print $5}'|sed 's/%//g'` 
  59.   lv01_usage=`df |grep opt|awk '{print $4}'|sed 's/\%//g'` 
  60.    
  61.   if [ $sda1_usage -gt $hd_quota ] || [ $sda2_usage -gt $hd_quota ] || [ $lv01_usage -gt $hd_quota ]; then 
  62.      hd_message="WARN! The Hard Disk usage is over than $hd_quota%" 
  63.      return 1 
  64.      else 
  65.      return 0 
  66.   fi 
  67. } 
  68.  
  69.  
  70. # watch cpu usage in one minute 
  71.  
  72. get_cpu_info() 
  73. { 
  74.   cat /proc/stat|grep '^cpu[0-9]'|awk '{used+=$2+$3+$4;unused+=$5+$6+$7+$8} END{print used,unused}' 
  75. } 
  76.  
  77. watch_cpu() 
  78. { 
  79.   time_point_1=`get_cpu_info` 
  80.   sleep 60 
  81.   time_point_2=`get_cpu_info` 
  82.   cpu_usage=`echo $time_point_1 $time_point_2|awk '{used=$3-$1;total=$3+$4-$1-$2;print used*100/total}'` 
  83.   
  84.   if [[ $cpu_usage > $cpu_quota ]]; then 
  85.      cpu_message="WARN! The CPU Usage is over than $cpu_quota%" 
  86.      return 1 
  87.      else 
  88.      return 0 
  89.   fi 
  90. } 
  91.  
  92. proc_cpu_top10() 
  93. { 
  94.   proc_busiest=`ps aux|sort -nk3r|head -n 11` 
  95. } 
  96.  
  97. report=/root/server_report.log 
  98. watch_mem 
  99. if [ $? -eq 1 ]; then 
  100.    date >> $report 
  101.    echo "$mem_message" >> $report 
  102. fi 
  103.  
  104. watch_hd 
  105. if [ $? -eq 1 ]; then 
  106.    date >> $report 
  107.    echo "$hd_message" >> $report 
  108. fi 
  109.  
  110. watch_cpu 
  111. if [ $? -eq 1 ]; then 
  112.    date >> $report 
  113.    echo "$cpu_message" >> $report 
  114.    proc_cpu_top10 
  115.    echo "$proc_busiest" >> $report 
  116. fi 
  117.  
  118. if [ -a $report ]; then 
  119.    mail -s "CUP/MEM/DISK Stat of Alarm" wenfeng_246@163.com < $report   
  120.    rm -rf $report 
  121. fi 
  122.