Răsfoiți Sursa

Merge branch 'master' of https://github.com/jonschipp/nagios-plugins

Jon Schipp 12 ani în urmă
părinte
comite
bfda9e09e7
3 a modificat fișierele cu 248 adăugiri și 0 ștergeri
  1. 106 0
      check_connections.sh
  2. 62 0
      check_nfs_stale
  3. 80 0
      check_rsyslog.sh

+ 106 - 0
check_connections.sh

@@ -0,0 +1,106 @@
+#!/usr/bin/env bash
+
+# Nagios Exit Codes
+OK=0
+WARNING=1
+CRITICAL=2
+UNKNOWN=3
+
+usage()
+{
+cat <<EOF
+
+Check the number of connections/sockets in a given state.
+Uses iproute2's ss tool to retrieve connections.
+
+     Options:
+        -s         State of connection (def: all)
+		   (established, syn-sent, syn-recv, fin-wait-1, fin-wait-2, time-wait,
+			closed, close-wait, last-ack, listen, and closing)
+	-f 	   Apply quoted ss expression filter e.g. '( dst 192.168.1/24 and dport >= :1024 )'
+	-p <type>  Set protocol or family type (udp/tcp/inet/inet6)
+        -c         Critical threshold as an integer
+        -w         Warning threshold as an integer
+
+Usage: $0 -s established '( sport = :443 )' -w 800 -c 1000
+EOF
+}
+
+argcheck() {
+# if less than n argument
+if [ $ARGC -lt $1 ]; then
+        echo "Missing arguments! Use \`\`-h'' for help."
+        exit 1
+fi
+}
+
+if ! command -v ss >/dev/null 2>&1; then
+	echo -e "ERROR: ss is not installed or not found in \$PATH!"
+	exit 1
+fi
+
+# Define now to prevent expected number errors
+STATE=all
+CRIT=0
+WARN=0
+COUNT=0
+ARGC=$#
+CHECK=0
+
+argcheck 1 
+
+while getopts "hc:s:f:p:w:" OPTION
+do
+     case $OPTION in
+         h)
+	     usage
+             ;;
+         s)
+             STATE="$OPTARG"
+	     CHECK=1
+             ;;
+         f)
+ 	     FILTER="$OPTARG"
+	     CHECK=1
+             ;;
+	 p)
+	     if [[ $OPTARG == tcp ]]; then
+                PROTOCOL="-t"
+             elif [[ $OPTARG == udp ]]; then
+                PROTOCOL="-u"
+             elif [[ $OPTARG == inet ]]; then
+                PROTOCOL="-4"
+             elif [[ $OPTARG == inet6 ]]; then
+                PROTOCOL="-6"
+             else
+                echo "Error: Protocol or family type no valid!"
+		exit 1
+             fi
+	     CHECK=1
+	     ;; 
+         c)
+	     CRIT="$OPTARG"
+	     CHECK=1
+             ;;
+	 w) 
+	     WARN="$OPTARG"
+	     CHECK=1
+	     ;;
+         \?)
+             exit 1
+             ;;
+     esac
+done
+
+COUNT=$(ss -n state $STATE $PROTOCOL $FILTER | grep -v 'State\|-Q' | wc -l)
+
+if [ $COUNT -gt $CRIT ]; then
+        echo "$COUNT sockets in $STATE state!"
+        exit $CRITICAL
+elif [ $COUNT -gt $WARN ]; then
+        echo "$COUNT sockets in $STATE state!"
+        exit $WARNING
+else
+        echo "$COUNT sockets in $STATE state."
+        exit $OK
+fi 

+ 62 - 0
check_nfs_stale

@@ -0,0 +1,62 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <iso646.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#define VERSION_STRING "0.1"
+
+#define OK       0
+#define WARNING  1
+#define CRITICAL 2
+#define UNKNOWN  3
+
+static void usage(void)
+{
+    printf("check_nfs_stale Version: %s\n", VERSION_STRING);
+    puts(
+    "Nagios plugin to check for stale NFS mounts\n"
+    "Options:\n\n"
+    " -p <mount> Mount point of NFS share\n"
+    " -h         Print help\n\n"
+    "Usage: check_nfs_stale [-h] [-p mount_point]\n"
+    "Please report bugs to <jonschipp@gmail.com>");
+    exit(OK);
+}
+
+int main(int argc, char **argv) {
+
+struct stat file_stat;
+int ret, c;
+const char *mpoint = NULL;
+
+if ( argc == 1 ) {
+    puts("Requires an argument, try ``-h''");
+    exit(UNKNOWN);
+}
+
+while ((c = getopt (argc, argv, "hp:")) != -1)
+switch (c) {
+    case 'h':
+        usage();
+        break;
+    case 'p':
+        mpoint = optarg;
+        break;
+    case '?':
+        usage();
+        break;
+}
+
+ret = stat(mpoint, &file_stat);
+
+if (ret == -1 && errno == ESTALE) {
+    printf("%s is stale\n", mpoint);
+    exit(CRITICAL);
+    }
+else
+    printf("%s is fine\n", mpoint);
+    exit(OK);
+}

+ 80 - 0
check_rsyslog.sh

@@ -0,0 +1,80 @@
+#!/usr/bin/env bash
+
+# Author: Jon Schipp
+# Date: 01-27-2014
+########
+# Examples:
+
+# 1.) Check presence of disk queue (buffer)
+# $ ./check_rsyslog.sh -q rsyslog -d /var/spool/rsyslog
+
+# Nagios Exit Codes
+OK=0
+WARNING=1
+CRITICAL=2
+UNKNOWN=3
+
+# Default rsyslog spool directory 
+WORK_DIRECTORY=/var/spool/rsyslog
+
+usage()
+{
+cat <<EOF
+
+     Options:
+        -q <basename>    Check for presence of disk queue files
+	-d <dir>	 Specify \$WorkDirectory (def: /var/spool/rsyslog)
+
+Usage: $0 -q buf
+EOF
+}
+
+argcheck() {
+# if less than n argument
+if [ $ARGC -lt $1 ]; then
+        echo "Missing arguments! Use \`\`-h'' for help."
+        exit 1
+fi
+}
+
+# Initialize variables
+ARGC=$#
+QUEUE_CHECK=0
+
+argcheck 1
+
+while getopts "hd:q:" OPTION
+do
+     case $OPTION in
+         h)
+             usage
+             ;;
+	 d)
+	     WORK_DIRECTORY=$(echo $OPTARG | sed 's/\/$//')
+	     ;;
+         q)
+             BASENAME=$OPTARG
+	     QUEUE_CHECK=1
+             ;;
+         \?)
+             exit 1
+             ;;
+     esac
+done
+
+if [ $QUEUE_CHECK -eq 1 ]; then
+
+	# Remove stale 0 byte queue files
+	# find $WORK_DIRECTORY -type f -size 0c -regextype posix-basic -regex ".*/$BASENAME.*\.[0-9]\{8\}" | xargs rm -rf
+
+	COUNT=$(find $WORK_DIRECTORY -type f -size +0c -regextype posix-basic -regex ".*/$BASENAME.*\.[0-9]\{8\}" | wc -l)
+
+	if [ $COUNT -gt 0 ]; then
+		echo "Found buffer files"
+		find $WORK_DIRECTORY -type f -size +0c -regextype posix-basic -regex ".*/$BASENAME.*\.[0-9]\{8\}"
+		exit $CRITICAL
+	else
+		echo "No buffer files found"
+		exit $OK
+	fi
+fi