#!/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 File::Basename; use FCGI::Client; my $ish = 1; my $header = ""; my $body = ""; my $IDLE = 0; my $ACTIVE = 0; my $TOTAL = 0; my $SLOW_REQUESTS = 0; my $PLUGIN_NAME = basename($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 <<"EOF"; multigraph ${PLUGIN_NAME}_process graph_title php5-fpm processes for $pool graph_args --base 1000 -l 0 graph_vlabel Processes graph_scale yes graph_category processes graph_info This graph shows the php5-fpm process manager status from pool: $pool active.label Active processes active.type GAUGE active.draw AREA active.info The number of active processes idle.label Idle processes idle.type GAUGE idle.draw STACK idle.info The number of idle processes total.label Total processes total.type GAUGE total.draw LINE2 total.info The number of idle + active processes multigraph ${PLUGIN_NAME}_slowrequests graph_title php5-fpm slow requests $pool graph_args --base 1000 -l 0 graph_vlabel Slow requests graph_scale yes graph_category processes graph_info This graph shows the php5-fpm slow request from pool: $pool slow_requests.label Slow requests slow_requests.type DERIVE slow_requests.draw LINE2 slow_requests.min 0 slow_requests.info evolution of slow requests EOF exit 0 } # print $body; print "multigraph ${PLUGIN_NAME}_process\n"; 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"; } if($body =~ m/slow requests: (.*?)\n/) { $SLOW_REQUESTS = $1; print "\n"; print "multigraph ${PLUGIN_NAME}_slowrequests\n"; print "slow_requests.value ".$SLOW_REQUESTS."\n"; }