在Nagios监控中,默认是没有check_mem这个插件的,也就是说不能监控内存的使用状态,而swap是可以的。下面贴上check_mem的代码:

 
  
  1. #!/bin/bash 
  2.  
  3. # check_mem for Nagios 
  4. # http://cto.luxiaok.com 
  5. # 2013-03-25 
  6.  
  7. USAGE="`basename $0` [-w|--warning]<percent free:0-99> [-c|--critical]<percent free:0-99>" 
  8. THRESHOLD_USAGE="WARNING threshold must be greater than CRITICAL: `basename $0` $*" 
  9. critical="" 
  10. warning="" 
  11. STATE_OK=0 
  12. STATE_WARNING=1 
  13. STATE_CRITICAL=2 
  14. STATE_UNKNOWN=3 
  15. # print usage 
  16. if [[ $# -lt 4 ]] 
  17. then 
  18.         echo "" 
  19.         echo "Wrong Syntax: `basename $0` $*" 
  20.         echo "" 
  21.         echo "Usage: $USAGE" 
  22.         echo "" 
  23.         exit 0 
  24. fi 
  25. # read input 
  26. while [[ $# -gt 0 ]] 
  27.   do 
  28.         case "$1" in 
  29.                -w|--warning) 
  30.                shift 
  31.                warning=$1 
  32.         ;; 
  33.                -c|--critical) 
  34.                shift 
  35.                critical=$1 
  36.         ;; 
  37.         esac 
  38.         shift 
  39.   done 
  40.  
  41. # verify input 
  42. if [[ $warning -eq $critical || $warning -lt $critical ]] 
  43. then 
  44.         echo "" 
  45.         echo "$THRESHOLD_USAGE" 
  46.         echo "" 
  47.         echo "Usage: $USAGE" 
  48.         echo "" 
  49.         exit 0 
  50. fi 
  51. # Total memory available 
  52. total=`free -m | head -2 |tail -1 |gawk '{print $2}'` 
  53. # Total memory used 
  54. used=`free -m | head -2 |tail -1 |gawk '{print $3}'` 
  55. # Calc total minus used 
  56. free=`free -m | head -2 |tail -1 |gawk '{print $4+$6+$7}'` 
  57. # Free Mem = free + buffers + cached 
  58. # Normal values 
  59. #echo "$total"MB total 
  60. #echo "$used"MB used 
  61. #echo "$free"MB free 
  62. # make it into % percent free = ((free mem / total mem) * 100) 
  63.  
  64. FREETMP=`expr $free \* 100` 
  65. percent=`expr $FREETMP / $total` 
  66.  
  67. if [[ "$percent" -le  $critical ]] 
  68.         then 
  69.                 echo "Critical - $free MB ($percent%) Free Memory" 
  70.                 exit 2 
  71. elif [[ "$percent" -le  $warning ]] 
  72.         then 
  73.                 echo "Warning - $free MB ($percent%) Free Memory" 
  74.                 exit 1 
  75. elif [[ "$percent" -gt  $warning ]] 
  76.         then 
  77.                 echo "OK - $free MB ($percent%) Free Memory" 
  78.                 exit 0 
  79. else 
  80.                 echo "Unknow Status" 
  81.                 exit 3 
  82. fi 

    脚本内容来源于网络,基本是2008年以前的代码,我这里进行了优化和修改。需要注意的是参数-w-c所匹配的值的十进制的百分数,即0-99,其实到100也没问题。但不要写成了内存的大小,那就悲剧了,不同的Server内存不同,用了多少M或者多少G也不同,所以记住是匹配十进制的百分比。