#!/usr/bin/perl -w =head1 NAME nginx_status - Munin plugin to show connection status for nginx =head1 APPLICABLE SYSTEMS Any nginx host =head1 CONFIGURATION This shows the default configuration of this plugin. You can override the status URL. [nginx*] env.url http://localhost/nginx_status Nginx must also be configured. Firstly the stub-status module must be compiled, and secondly it must be configured like this: server { listen 127.0.0.1; listen [::1]; server_name localhost; location /nginx_status { stub_status on; access_log off; allow 127.0.0.1; allow ::1; deny all; } } =head1 MAGIC MARKERS #%# family=auto #%# capabilities=autoconf =head1 BUGS None known =head1 AUTHOR Unknown =head1 LICENSE Unknown. Not specified by the unknown author. Nginx has a BSD license. Munin is GPLv2 licensed. =cut use Munin::Plugin::HTTP; my $ret = undef; if (! eval "require LWP::UserAgent;"){ $ret = "LWP::UserAgent not found"; } if ($0 =~ /^nginx6_/) { if (! eval "require Net::INET6Glue::INET_is_INET6;"){ $ret = "Net::INET6Glue::INET_is_INET6 not found"; } } my $UA = Munin::Plugin::HTTP->new; my $URL = exists $ENV{'url'} ? $ENV{'url'} : "http://localhost/nginx_status"; if ( exists $ARGV[0] and $ARGV[0] eq "autoconf" ) { if ($ret){ print "no ($ret)\n"; exit 0; } my $response = $UA->get($URL); unless ($response->is_success and $response->content =~ /server/im) { print "no (no nginx status on $URL)\n"; exit 0; } else { print "yes\n"; exit 0; } } if ( exists $ARGV[0] and $ARGV[0] eq "config" ) { print "graph_title Nginx status\n"; print "graph_args --base 1000\n"; print "graph_category webserver\n"; print "graph_vlabel Connections\n"; print "total.label Active connections\n"; print "total.info Active connections\n"; print "total.draw LINE\n"; print "reading.label Reading\n"; print "reading.info Reading\n"; print "reading.draw LINE\n"; print "writing.label Writing\n"; print "writing.info Writing\n"; print "writing.draw LINE\n"; print "waiting.label Waiting\n"; print "waiting.info Waiting\n"; print "waiting.draw LINE\n"; exit 0; } # generate a useful error message instead of just bailing out later die "Missing dependency: '$ret'" if ($ret); my $response = $UA->get($URL); #Active connections: 1845 #server accepts handled requests # 4566318 4566318 84218236 # Reading: 2 Writing: 278 Waiting: 1565 if ($response->content =~ /Active connections:\s+(\d+).*Reading:\s+(\d+).*Writing:\s+(\d+).*Waiting:\s+(\d+)/s) { print "total.value $1\n"; print "reading.value $2\n"; print "writing.value $3\n"; print "waiting.value $4\n"; } else { foreach (qw(total reading writing waiting)){ print "$_.value U\n"; } }