Zabbix : monitoring Nginx / PHP-FPM / MySQL

Boris HUISGEN
|
Voici les scripts que j’utilise pour monitorer avec Zabbix des serveurs Nginx / MySQL / PHP-FPM. Je vous livre également une template contenant l’ensemble des items et triggers.
_zabbixagentd.conf :
UserParameter=nginx.active,/etc/zabbix/scripts/nginx.pl|cut -f1|cut -d" " -f2
UserParameter=nginx.requests,/etc/zabbix/scripts/nginx.pl|cut -f2|cut -d" " -f2
UserParameter=nginx.reading,/etc/zabbix/scripts/nginx.pl|cut -f3|cut -d" " -f2
UserParameter=nginx.writing,/etc/zabbix/scripts/nginx.pl|cut -f4|cut -d" " -f2
UserParameter=nginx.waiting,/etc/zabbix/scripts/nginx.pl|cut -f5|cut -d" " -f2
UserParameter=php.ping,/etc/zabbix/scripts/php-fpm_ping.pl
UserParameter=php.conn,/etc/zabbix/scripts/php-fpm_status.pl|cut -f1|cut -d" " -f3
UserParameter=php.idle,/etc/zabbix/scripts/php-fpm_status.pl|cut -f2|cut -d" " -f3
UserParameter=php.active,/etc/zabbix/scripts/php-fpm_status.pl|cut -f3|cut -d" " -f3
UserParameter=php.total,/etc/zabbix/scripts/php-fpm_status.pl|cut -f4|cut -d" " -f3
UserParameter=php.maxchildren,/etc/zabbix/scripts/php-fpm_status.pl|cut -f5|cut -d" " -f3
UserParameter=mysql.status[*],/etc/zabbix/scripts/mysql_status.pl $1
/etc/zabbix/scripts/nginx.pl :
#!/usr/bin/perl#
# Boris HUISGEN <bhuisgen@hbis.fr>
use LWP::UserAgent;
my $URL = "http://127.0.0.1/nginx_status";
#
# DO NOT MODIFY AFTER THIS LINE
#
my $ua = LWP::UserAgent->new(timeout => 15);
my $response = $ua->request(HTTP::Request->new('GET', $URL));
my $active = 0;
my $reading = 0;
my $writing = 0;
my $waiting = 0;
my $requests = 0;
foreach (split(/\n/, $response->content)) {
$active = $1 if (/^Active connections:\s+(\d+)/);
if (/^Reading:\s+(\d+).*Writing:\s+(\d+).*Waiting:\s+(\d+)/) {
$reading = $1;
$writing = $2;
$waiting = $3;
}
$requests = $3 if (/^\s+(\d+)\s+(\d+)\s+(\d+)/);
}
print "Active: $active\tRequests: $requests\tReading: $reading\tWriting: $writing\tWaiting: $waiting\n";
_php-fpmping.pl :
#!/usr/bin/perl
#
# Boris HUISGEN <bhuisgen@hbis.fr>
use LWP::UserAgent;
my $URL = "http://127.0.0.1/php5fpm-ping";
#
# DO NOT MODIFY AFTER THIS LINE
#
my $ua = LWP::UserAgent->new(timeout => 15);
my $response = $ua->request(HTTP::Request->new('GET', $URL));
if ($response->is_success) {
print "1\n";
}
else {
print "0\n";
}
*php-fpm_status.pl* :
#!/usr/bin/perl
#
# Boris HUISGEN <bhuisgen@hbis.fr>
use LWP::UserAgent;
my $URL = "http://127.0.0.1/php5fpm-status";
#
# DO NOT MODIFY AFTER THIS LINE
#
my $ua = LWP::UserAgent->new(timeout => 15);
my $response = $ua->request(HTTP::Request->new('GET', $URL));
my $conn = 0;
my $idle = 0;
my $active = 0;
my $total = 0;
my $maxchildren = 0;
foreach (split(/\n/, $response->content)) {
$conn = $1 if (/^accepted conn:\s+(\d+)/);
$idle = $1 if (/^idle processes:\s+(\d+)/);
$active = $1 if (/^active processes:\s+(\d+)/);
$total = $1 if (/^total processes:\s+(\d+)/);
$maxchildren = $1 if (/^max children reached:\s+(\d+)/);
}
print "Accepted conn: $conn\tIdle proc: $idle\tActive proc: $active\tTotal proc: $total\tMax children: $maxchildren\n";
_mysqlstatus.pl :
#!/usr/bin/perl
#
# Boris HUISGEN <bhuisgen@hbis.fr>
my($mysql) = "/usr/bin/mysql";
my($user) = "zabbix";
my($passwd) = "abcdef123";
my($host) = "localhost";
#
# DO NOT MODIFY AFTER THIS LINE
#
=head1 NAME
mysql_status.pl - show MySQL variable status
=head1 SYNOPSIS
mysql_status.pl VARIABLE
--help print this help message
--version print version information
=head1 DESCRIPTION
This program shows the status of a MySQL variable.
=head1 AUTHOR
Boris HUISGEN <bhuisgen@hbis.fr>
=cut
use strict;
use warnings;
use Getopt::Long qw(:config auto_help auto_version);
use Pod::Usage;
$main::VERSION = "0.1-2012040501";
exit main();
sub show_variable {
my ($variable) = $_[0];
my ($cmd) = "$mysql -u $user -p$passwd -h $host --execute \"SHOW GLOBAL STATUS LIKE '$variable'\" --skip-column-name";
my ($ret) =`$cmd 2> /dev/null`;
exit(1) unless($ret);
$ret =~ m/^$variable.[\s\t]*(.*)/;
print "$1\n";
}
sub main {
GetOptions ()
or pod2usage(1);
pod2usage (1) unless ($#ARGV == 0);
my ($variable) = $ARGV[0];
show_variable($variable);
}
# end of script
nginx.conf :
server {
listen 127.0.0.1:80;
listen [::1]:80;
server_name localhost;
root /var/www/default/www/html;
access_log /var/www/default/www/logs/access.log;
error_log /var/www/default/www/logs/error.log;
index index.html;
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
location = /php5fpm-status {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/default/www/html$fastcgi_script_name;
include fastcgi_params;
}
location = /php5fpm-ping {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/default/www/html$fastcgi_script_name;
include fastcgi_params;
}
php-fpm.conf :
pm.status_path = /php5fpm-status
ping.path = /php5fpm-ping
ping.path = /php5fpm-ping
Template Zabbix : [download id=“4” ]