[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