Sonde Nagios/Icinga Mysql Replication Status en perl

Bon ça fait 2/3 jours que je bosse la dessus et ça rend impeccable sur mon interface … donc je vous le refile pour ceux qui en ont besoin ou qui veulent s’en inspirer 😉

 

 

En gros quoi qui fait :

 

1/ vérification si mysql fonctionne

2/ vérification si le temps de réponse est correct

3/ Vérification du status du slave et de la réplication

4/ Vous génère des graph sous icinga 😉

Le LIEN pour dl le code ou directement plus bas là dessous …

Pour le lancer il faut le greffer à vos liste de commande (/etc/icinga/object/XXX_command.cfg) sous la forme :

define command{
 command_name check_replica_mysql
 command_line /usr/bin/perl /usr/local/bin/NagiosCheckMysqlSlaveRun.pl -f $HOSTNAME$ -t 5 -T 10
}

 

Et dans votre host cible :

define service{
use                     local-service
host_name               MACHINE CIBLE
service_description     Mysql Replication
check_command           check_replica_mysql
}

SHOW ME THE CODE 🙂

#!/usr/bin/perl -Ilibperl -I
use warnings;
use strict;
use PXL::Mysql;
use Nagios::Plugin;
use DBI;
my $VERSION="0.1";

my $plugin_nagios = Nagios::Plugin->new(
shortname => 'Vérification Slave Mysql',
usage => 'Usage : %s [-f host]',
version => $VERSION,
);

$plugin_nagios->add_arg(
spec => 'HOST|f=s',
help => 'HOST to check',
);

$plugin_nagios->add_arg(
spec => 'TimeMin|t=i',
help => 'Time min',
);
$plugin_nagios->add_arg(
spec => 'TimeMax|T=i',
help => 'Time max',
);
$plugin_nagios->getopts();

my $HOST = $plugin_nagios->opts->HOST;
my $TMIN = $plugin_nagios->opts->TimeMin;
my $TMAX = $plugin_nagios->opts->TimeMax;

sub Crit() {
$plugin_nagios->add_message(
my $code="CRITICAL",
my $message="Le serveur mysql est Down",
);
($code, $message) = $plugin_nagios->check_messages();
$plugin_nagios->nagios_exit($code,$message);
exit;
}

my $dbh = DBI->connect("DBI:mysql:FR01;host=$HOST", "root", "!2I/!4Sale",{PrintError => 0})
|| die Crit();

my $S_Verif=$dbh->prepare("show slave status;");
$S_Verif->execute();
while (my $line = $S_Verif->fetchrow_hashref() ) {
my $IO_RUN=$line->{Slave_IO_Running};
my $SQL_RUN=$line->{Slave_SQL_Running};
my $TIME_RUN=$line->{Seconds_Behind_Master};
chomp($IO_RUN);
chomp($SQL_RUN);
chomp($TIME_RUN);
if (lc($IO_RUN) ne "yes" || lc($SQL_RUN) ne "yes") {
$plugin_nagios->add_message(
my $code="CRITICAL",
my $message="La replication est stoppée",
);
} else {
if ( $TIME_RUN < $TMIN) { $plugin_nagios->add_message(
my $code="OK",
my $message="|Retard=$TIME_RUN;;;0\n",
);
}
if ( $TIME_RUN > $TMIN) {
$plugin_nagios->add_message(
my $code="WARNING",
my $message="La replication est en retard de $TIME_RUN sec|Retard=$TIME_RUN;;;0\n",
);
}
if ( $TMAX < $TIME_RUN ) { $plugin_nagios->add_message(
my $code="CRITICAL",
my $message="La replication est en retard de $TIME_RUN sec|Retard=$TIME_RUN;;;0\n",
);
}
}
}

my ($code, $message) = $plugin_nagios->check_messages();
$plugin_nagios->nagios_exit($code,$message);
$S_Verif->finish;