[FUG-BR] Tráfego de banda (CACTI + PFCTL)
Ricardo Campos Passanezi
riccp em ige.unicamp.br
Quarta Janeiro 24 16:44:25 BRST 2007
On Wed, Jan 24, 2007 at 10:52:48AM -0300, Welkson Renny de Medeiros wrote:
> Olá Ricardo,
>
>
> Essa parte de pegar os dados via SNMP no CACTI é tranquilo, já pego
> informação de alguns roteadores PR1000 Cyclades... mas essa do script não
> ficou bem claro, pode mandar um exemplo mais detalhado?
No meu servidor de emails tenho o script abaixo:
------ conta_mails.sh ------
#!/bin/sh
cat /var/tmp/mailstats.txt
----------------------------
Esse script é chamado via snmp:
exec .1.3.6.1.4.1.2021.54 shelltest /bin/sh /root/bin/conta_mails.sh
O mailstats.txt é gerado por um outro script (claro que dá para melhorar
o script - fui escrevendo e adicionando variáveis e aí funcionou e ficou
como ficou.... :-)), que rodo a cada 5 minutos via crontab:
------ atualiza_contagem.pl ------
#!/usr/bin/perl -w
$sent = 0;
$received = 0;
$rejected = 0;
$bounced = 0;
$spam_mark = 0;
$spam_block = 0;
$virus = 0;
$badh = 0;
open (LAST, "</var/tmp/mailstats.log")
or die "Unable to open\n";
while (<LAST>) {
if ($_ =~ /^0:/) {
($hash,$sentold) = split(/:/,$_);
} elsif ($_ =~ /^1:/) {
($hash,$receivedold) = split(/:/,$_);
} elsif ($_ =~ /^2:/) {
($hash,$rejectedold) = split(/:/,$_);
} elsif ($_ =~ /^3:/) {
($hash,$bouncedold) = split(/:/,$_);
} elsif ($_ =~ /^4:/) {
($hash,$spam_markold) = split(/:/,$_);
} elsif ($_ =~ /^5:/) {
($hash,$spam_blockold) = split(/:/,$_);
} elsif ($_ =~ /^6:/) {
($hash,$virusold) = split(/:/,$_);
} elsif ($_ =~ /^7:/) {
($hash,$badhold) = split(/:/,$_);
}
}
close (LAST);
system "/bin/mv /var/tmp/mailstats.log /var/tmp/mailstats.log.old";
open(LOG, "< /var/log/maillog")
or die "Unable to open\n";
while (<LOG>) {
if ($_ =~ /\bsaturno postfix\/smtp\[.*status=sent\b/ && $_ !~ /\brelay=[^\s\[]*\[127\.0\.0\.1\]/) {
$sent++;
} elsif ($_ =~ /\bsaturno postfix\/smtp\[.*status=bounced\b/) {
$bounced++;
} elsif ($_ =~ /\bsaturno postfix\/(local|error).*status=bounced\b/) {
$bounced++;
} elsif ($_ =~ /\bsaturno postfix\/smtpd.*client=(\S+)/ && $_ !~ /client=localhost/ && $_ !~ /reject:/) {
$received++;
} elsif ($_ =~ /\bsaturno postfix\/smtpd.* reject:/) {
$rejected++;
} elsif ($_ =~ /\bsaturno postfix\/cleanup.* (reject|discard):/) {
$rejected++;
} elsif ($_ =~ /saturno amavis.*Passed SPAM/) {
$spam_mark++;
} elsif ($_ =~ /saturno amavis.*Blocked SPAM/) {
$spam_block++;
} elsif ($_ =~ /saturno amavis.*(Passed |Blocked )?INFECTED/) {
$virus++;
} elsif ($_ =~ /saturno amavis.*(Passed|Not-Delivered) BAD-HEADER/) {
$badh++;
}
}
close (LOG);
open (LAST, ">/var/tmp/mailstats.log")
or die "Unable to open\n";
#print "0:$sent\n";
#print "1:$received\n";
#print "2:$rejected\n";
#print "3:$bounced\n";
#print "4:$spam_mark\n";
#print "5:$spam_block\n";
#print "6:$virus\n";
#print "7:$badh\n";
printf LAST "0:$sent\n";
printf LAST "1:$received\n";
printf LAST "2:$rejected\n";
printf LAST "3:$bounced\n";
printf LAST "4:$spam_mark\n";
printf LAST "5:$spam_block\n";
printf LAST "6:$virus\n";
printf LAST "7:$badh";
close (LAST);
$sent = $sent - $sentold;
$received = $received - $receivedold;
$rejected = $rejected - $rejectedold;
$bounced = $bounced - $bouncedold;
$spam_mark = $spam_mark - $spam_markold;
$spam_block = $spam_block - $spam_blockold;
$virus = $virus - $virusold;
$badh = $badh - $badhold;
open (LASTOUT, ">/var/tmp/mailstats.txt")
or die "Unable to open\n";
printf LASTOUT "$sent\n";
printf LASTOUT "$received\n";
printf LASTOUT "$rejected\n";
printf LASTOUT "$bounced\n";
printf LASTOUT "$spam_mark\n";
printf LASTOUT "$spam_block\n";
printf LASTOUT "$virus\n";
printf LASTOUT "$badh";
close(LASTOUT);
----------------------------------
Depois que fiz isso, criei um "Data Template" e depois dele um "Graph
Template" que gera o gráfico para as estatísticas de email.
Tudo bem que olhando nos fóruns do cacti já tem umas coisas prontas pro
postfix, mas isso acima já me basta...
--
Ricardo Campos Passanezi
Mais detalhes sobre a lista de discussão freebsd