2
0
mirror of https://github.com/munin-monitoring/contrib.git synced 2018-11-08 00:59:34 +01:00
contrib-munin/plugins/php/php_fpm_process

185 lines
3.6 KiB
Perl
Executable File

#!/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";
}