check_volume.sh 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #!/usr/bin/env bash
  2. # Nagios Exit Codes
  3. OK=0
  4. WARNING=1
  5. CRITICAL=2
  6. UNKNOWN=3
  7. usage()
  8. {
  9. cat <<EOF
  10. Check the capacity of a volume using df.
  11. Options:
  12. -v Specify volume as mountpoint
  13. -c Critical threshold as an int (0-100)
  14. -w Warning threshold as an int (0-100)
  15. -s Skip threshold checks
  16. Usage: $0 -v /mnt -c 95 -w 90
  17. EOF
  18. }
  19. if [ $# -lt 6 ];
  20. then
  21. usage
  22. exit 1
  23. fi
  24. # Define now to prevent expected number errors
  25. VOL=/dev/da0
  26. CRIT=0
  27. WARN=0
  28. SKIP=0
  29. OS=$(uname)
  30. while getopts "hc:sv:w:" OPTION
  31. do
  32. case $OPTION in
  33. h)
  34. usage
  35. ;;
  36. c)
  37. CRIT="$OPTARG"
  38. ;;
  39. s)
  40. SKIP=1
  41. ;;
  42. v)
  43. VOL="$OPTARG"
  44. ;;
  45. w)
  46. WARN="$OPTARG"
  47. ;;
  48. \?)
  49. exit 1
  50. ;;
  51. esac
  52. done
  53. if [[ $OS == AIX ]]; then
  54. STATUS=$(df "$VOL" | awk '!/Filesystem/ { print $4 }' | sed 's/%//')
  55. SIZE=$(df -P -m "$VOL" | awk '!/Filesystem/ { print $4 }')
  56. USED=$(df -P -m "$VOL" | awk '!/Filesystem/ { print $3 }')
  57. else
  58. STATUS=$(df -h "$VOL" | awk '!/Filesystem/ { print $5 }' | sed 's/%//')
  59. SIZE=$(df -h "$VOL" | awk '!/Filesystem/ { print $2 }')
  60. USED=$(df -h "$VOL" | awk '!/Filesystem/ { print $3 }')
  61. fi
  62. if [ $SKIP -eq 1 ]; then
  63. echo "$VOL is at ${STATUS}% capacity, $USED of $SIZE (Threshold skipped)"
  64. exit $OK
  65. fi
  66. if [ $STATUS -gt $CRIT ]; then
  67. echo "$VOL is at ${STATUS}% capacity! $USED of $SIZE"
  68. exit $CRITICAL
  69. elif [ $STATUS -gt $WARN ]; then
  70. echo "$VOL is at ${STATUS}% capacity! $USED of $SIZE"
  71. exit $WARNING
  72. else
  73. echo "$VOL is at ${STATUS}% capacity, $USED of $SIZE"
  74. exit $OK
  75. fi