check_rsyslog.sh 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. #!/usr/bin/env bash
  2. # awk '{ for( i=NF; i>=1; i--) print $i }'
  3. # Author: Jon Schipp
  4. # Date: 01-27-2014
  5. ########
  6. # Examples:
  7. # 1.) Check presence of disk queue (buffer)
  8. # $ ./check_rsyslog.sh -T buffer -q rsyslog -d /var/spool/rsyslog
  9. # 1.) Check number of logs currently in the queue
  10. # $ ./check_rsyslog.sh -T queued -f /var/log/impstats.log -c 100
  11. # Nagios Exit Codes
  12. OK=0
  13. WARNING=1
  14. CRITICAL=2
  15. UNKNOWN=3
  16. # Default rsyslog spool directory
  17. WORK_DIRECTORY=/var/spool/rsyslog
  18. usage()
  19. {
  20. cat <<EOF
  21. Options:
  22. -c <int> Critical number
  23. -w <int> Warning number
  24. -q <basename> Check for presence of disk queue files (use with \`\`-T buffer'')
  25. -d <dir> Specify \$WorkDirectory (def: /var/spool/rsyslog) (use with \`\`-T buffer)
  26. -f <file> Set file when using impstats checks
  27. -T <type> Check type (buffer/queued)
  28. buffer - Check for presence of buffer files
  29. queued - Check impstats log file for number of queued logs
  30. Usage: $0 -S buffer -q buf
  31. EOF
  32. }
  33. compare () {
  34. COUNT=$1
  35. if [ $COUNT -gt $CRIT ]; then
  36. echo "CRITICAL: $BASENAME: $COUNT queued messages"
  37. exit $CRITICAL;
  38. elif [ $COUNT -gt $WARN ]; then
  39. echo "WARNING: $BASENAME: $COUNT queued messages"
  40. exit $WARNING;
  41. else
  42. echo "OK: $BASENAME: $COUNT queued messages"
  43. exit $OK;
  44. fi
  45. }
  46. argcheck() {
  47. # if less than n argument
  48. if [ $ARGC -lt $1 ]; then
  49. echo "Missing arguments! Use \`\`-h'' for help."
  50. exit 1
  51. fi
  52. }
  53. # Initialize variables
  54. ARGC=$#
  55. QUEUE_CHECK=0
  56. QUEUED_STATS_CHECK=0
  57. FILE=0
  58. CRIT=0
  59. WARN=0
  60. argcheck 1
  61. while getopts "hc:w:f:d:q:T:" OPTION
  62. do
  63. case $OPTION in
  64. h) usage ;;
  65. c) CRIT=$OPTARG ;;
  66. w) WARN=$OPTARG ;;
  67. d)
  68. WORK_DIRECTORY=$(echo $OPTARG | sed 's/\/$//')
  69. ;;
  70. f)
  71. if [ -f $OPTARG ]; then
  72. FILENAME="$OPTARG"
  73. FILE=1
  74. else
  75. echo "Does $OPTARG exist and is a regular file?"
  76. exit $WARNING
  77. fi
  78. ;;
  79. q)
  80. BASENAME=$OPTARG
  81. ;;
  82. T)
  83. if [[ "$OPTARG" == "queued" ]]; then
  84. QUEUED_STATS_CHECK=1
  85. elif [[ "$OPTARG" == "buffer" ]]; then
  86. QUEUE_CHECK=1
  87. else
  88. echo "$OPTARG is not a valid check type"
  89. exit $WARNING
  90. fi
  91. ;;
  92. \?)
  93. exit $WARNING ;;
  94. esac
  95. done
  96. if [ $QUEUE_CHECK -eq 1 ]; then
  97. # Remove stale 0 byte queue files
  98. # find $WORK_DIRECTORY -type f -size 0c -regextype posix-basic -regex ".*/$BASENAME.*\.[0-9]\{8\}" | xargs rm -rf
  99. COUNT=$(find $WORK_DIRECTORY -type f -size +0c -regextype posix-basic -regex ".*/$BASENAME.*\.[0-9]\{7\}[2-9]" | wc -l)
  100. if [ $COUNT -gt 0 ]; then
  101. echo "Found buffer files"
  102. find $WORK_DIRECTORY -type f -size +0c -regextype posix-basic -regex ".*/$BASENAME.*\.[0-9]\{7\}[2-9]"
  103. exit $CRITICAL
  104. else
  105. echo "No buffer files found"
  106. exit $OK
  107. fi
  108. fi
  109. if [ $QUEUED_STATS_CHECK -eq 1 ] && [ $FILE -eq 1 ]; then
  110. RESULT=$(awk "/$BASENAME/ && /$(date +"%b %e")/" $FILENAME | \
  111. grep -o ' size=[0-9]\+ ' | tail -1 | awk -F = '{ print $2 }')
  112. compare $RESULT
  113. fi