Surveiller un serveur Sendmail

Notez cet article

Du fait de sa criticité, un serveur Sendmail doit être surveillé afin de pouvoir agir rapidement. Les programmes présentés ci-dessous s’appuient sur des scripts Perl, couplés à MRTG et à SNMP. Le but est de pouvoir prévenir toute panne et agir proactivement.

Surveiller la partition /var d’un serveur Sendmail
Le petit script PERL ci-dessous récupère la taille maximale de la partition /var (index 3) ainsi que l’espace utilisé. Il calcule le pourcentage utilisé et prépare les résultats pour les passer à MRTG :
#!/usr/bin/perl
# getdisk.pl
$max=`snmpget 192.168.10.2 mdp host.hrStorage.hrStorageTable.hrStorageEntry.hrStorageSize.3`;
$used=`snmpget 192.168.10.2 mdp host.hrStorage.hrStorageTable.hrStorageEntry.hrStorageUsed.3`;
$max =~ s/.*\:(.*)/$1/g;
$used =~ s/.*\:(.*)/$1/g;
if($max==0)
{
$pct=0;
}
else
{
$pct = ($used * 100) / $max;
}
$pct =~ s/(.*)\..*/$1/g;
print « $pct\n$pct\n\n\n »;

Le chapitre MRTG ci-dessous crée un graphique du pourcentage de l’espace utilisé sur la partition /var :
Target[sendmail.diskvar]: `/home/mrtg/bin/getdisk.pl`
Directory[sendmail.diskvar]: sendmail
MaxBytes[sendmail.diskvar]: 100
Unscaled[sendmail.diskvar]: dwmy
Options[sendmail.diskvar]: gauge
Title[sendmail.diskvar]: Charge du disque /var
XSize[sendmail.diskvar]: 580
YSize[sendmail.diskvar]: 100
YLegend[sendmail.diskvar]: %
ShortLegend[sendmail.diskvar]: %
PageTop[sendmail.diskvar]:<H1> Charge du disque /var </H1>
Legend1[sendmail.diskvar]: Espace disque utilisé en pourcentage
LegendI[sendmail.diskvar]: Volumetrie
LegendO[sendmail.diskvar]: Volumetrie

Surveiller le nombre de connexions sur un serveur Sendmail
Le petit script PERL ci-dessous extrait le nombre de connexions sur le serveur Sendmail et le prépare dans un format compréhensible par MRTG :
# !/usr/bin/perl
# gestestab.pl
$cnx=` snmpget 192.168.10.2 mdp tcp.tcpCurrEstab.0`;
chomp($cnx);
($cnx) = ($cnx =~ /= Gauge32: (.+)/);
if($cnx eq «  »)
{
print « 0\n0\n »;
}
else
{
print « $cnx \n$cnx \n »;
}

Voici le chapitre MRTG servant à afficher le nombre de connexions :
Target[sendmail.estab]: `/home/mrtg/bin/getestab.pl`
Directory[sendmail.estab]: sendmail
Options[sendmail.estab]: gauge,nopercent
MaxBytes[sendmail.estab]: 50
Unscaled[sendmail.estab]: d
XSize[sendmail.estab]: 580
YSize[sendmail.estab]: 100
YLegend[sendmail.estab]: Nombre de connexions
ShortLegend[sendmail.estab]: Connexions
Title[sendmail.estab]: Connexions sur Sendmail
PageTop[sendmail.estab]: <H1>Nombre de connexions sur le serveur Sendmail</H1>

Surveiller la charge moyenne d’un serveur Sendmail
Le petit script PERL ci-dessous récupère la charge sur la dernière minute, l’arrondit et affiche le résultat sous une forme compréhensible par MRTG :
#!/usr/bin/perl
# getlat.pl
$charge=`snmpget 192.168.10.2 mdp enterprises.ucdavis.laTable.laEntry.laLoad.1`;
chomp($charge);
($charge) = ($charge =~/= (.+)/);
$charge=int($charge);
if($charge eq «  »)
{
print « 0\n0\n »;
}
else
{
print « $charge\n$charge\n »;
}

Voici le chapitre MRTG utilisé pour tracer la charge moyenne du serveur Sendmail : Target[sendmail.charge]: `/home/mrtg/bin/getlat.pl`
Directory[sendmail.charge]:sendmail
Options[sendmail.charge]: gauge,nopercent
MaxBytes[sendmail.charge]: 5
Unscaled[sendmail.charge]: dwmy
XSize[sendmail.charge]: 580
YSize[sendmail.charge]: 100
YLegend[sendmail.charge]: Charge
ShortLegend[sendmail.charge]: Charge
Title[sendmail.charge]: Charge du serveur Sendmail
PageTop[sendmail.charge]: <H1> Charge du serveur Sendmail </H1>

Surveiller la quantité de messages passant sur un serveur Sendmail
Tout d’abord voici un petit script Perl permettant la récupération des informations du fichier sendmail.st via la commande mailstats:
open (FD, »mailstats | »);
while (my $li = )
{
if($li =~ /===/)
{
$li=<FD>;
$li=~ s/ +/ /g;
@l0= split (/ /,$li);
($l0[3])=($l0[3] =~ /(.+)K/);
($l0[5])=($l0[5] =~ /(.+)K/);
if($l0[2] eq «  »)
{
print « 0 « ;
}
else
{
print « $l0[2] « ;
}
if($l0[4] eq «  »)
{
print « 0 « ;
}
else
{
print « $l0[4] « ;
}
}
}
close (FD);

Il ne faut pas oublier de supprimer le fichier /etc/mail/sendmail.st pour réinitialiser les informations de statistiques.
Le résultat du script est appelé au moyen d’une requête SNMP via la définition suivante dans le fichier snmpd.conf (exemple ucd-snmp) :
exec .1.3.6.1.4.1.2021.61 msg_geres /usr/bin/perl /usr/bin/pl/mlstat.pl

Le script ci-dessous reprend l’ensemble de la requête ainsi que le formatage pour MRTG :
#!/usr/bin/perl
# getmsg.pl
$etat=`snmpget 192.168.10.2 mdp enterprises.ucdavis.61.101.1`;
chomp($etat);
($etat, $etat2) = ($etat =~ /= « (.+) (.+) »/);
if($etat eq «  »)
{
print « 0\n »;
}
else
{
print « $etat\n »;
}
if($etat2 eq «  »)
{
print « 0\n »;
}
else
{
print « $etat2\n »;
}

Voici le chapitre MRTG permettant de tracer la volumétrie des messages :
Target[sendmail.msg]: `/home/mrtg/bin/getmsg.pl`
Directory[sendmail.msg]: sendmail
Options[sendmail.msg]: gauge,nopercent
MaxBytes[sendmail.msg]: 250
Unscaled[sendmail.msg]: d
XSize[sendmail.msg]: 580
YSize[sendmail.msg]: 100
YLegend[sendmail.msg]: Nbre de messages
ShortLegend[sendmail.msg]: msg
Legend1[sendmail.msg]: Messages entants
Legend2[sendmail.msg]: Messages sortants
LegendI[sendmail.msg]: Messages entants
LegendO[sendmail.msg]: Messages sortants
Title[sendmail.msg]: Volumétrie de la messagerie
PageTop[sendmail.msg]: <H1>Messages entrants / sortants Sendmail</H1>

Laisser un commentaire