diff --git a/README.md b/README.md
index 6dd5831..993b036 100644
--- a/README.md
+++ b/README.md
@@ -1,23 +1,148 @@
-
check_snmp_proc.sh
-This is small Nagios plugin for checking status of processes (or quantity of them) via SNMP
-
Usage:
-
./check_snmp_proc -H 127.0.0.1 -C public -N ssh -w 3 -c 0
-
-
Where:
- -H hostname /string/
-
Name or IP address of host (default 127.0.0.1)
-
-C OID /string/
-
Community name for the host SNMP agent (default public)
-
-N Process name /string/
-
Exact process name (default snmpd)
-
-w warning level /integer/
-
Warning level of running processes (default: 0)
-
-c critical level /integer/
-
Critical level of running processes (default: 0)
-
-h help
-
Print this help screen
-
-V version number
-
Print version and license information
-
-
This plugin uses the 'snmpwalk' command included with the NET-SNMP package.
-
This nagios plugins comes with ABSOLUTELY NO WARRANTY. So, enjoy ;)
+# check_snmp_proc.sh
+## This is small Nagios plugin for checking status of processes (or quantity of them) via SNMP
+
+This plugin uses the [utils.sh from monitoring-plugins.org](https://github.com/monitoring-plugins/monitoring-plugins/blob/v2.2/plugins-scripts/utils.sh.in) to be able to use ranges for warning and critical thresholds.
+
+### Usage:
+```
+./check_snmp_proc -H 127.0.0.1 -C public -N ssh -w 3 -c 0
+
+Where:
+ -H hostname /string/
+ Name or IP address of host (default 127.0.0.1)
+ -C OID /string/
+ Community name for the host SNMP agent (default public)
+ -N Process name /string/
+ Exact process name (default snmpd)
+ -w warning level /integer/
+ Warning level of running processes (default: 0)
+ -c critical level /integer/
+ Critical level of running processes (default: 0)
+ -m minimum level /integer/
+ Minimum level for performance data (default: 0)
+ -M maximum level /integer/
+ Maximum level for performance data (default: 100)
+ -h help
+ Print this help screen
+ -V version number
+ Print version and license information
+
+ This plugin uses the 'snmpwalk' command included with the NET-SNMP package.
+ This nagios plugins comes with ABSOLUTELY NO WARRANTY. So, enjoy ;)
+```
+### Icinga2 Configuration
+```
+object CheckCommand "snmp_proc" {
+ import "plugin-check-command"
+
+ command = [ PluginGitDir + "/check_snmp_proc.sh" ]
+
+ arguments = {
+ "-H" = {
+ value = "$snmp_proc_host$"
+ description = "Name or IP address of host (default 127.0.0.1 but overwritten by address)"
+ required = false
+ skip_key = false
+ order = 1
+ }
+ "-C" = {
+ value = "$snmp_proc_community$"
+ description = "Community name for the host SNMP agent (default public)"
+ required = false
+ skip_key = false
+ order = 2
+ }
+ "-N" = {
+ value = "$snmp_proc_name$"
+ description = "Exact process name (default snmpd)"
+ required = false
+ skip_key = false
+ order = 3
+ }
+ "-w" = {
+ value = "$snmp_proc_warning$"
+ description = "Warning level of running processes (default: 0)"
+ required = false
+ skip_key = false
+ order = 4
+ }
+ "-c" = {
+ value = "$snmp_proc_critical$"
+ description = "Critical level of running processes (default: 0)"
+ required = false
+ skip_key = false
+ order = 5
+ }
+ "-m" = {
+ value = "$snmp_proc_min$"
+ description = "Minimum for performance data (default: 0)"
+ required = false
+ skip_key = false
+ order = 6
+ }
+ "-M" = {
+ value = "$snmp_proc_max$"
+ description = "Maximum for performance data (default: 100)"
+ required = false
+ skip_key = false
+ order = 7
+ }
+ }
+
+ vars.snmp_proc_host = "$address$"
+}
+
+```
+
+
+```
+apply Service for (snmp_proc => config in host.vars.snmp_proc) {
+ import "generic-service"
+
+ check_command = "snmp_proc"
+
+ display_name = config.display_name
+
+ if (config.groups) {
+ groups = config.groups
+ }
+
+ if (config.check_interval) {
+ check_interval = config.check_interval
+ }
+
+ if (config.retry_interval) {
+ retry_interval = config.retry_interval
+ }
+
+ if (config.max_check_attempts) {
+ max_check_attempts = config.max_check_attempts
+ }
+
+ vars += config
+}
+```
+
+```
+object Host "snmphost.test" {
+ import "generic-host"
+ display_name = "SNMP Test Host"
+ address = "127.0.0.1"
+
+ vars.snmp_proc[ "service_name" ] = {
+ display_name = "Check SNMP service via SNMP process list"
+
+# snmp_proc_community = "public"
+ snmp_proc_name = "snmp"
+ snmp_proc_warning = "40"
+ snmp_proc_critical = "40"
+
+# check_interval = 10m
+# retry_interval = 10m
+ max_check_attempts = 1
+ }
+
+}
+```
+
+
diff --git a/check_snmp_proc.sh b/check_snmp_proc.sh
index 3b7de74..e0d131b 100755
--- a/check_snmp_proc.sh
+++ b/check_snmp_proc.sh
@@ -1,13 +1,13 @@
-#!/bin/bash
+#!/bin/sh
-# Plugin return codes
-STATE_OK=0
-STATE_CRITICAL=2
-STATE_WARNING=1
-STATE_UNKNOWN=3
+# boilerplate from check_sensors
+PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"
+export PATH
+PROGNAME=`basename $0`
+PROGPATH=`echo $0 | sed -e 's,[\\/][^\\/][^\\/]*$,,'`
+REVISION="1.2"
-# Version
-VERSION="1.1"
+. $PROGPATH/utils.sh
# Commands
CMD_BASENAME=$(which basename)
@@ -15,10 +15,6 @@ CMD_SNMPWALK=$(which snmpwalk)
CMD_GREP=$(which grep)
CMD_WC=$(which wc)
-# Script name
-SCRIPTNAME=`$CMD_BASENAME $0`
-
-
#Default variables
OID=.1.3.6.1.2.1.25.4.2.1.2
HOST="127.0.0.1"
@@ -27,27 +23,23 @@ PROCN="snmpd"
STATE=$STATE_UNKNOWN
WARNING=0
CRITICAL=0
-
+PERFDATA=""
+MIN=0
+MAX=100
print_usage() {
echo "Usage: ./check_snmp_proc -H 127.0.0.1 -C public -N ssh -w 3 -c 0"
- echo " $SCRIPTNAME -H ADDRESS"
- echo " $SCRIPTNAME -C STRING"
- echo " $SCRIPTNAME -N STRING"
- echo " $SCRIPTNAME -w INTEGER"
- echo " $SCRIPTNAME -c INTEGER"
- echo " $SCRIPTNAME -h"
- echo " $SCRIPTNAME -V"
-}
-
-print_version() {
- echo $SCRIPTNAME version $VERSION
- echo ""
- echo "This nagios plugins comes with ABSOLUTELY NO WARRANTY."
+ echo " $PROGNAME -H ADDRESS"
+ echo " $PROGNAME -C STRING"
+ echo " $PROGNAME -N STRING"
+ echo " $PROGNAME -w INTEGER"
+ echo " $PROGNAME -c INTEGER"
+ echo " $PROGNAME -h"
+ echo " $PROGNAME -V"
}
print_help() {
- print_version
+ print_revision $PROGNAME $REVISION
echo ""
print_usage
echo ""
@@ -63,15 +55,20 @@ print_help() {
echo " Warning level of running processes (default: 0)"
echo "-c INTEGER"
echo " Critical level of running processes (default: 0)"
+ echo "-m INTEGER"
+ echo " Minimum for performance data (default: 0)"
+ echo "-M INTEGER"
+ echo " Maximum for performance data (default: 100)"
echo "-h"
echo " Print this help screen"
echo "-V"
echo " Print version and license information"
echo ""
echo "This plugin uses the 'snmpwalk' command included with the NET-SNMP package."
+ echo "This plugin uses the utils.sh from monitoring-plugins.org."
}
-while getopts H:C:N:w:c:Vh OPT
+while getopts H:C:N:w:c:m:M:Vh OPT
do
case $OPT in
H) HOST="$OPTARG" ;;
@@ -79,32 +76,61 @@ do
N) PROCN="$OPTARG" ;;
w) WARNING=$OPTARG ;;
c) CRITICAL=$OPTARG ;;
+ m) MIN=$OPTARG ;;
+ M) MAX=$OPTARG ;;
h)
print_help
- exit $STATE_UNKNOWN
+ exit $STATE_OK
;;
V)
- print_version
- exit $STATE_UNKNOWN
+ print_revision $PROGNAME $REVISION
+ exit $STATE_OK
;;
esac
done
#Plugin
-PROCN=${PROCN:0:15}
-CNT=`$CMD_SNMPWALK -v1 -On -c $COMM $HOST $OID | $CMD_GREP "\"$PROCN\"" | $CMD_WC -l`
-if [ $CNT -eq 0 ]; then
- STATE=$STATE_CRITICAL
- DESCRIPTION="CRITICAL: Process $PROCN does not exist"
-elif [ $CNT -le $WARNING ]; then
- STATE=$STATE_WARNING
- DESCRIPTION="WARNING: Running only $CNT instances of $PROCN"
-elif [ $CNT -le $CRITICAL ]; then
- STATE=$STATE_CRITICAL
- DESCRIPTION="CRITICAL: Running only $CNT instances of $PROCN"
+#PROCN=${PROCN:0:15}
+PROCN=`echo $PROCN | cut -c -15`
+
+#echo $PROCN
+WLK=`$CMD_SNMPWALK -v1 -On -c $COMM $HOST $OID`
+if [ "$?" -ne 0 ]; then
+ STATE=$STATE_CRITICAL
+ exit $STATE
+fi
+
+
+CNT=`echo $WLK | $CMD_GREP "\"$PROCN\"" | $CMD_WC -l`
+
+check_range $CNT $CRITICAL
+RET_CRIT=$?
+if [ "$RET_CRIT" -eq 2 ]; then
+ STATE=$STATE_CRITICAL
+ exit $STATE
+fi
+
+check_range $CNT $WARNING
+RET_WARN=$?
+if [ "$RET_WARN" -eq 2 ]; then
+ STATE=$STATE_CRITICAL
+ exit $STATE
+fi
+
+#echo "Range return is critical $RET_CRIT and warning $RET_WARN"
+
+PERFDATA="$PROCN=$CNT;$WARNING;$CRITICAL;$MIN;$MAX"
+
+if [ "$RET_CRIT" -eq 0 ]; then
+ STATE=$STATE_CRITICAL
+ DESCRIPTION="PROCESS CRITICAL: Number of $PROCN not in range $CRITICAL"
+elif [ "$RET_WARN" -eq 0 ]; then
+ STATE=$STATE_WARNING
+ DESCRIPTION="PROCESS WARNING: Number of $PROCN not in range $WARNING"
else
- STATE=$STATE_OK
- DESCRIPTION="OK: Process exist. Running instances: $CNT"
- fi
-echo $DESCRIPTION
+ STATE=$STATE_OK
+ DESCRIPTION="PROCESS OK: Running $CNT instances of $PROCN"
+fi
+
+echo "$DESCRIPTION | $PERFDATA"
exit $STATE