1
0

check_cpu_snmp.sh 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. #!/bin/bash
  2. #############################################################
  3. # Nagios Linux/Windows CPU usage monitoring (using SNMP)
  4. #############################################################
  5. # Author : Sunchai Rungruengchoosakul
  6. # Date : Feb 7, 2011
  7. # Version : 1.0
  8. # License : GPL
  9. #############################################################
  10. # Require:
  11. # - snmpwalk command
  12. #
  13. # Check total cpu
  14. # # snmpwalk -v 2c -c COMMUNITY x.x.x.x -On .1.3.6.1.2.1.25.3.3.1.1
  15. #
  16. # Check cpu usage
  17. # # snmpwalk -v 2c -c COMMUNITY x.x.x.x -On .1.3.6.1.2.1.25.3.3.1.2
  18. #
  19. #############################################################
  20. # Change Log :-
  21. # Make plugin with performance output :-)
  22. #
  23. # Performance specification : 'label'=value[UOM];[warn];[crit];[min];[max]
  24. # Sample :DISK OK - free space: / 3326 MB (56%);| /=2643MB;5948;5958;0;5968
  25. #
  26. # From URL http://nagiosplug.sourceforge.net/developer-guidelines.html#AEN201
  27. #############################################################
  28. help () {
  29. echo "===================================="
  30. echo "check_cpu_snmp.bash"
  31. echo "===================================="
  32. echo "Author : Sunchai Rungruengchoosakul "
  33. echo "Version : 1.0"
  34. echo "Date : Feb 7, 2011"
  35. echo "===================================="
  36. echo "Option:-"
  37. echo " -w : CPU Usage warning (default 60%)"
  38. echo " -c : CPU Usage critical (default 90%)"
  39. echo " -H* : Hostname / IP address"
  40. echo " -C* : SNMP Community string"
  41. echo " -d : Debug option"
  42. echo " * is require parameter"
  43. exit 0
  44. }
  45. WARNING="60"
  46. CRITICAL="90"
  47. COMMUNITY=""
  48. DESTINATION=""
  49. DEBUG="n"
  50. while getopts ":H:C:c:w:hd" Option
  51. do
  52. case $Option in
  53. w )
  54. WARNING=$OPTARG
  55. ;;
  56. c )
  57. CRITICAL=$OPTARG
  58. ;;
  59. H )
  60. DESTINATION=$OPTARG
  61. ;;
  62. C )
  63. COMMUNITY=$OPTARG
  64. ;;
  65. h )
  66. help
  67. ;;
  68. d )
  69. DEBUG=y
  70. ;;
  71. esac
  72. done
  73. shift $(($OPTIND - 1))
  74. # Check parameter
  75. [ -z $COMMUNITY ] && help
  76. [ -z $DESTINATION ] && help
  77. # Show debug
  78. [ $DEBUG == "y" ] && echo Community = $COMMUNITY
  79. [ $DEBUG == "y" ] && echo Destination = $DESTINATION
  80. #################
  81. # Engine from report monitoring tools
  82. # Make temp file
  83. TMP_FILE=/tmp/CPU_RRD_$RANDOM
  84. # Snmpwalk to HOSTMIB
  85. snmpwalk -v 1 -c $COMMUNITY $DESTINATION -On .1.3.6.1.2.1.25.3.3.1.2 > $TMP_FILE
  86. # Show debug
  87. [ $DEBUG == "y" ] && echo "RAW snmp ==" && cat $TMP_FILE
  88. # Summary all CPU Usage
  89. AAA=`awk '{ sum += $4 }; END { print sum }' $TMP_FILE`
  90. # Define total cpu
  91. BBB=`wc -l $TMP_FILE | awk '{print $1}'`
  92. # Fix problem with single cpu
  93. [ -z ${BBB} ] && BBB="1"
  94. [ "${BBB}" == "0" ] && BBB="1"
  95. # Show debug
  96. [ $DEBUG == "y" ] && echo "CPU USAGE TOTAL: "$AAA
  97. [ $DEBUG == "y" ] && echo "CPU NUM: "$BBB
  98. # Calculate total cpu usage
  99. let "CCC = ${AAA}/${BBB}"
  100. #echo "CPU USAGE AVG: "${CCC}
  101. # Remove temp file
  102. rm -f $TMP_FILE > /dev/null 2>&1
  103. #################
  104. # Unknow status
  105. [ -z $CCC ] && echo "Cannot retrive information" && exit 3
  106. # Sample from plugin ## time=0.627618s;;;0.000000 size=2016B;;;0
  107. # 'label'=value[UOM];[warn];[crit];[min];[max]
  108. echo "CPU Usage : $CCC % |cpu=$CCC%;$WARNING;$CRITICAL;0;100"
  109. # Normal status
  110. [ $CCC -lt $WARNING ] && exit 0
  111. # Warning status
  112. [ $CCC -lt $CRITICAL ] && exit 1
  113. # Critical status
  114. [ $CCC -gt $CRITICAL ] && exit 2