Procházet zdrojové kódy

check_bro.sh: don't match text waiting during status check

Jon Schipp před 12 roky
rodič
revize
fb896bd9ab
1 změnil soubory, kde provedl 36 přidání a 36 odebrání
  1. 36 36
      check_bro.sh

+ 36 - 36
check_bro.sh

@@ -59,12 +59,12 @@ This script should be run on the Bro manager.
                                 myricom - Average Myricom Sniffer driver packet loss by IP or FQDN for a single-
 					 (\`\`-i 192.168.1.1'') or set (\`\`-i "192.168.1.1,192.168.1.2") of Bro nodes
                                          Connects to nodes via SSH (pub-key auth). If username is not root use ``-u''.
-                                print   - Print Bro values 
+                                print   - Print Bro values
         -u <user>               Username for the myricom check (def: root)
         -w <int>                Warning threshold as percent of packet loss
 
 Usage: $0 -f /usr/local/bro-dev/bin/brotcl -T status
-$0 -f /usr/local/bro-2.2/logs/current/capture_loss.log -T capture_loss -c 20 
+$0 -f /usr/local/bro-2.2/logs/current/capture_loss.log -T capture_loss -c 20
 EOF
 }
 
@@ -113,7 +113,7 @@ do
              elif [[ $1 == *myri_counters ]]; then
                 MYRI_COUNTERS=$1
              elif [[ $1 == *capture_loss.log ]]; then
-                CAPTURE_LOG=$1  
+                CAPTURE_LOG=$1
              else
                 echo "File name appears to be incorrect, maybe try setting the approprate variable in $0."
              fi
@@ -124,15 +124,15 @@ do
              ;;
          l)
             LIST_NODES=1
-            ;; 
+            ;;
          i)
              if [ $LOSS_CHECK -eq 1 ] && [[ "$OPTARG" == all ]]; then
                      WORKERS=".*"
-             elif [ $LOSS_CHECK -eq 1 ]; then    
+             elif [ $LOSS_CHECK -eq 1 ]; then
                      WORKERS=$(echo "$OPTARG" | sed 's/,/:\\|/g')
              elif [ $MYRI_CHECK -eq 1 ]; then
                      NODE=$(echo "$OPTARG" | sed 's/,/ /g')
-             else 
+             else
                      echo "ERROR: Argument is in incorrect format or \`\`-T <type>'' was not specified first"
                      exit $UNKOWN
              fi
@@ -142,7 +142,7 @@ do
                 ;;
          T)
              if [[ "$OPTARG" == status ]]; then
-                        STATUS_CHECK=1 
+                        STATUS_CHECK=1
              elif [[ "$OPTARG" == myricom ]]; then
                         MYRI_CHECK=1
              elif [[ "$OPTARG" == loss ]]; then
@@ -183,22 +183,22 @@ if [ $LIST_NODES -eq 1 ]; then
 fi
 
 if [ $LOSS_CHECK -eq 1 ]; then
-       
+
  # Total average packet loss as a percent for specified workers
 
 FLOAT_LOSS=$($BROCTL netstats | grep "$WORKERS" | sed 's/[a-z]*=//g' | awk '{ drop += $4 ; link += $5 } END { printf("%f\n", ((drop/NR) / (link/NR))* 100) }')
 LOSS=$(/usr/bin/printf "%d\n" $FLOAT_LOSS 2>/dev/null)
 
         if [ $LOSS -gt $CRIT ] ;then
-                
+
                 echo "Average packet loss is: $FLOAT_LOSS"
                 exit $CRITICAL
 
         elif [ $LOSS -gt $WARN ]; then
-                
+
                 echo "Average packet loss is: $FLOAT_LOSS"
                 exit $WARNING
-        else 
+        else
                 echo "Average packet loss is: $FLOAT_LOSS"
                 exit $OK
         fi
@@ -211,18 +211,18 @@ if [ $STATUS_CHECK -eq 1 ]; then
 # Broctl stderr is whitespace separated and we need to match on entire line
 IFS=$'\n'
 
-        for line in $($BROCTL status 2>&1 | grep -v Name)
-        do      
+        for line in $($BROCTL status 2>&1 | grep -v 'Name\|waiting')
+        do
                 NAME=$(echo "$line" | awk '{ print $1 }')
-                case "$line" in 
+                case "$line" in
                 *stop*)
                         echo "$NAME has stopped"
                         STOPPED=$((STOPPED+1))
-                        ;; 
+                        ;;
                 *fail*)
                         echo "$NAME has crashed"
                         CRASHED=$((CRASHED+1))
-                        ;; 
+                        ;;
                 *run*)
                         echo "$NAME is running"
                         RUNNING=$((RUNNING+1))
@@ -233,41 +233,41 @@ IFS=$'\n'
                         ;;
                 esac
         done
-        
+
         if [ $STOPPED -gt 0 ] || [ $CRASHED -gt 0 ] || [ $UNKNOWN -gt 0 ]; then
                 echo "-> $STOPPED stopped workers, $CRASHED crashed workers, $RUNNING running workers, and $UNKNOWN workers with an unknown status"
                 exit $CRITICAL
-        else 
+        else
                 echo "All $RUNNING instances are running!"
                 exit $OK
         fi
-        
+
 fi
 
 if [ $CAPTURE_LOSS_CHECK -eq 1 ]; then
-        
+
         if [ ! -f $CAPTURE_LOG ]; then
                 echo "capture_loss.log cannot be found, modify CAPTURE_LOG in $0 or use \`\`-f''"
                 exit $UNKNOWN
         fi
-        
+
         INTERVAL=$(awk 'NR == 9 { printf("%d\n", $2) }' $CAPTURE_LOG)
         TIME=$(date +"%s")
         RECENT=$(echo $((TIME-INTERVAL)))
 
         awk -v recent=$RECENT -v crit=$CRIT -v loss=0 -v threshold=0 '! /^#/ && $1 > recent && $4 > 0 \
-                 { 
-                        loss++; decimal=sprintf("%d", $6); 
+                 {
+                        loss++; decimal=sprintf("%d", $6);
                         if ( strtonum(decimal) > crit ) {
 				threshold++
                                 print "Peer: "$3,"\t","Loss:", $6;
 			}
                  }
 
-                END { 
-                        if ( loss >= 1 ) { 
+                END {
+                        if ( loss >= 1 ) {
 				print "\n--------------------\n"loss,"instances of loss with",threshold,"exceeding the threshold ("crit"%).";
-                                exit 2 
+                                exit 2
                         }
                 else
                          print "\nNo loss detected"; }' $CAPTURE_LOG
@@ -279,13 +279,13 @@ if [ $CAPTURE_LOSS_CHECK -eq 1 ]; then
         else
                 echo "Unknown status code: $?"
                 exit $UNKNOWN
-        fi      
+        fi
 fi
 
 if [ $PRINT_CHECK -eq 1 ]; then
 
         $BROCTL print $PRINT
-        
+
         exit $OK
 fi
 
@@ -302,7 +302,7 @@ AVERAGE=0
                 echo "ERROR: myri_counters has not been found. Update the MYRI_COUNTERS variable in $0 or specify the path with \`\`-f''"
                 exit $UNKOWN
         fi
-        
+
         for node in $NODE
         do
                 MYRI_STATS=$(ssh -l $USER $node $MYRI_COUNTERS | awk -F : '/SNF drop ring full|SNF recv pkts/ { print $2 }' | sed 's/[ \t]*//')
@@ -313,23 +313,23 @@ AVERAGE=0
                 COUNT=$((COUNT+1))
                 echo "$node: Lost $LOSS of $RECV"
         done
-        
+
         echo "--------------------"
-        
-        # Average       
+
+        # Average
         FLOAT_LOSS=$(echo "(($LOSS_TOT / $COUNT) / ($RECV_TOT / $COUNT)) * 100" | bc -l)
         LOSS=$(/usr/bin/printf "%d\n" $FLOAT_LOSS 2>/dev/null)
-        
+
         if [ $LOSS -gt $CRIT ]; then
-                
+
                 echo "Average packet loss is: $FLOAT_LOSS"
                 exit $CRITICAL
 
         elif [ $LOSS -gt $WARN ]; then
-                
+
                 echo "Average packet loss is: $FLOAT_LOSS"
                 exit $WARNING
-        else 
+        else
                 echo "Average packet loss is: $FLOAT_LOSS"
                 exit $OK
         fi