#!/usr/bin/perl # -*- cperl -*- =head1 NAME php_fpm_process - Munin plugin to show number of number of use processes on php-fpm. Inspirated by php5-fpm_status plugin by Daniel Caillibaud =head1 APPLICABLE SYSTEMS Any php-fpm host You will need the perl fastcgi::client on your host =head1 CONFIGURATION You have to put this in your plugin.conf.d folder # If your php process is listening on TCP [php_fpm_process] env.serveraddr 127.0.0.1 env.port 9000 env.path /status # If your php process is listening on Unix Socket [php_fpm_process] env.sock /var/run/php5-fpm.sock env.path /status =head1 MAGIC MARKERS #%# family=auto #%# capabilities=autoconf =head1 VERSION v1.0 =head1 AUTHOR Minitux =head1 LICENSE GNU General Public License, version 3 =cut use FCGI::Client; my $ish = 1; my $header = ""; my $body = ""; my $IDLE = 0; my $ACTIVE = 0; my $TOTAL = 0; my $SERVERADDR = $ENV{'serveraddr'} || "127.0.0.1"; my $PORT = $ENV{'port'} || "9000"; my $PATH = $ENV{'path'} || "/status"; my $UNIX_SOCK = $ENV{'sock'}; my $sock; if ($UNIX_SOCK) { use IO::Socket::UNIX; $sock = IO::Socket::UNIX->new( Peer => $UNIX_SOCK, ); if (!$sock) { print "Server maybe down, unabled to connect to $UNIX_SOCK"; exit 2; } } else { use IO::Socket::INET; $sock = IO::Socket::INET->new( PeerAddr => $SERVERADDR, PeerPort => $PORT, ); if (!$sock) { print "Server maybe down, unabled to connect to $SERVERADDR:$PORT"; exit 2; } } my $client = FCGI::Client::Connection->new( sock => $sock ); my ( $stdout, $stderr, $appstatus ) = $client->request( +{ REQUEST_METHOD => 'GET', SCRIPT_FILENAME => '', QUERY_STRING => '', SCRIPT_NAME => $PATH, }, '' ); $stdout =~ s/\r//g; while($stdout =~ /([^\n]*)\n?/g) { if(!$1) { $ish = 0; next; } if($ish == 1) { $header .= $1."\n"; } else { $body .= $1."\n"; } } if ( defined $ARGV[0] and $ARGV[0] eq "config" ) { if($body =~ m/pool:\s+(.*?)\n/) { $pool = $1; } print "graph_title php5-fpm status $pool\n"; print "graph_args --base 1000 -l 0\n"; print "graph_vlabel Processes\n"; print "graph_scale yes\n"; print "graph_category php\n"; print "graph_info This graph shows the php5-fpm process manager status from pool: $pool\n"; print "active.label Active processes\n"; print "active.type GAUGE\n"; print "active.draw AREA\n"; print "active.info The number of active processes\n"; print "idle.label Idle processes\n"; print "idle.type GAUGE\n"; print "idle.draw STACK\n"; print "idle.info The number of idle processes\n"; print "total.label Total processes\n"; print "total.type GAUGE\n"; print "total.draw LINE2\n"; print "total.info The number of idle + active processes\n"; exit 0 } print $body; if($body =~ m/idle processes: (.*?)\n/) { $IDLE = $1; print "idle.value ".$IDLE."\n"; } if($body =~ m/active processes: (.*?)\n/) { $ACTIVE = $1; print "active.value ".$ACTIVE."\n"; } if($body =~ m/total processes: (.*?)\n/) { $TOTAL = $1; print "total.value ".$TOTAL."\n"; }