Permalink
Browse files

nginx 1.0

git-svn-id: http://zenpacks.zenoss.org/svn/zenpacks@834 db08cffe-75b9-45d1-af1a-46ad9ef135f6
  • Loading branch information...
1 parent cbca9dc commit 3bc5078951011a13caa5dedb7318a934da2a022c Matt Ray committed Jul 14, 2010
@@ -0,0 +1,16 @@
+All files in this directory and below are:
+
+Copyright (c) 2009 Zenoss, Inc. All rights reserved.
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License version 2 as published
+by the Free Software Foundation.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
@@ -0,0 +1,5 @@
+Prerequisites:
+ bc must be in the zenoss users $PATH
+
+#. Install Zenpack
+#. Attache nginx_status template to desired device or device class
@@ -0,0 +1 @@
+graft ZenPacks
@@ -0,0 +1,26 @@
+Collect and graph Nginx metrics provided by the stub_status module.
+ Nginx Connections and Requests per second
+ Connections Per Second
+ Requests Per Second
+ Nginx Requests per Connection
+ Requests Per Connection
+ Nginx Connections
+ Total Active Connections
+ Reading
+ Writing
+ Waiting
+
+Enable stub_status in Nginx config
+http://wiki.nginx.org/NginxHttpStubStatusModule
+
+ location /nginx_status {
+ stub_status on;
+ access_log off;
+ allow ZENOSS_IP;
+ deny all;
+ }
+
+Attach the template to the device or device class you want to monitor.
+ Navigate to the device
+ :menuselection:`More --> Templates`
+ :menuselection:`Bind Templates -> nginx_status`
@@ -0,0 +1 @@
+__import__('pkg_resources').declare_namespace(__name__)
@@ -0,0 +1,8 @@
+
+import Globals
+import os.path
+
+skinsDir = os.path.join(os.path.dirname(__file__), 'skins')
+from Products.CMFCore.DirectoryView import registerDirectory
+if os.path.isdir(skinsDir):
+ registerDirectory(skinsDir, globals())
@@ -0,0 +1,266 @@
+#!/bin/sh
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+# Based on check_nginx by Mike Adolphs (http://www.matejunkie.com/)
+# http://exchange.nagios.org/directory/Plugins/Web-Servers/nginx/check_nginx-2Esh/details
+# Modified from Chris Kellys Version of switching to counters. http://ckdake.com/
+PROGNAME=`basename $0`
+VERSION="Version 1.1,"
+AUTHOR="2010, Nick Anderson (http://www.cmdln.org/)"
+
+
+ST_OK=0
+ST_WR=1
+ST_CR=2
+ST_UK=3
+hostname="localhost"
+port=80
+path_pid=/var/run
+name_pid="nginx.pid"
+status_page="nginx_status"
+pid_check=1
+secure=0
+
+print_version() {
+ echo "$VERSION $AUTHOR"
+}
+
+print_help() {
+ print_version $PROGNAME $VERSION
+ echo ""
+ echo "$PROGNAME is a Nagios plugin to check whether nginx is running."
+ echo "It also parses the nginx's status page to get requests and"
+ echo "connections per second as well as requests per connection. You"
+ echo "may have to alter your nginx configuration so that the plugin"
+ echo "can access the server's status page."
+ echo "The plugin is highly configurable for this reason. See below for"
+ echo "available options."
+ echo ""
+ echo "$PROGNAME -H localhost -P 80 -p /var/run -n nginx.pid "
+ echo " -s nginx_statut -o /tmp [-w INT] [-c INT] [-S] [-N]"
+ echo ""
+ echo "Options:"
+ echo " -H/--hostname)"
+ echo " Defines the hostname. Default is: localhost"
+ echo " -P/--port)"
+ echo " Defines the port. Default is: 80"
+ echo " -p/--path-pid)"
+ echo " Path where nginx's pid file is being stored. You might need"
+ echo " to alter this path according to your distribution. Default"
+ echo " is: /var/run"
+ echo " -n/--name_pid)"
+ echo " Name of the pid file. Default is: nginx.pid"
+ echo " -N/--no-pid-check)"
+ echo " Turn this on, if you don't want to check for a pid file"
+ echo " whether nginx is running, e.g. when you're checking a"
+ echo " remote server. Default is: off"
+ echo " -s/--status-page)"
+ echo " Name of the server's status page defined in the location"
+ echo " directive of your nginx configuration. Default is:"
+ echo " nginx_status"
+ echo " -S/--secure)"
+ echo " In case your server is only reachable via SSL, use this"
+ echo " this switch to use HTTPS instead of HTTP. Default is: off"
+ echo " -w/--warning)"
+ echo " Sets a warning level for requests per second. Default is: off"
+ echo " -c/--critical)"
+ echo " Sets a critical level for requests per second. Default is:"
+ echo " off"
+ exit $ST_UK
+}
+
+while test -n "$1"; do
+ case "$1" in
+ -help|-h)
+ print_help
+ exit $ST_UK
+ ;;
+ --version|-v)
+ print_version $PROGNAME $VERSION
+ exit $ST_UK
+ ;;
+ --hostname|-H)
+ hostname=$2
+ shift
+ ;;
+ --port|-P)
+ port=$2
+ shift
+ ;;
+ --path-pid|-p)
+ path_pid=$2
+ shift
+ ;;
+ --name-pid|-n)
+ name_pid=$2
+ shift
+ ;;
+ --no-pid-check|-N)
+ pid_check=0
+ ;;
+ --status-page|-s)
+ status_page=$2
+ shift
+ ;;
+ --secure|-S)
+ secure=1
+ ;;
+ --warning|-w)
+ warning=$2
+ shift
+ ;;
+ --critical|-c)
+ critical=$2
+ shift
+ ;;
+ *)
+ echo "Unknown argument: $1"
+ print_help
+ exit $ST_UK
+ ;;
+ esac
+ shift
+done
+
+get_wcdiff() {
+ if [ ! -z "$warning" -a ! -z "$critical" ]
+ then
+ wclvls=1
+
+ if [ ${warning} -ge ${critical} ]
+ then
+ wcdiff=1
+ fi
+ elif [ ! -z "$warning" -a -z "$critical" ]
+ then
+ wcdiff=2
+ elif [ -z "$warning" -a ! -z "$critical" ]
+ then
+ wcdiff=3
+ fi
+}
+
+val_wcdiff() {
+ if [ "$wcdiff" = 1 ]
+ then
+ echo "Please adjust your warning/critical thresholds. The warning \
+must be lower than the critical level!"
+ exit $ST_UK
+ elif [ "$wcdiff" = 2 ]
+ then
+ echo "Please also set a critical value when you want to use \
+warning/critical thresholds!"
+ exit $ST_UK
+ elif [ "$wcdiff" = 3 ]
+ then
+ echo "Please also set a warning value when you want to use \
+warning/critical thresholds!"
+ exit $ST_UK
+ fi
+}
+
+check_pid() {
+ if [ -f "$path_pid/$name_pid" ]
+ then
+ retval=0
+ else
+ retval=1
+ fi
+}
+
+get_status() {
+ if [ "$secure" = 1 ]
+ then
+ wget_opts="-O- -q -t 3 -T 3 --no-check-certificate"
+ out=`wget ${wget_opts} http://${hostname}:${port}/${status_page}`
+ else
+ wget_opts="-O- -q -t 3 -T 3"
+ out=`wget ${wget_opts} http://${hostname}:${port}/${status_page}`
+ fi
+
+ if [ -z "$out" ]
+ then
+ echo "UNKNOWN - Local copy/copies of $status_page is empty."
+ exit $ST_UK
+ fi
+}
+
+get_vals() {
+ requests=`echo ${out}|awk '{print $10}'`
+
+ connections=`echo ${out}|awk '{print $9}'`
+
+ reqpcon=`echo "scale=2; $requests / $connections" | bc -l`
+ if [ "$reqpcon" = ".99" ]
+ then
+ reqpcon="1.00"
+ fi
+ active_connections=$(echo ${out}|awk '{print $3}')
+ reading=$(echo ${out}|awk '{print $12}')
+ writing=$(echo ${out}|awk '{print $14}')
+ waiting=$(echo ${out}|awk '{print $16}')
+
+}
+
+do_output() {
+ output="nginx is running. $requests requests, $connections \
+connections ($reqpcon requests per connection)"
+}
+
+do_perfdata() {
+ perfdata="requests=$requests connections=$connections reqpcon=$reqpcon \
+reading=$reading writing=$writing waiting=$waiting \
+active_connections=$active_connections"
+}
+
+# Here we go!
+get_wcdiff
+val_wcdiff
+
+if [ ${pid_check} = 1 ]
+then
+ check_pid
+ if [ "$retval" = 1 ]
+ then
+ echo "There's no pid file for nginx. Is nginx running? Please \
+also make sure whether your pid path and name is correct."
+ exit $ST_CR
+ fi
+fi
+
+get_status
+get_vals
+do_output
+do_perfdata
+
+if [ -n "$warning" -a -n "$critical" ]
+then
+ if [ "$reqpsec" -ge "$warning" -a "$reqpsec" -lt "$critical" ]
+ then
+ echo "WARNING - ${output} | ${perfdata}"
+ exit $ST_WR
+ elif [ "$reqpsec" -ge "$critical" ]
+ then
+ echo "CRITICAL - ${output} | ${perfdata}"
+ exit $ST_CR
+ else
+ echo "OK - ${output} | ${perfdata} ]"
+ exit $ST_OK
+ fi
+else
+ echo "OK - ${output} | ${perfdata}"
+ exit $ST_OK
+fi
Oops, something went wrong.

0 comments on commit 3bc5078

Please sign in to comment.