[Cascavel-pm] Ajuda com tail

Alexei Znamensky russoz em gmail.com
Terça Julho 7 20:44:16 PDT 2009


Ari,

Você tem certeza de que não é o /var/log/maillog que está sendo bufferizado?
Tirado do syslog.conf(5):

   Regular File
       Typically messages are logged to real files.  The file must  be
speci‐
       fied as an absolute pathname.

       *You  may  prefix  each entry with a minus sign (‘‘-’’) to avoid
syncing
       the file after each log message*.  Note that you might lose
information
       if  the  system crashes right after a write attempt.  Nevertheless
this
       might give you back some performance, especially if  you  run
programs
       that use logging in a very verbose manner.

No /etc/syslog.conf aqui do meu Ubuntu, tenho:

00:28:18 az em alexeiz:~ $ grep mail /etc/syslog.conf
mail.*                -/var/log/mail.log
# Logging for the mail system.  Split it up so that
mail.info            -/var/log/mail.info
mail.warning            -/var/log/mail.warn
mail.err            /var/log/mail.err

Ou seja, exceto o mail.err, todos os outros têm o  '-' na frente do nome do
arquivo, i.e., são bufferizados. Verifique como está no seu sistema.

Se é que eu entendi o formato no qual essas mensagens aparecem no log, eu
escreveria assim:

-------->8-------->8-------->8-------- cut here
-------->8-------->8-------->8--------
#/usr/bin/perl

open( LOG, "-|", "/usr/bin/tail -F /var/log/maillog" );
while(<LOG>) {
  chomp;
  next unless /pop3d: LOGIN,/;
  ($ip) = ( /ip=\[([^\]]+)\]/ );
  print $ip . "\n";
}
close(LOG);    # sim, purismo
-------->8-------->8-------->8-------- cut here
-------->8-------->8-------->8--------

ou

-------->8-------->8-------->8-------- cut here
-------->8-------->8-------->8--------
#!/bin/sh

/usr/bin/tail -F /var/log/maillog |
  perl -nle '
    next unless /pop3d: LOGIN,/;
    ($ip) = ( /ip=\[([^\]]+)\]/ );
    print $ip;
  '
# END
-------->8-------->8-------->8-------- cut here
-------->8-------->8-------->8--------

Aos golfistas de plantão: não, isso não foi uma tacada inicial... :-P

[]s,
Russo

2009/7/7 Ari Arantes <ariarantes em gmail.com>

> Testei com STDERR e também com $| = 1, mas o buffer continua.
>
> Consegui solucionar assim:
>
> #!/usr/bin/perl
>
> open(LOG,"tail -F /var/log/maillog |");
> while (<LOG>) {
>  chomp($_);
>  if ($_ =~ /pop3d: LOGIN,/) {
>    ($lixo, $ip, $lixo) = split('ip=\[', $_);
>    ($ip, $lixo) = split('\]', $ip);
>    print "$ip $_\n";
>  }
> }
>
> Obrigado pela ajuda!
>
> []s,
>
> Ari
>
>
>
> 2009/7/7 Lindolfo "Lorn" Rodrigues <lorn.br em gmail.com>:
> > Ari,
> >
> > Ou você usa a saida de erro que não tem buffer
> >
> > - print "$ip $log\n";
> > + print STDERR "$ip $log\n";
> >
> > Ou você pode setar a variavel de flush para true:
> >
> > $| = 1
> >
> > Mais informações: http://www.kichwa.com/quik_ref/spec_variables.html
> >
> > 2009/7/7 Ari Arantes <ariarantes em gmail.com>
> >>
> >> Valeu pelo ajuda, mas o problema é que não pode ter módulo adicional,
> >> pois o objetivo é rodar em qualquer servidor, sem necessariamente ter
> >> o File::Tail instalado.
> >>
> >> Esse "buffer" que o perl faz, é normal?
> >>
> >> []s,
> >>
> >> Ari
> >>
> >>
> >> 2009/7/7 Giuliani Deon Sanches <giulianisanches em gmail.com>:
> >> > 2009/7/7 Lindolfo "Lorn" Rodrigues <lorn.br em gmail.com>
> >> >>
> >> >> Cara, use esse modulo do CPAN você terá mais controle:
> >> >>
> >> >> http://search.cpan.org/~mgrabnar/File-Tail-0.99.3/Tail.pm<http://search.cpan.org/%7Emgrabnar/File-Tail-0.99.3/Tail.pm>
> >> >>
> >> >> Qualquer dúvida manda ai
> >> >>
> >> >> 2009/7/7 Ari Arantes <ariarantes em gmail.com>
> >> >>>
> >> >>> Pessoal,
> >> >>>
> >> >>> Preciso escrever uma rotina para monitorar os acessos ao POP3. Fiz o
> >> >>> seguinte:
> >> >>>
> >> >>> #!/usr/bin/perl
> >> >>>
> >> >>> #um exemplo do LOG:
> >> >>> #Jul  7 16:46:24 servidor1 pop3d: LOGIN,
> >> >>> user=usuario1 em dominio1.com.br, ip=[201.201.201.43], port=[4682]
> >> >>>
> >> >>>
> >> >>> $arqlog="/var/log/maillog";
> >> >>>
> >> >>> open(LOG, "tail -F $arqlog | grep \"pop3d: LOGIN,\" |");
> >> >>> while ($log=<LOG>) {
> >> >>>        chomp($log);
> >> >>>        ($lixo, $ip, $lixo) = split('ip=\[', $log);
> >> >>>        ($ip, $lixo) = split('\]', $ip);
> >> >>>        print "$ip $log\n";
> >> >>> }
> >> >>>
> >> >>> Esse é apenas o começo, depois terá conexão com base de dados, mas
> >> >>> tenho uma dúvida.
> >> >>>
> >> >>> Se digito "tail -F /var/log/maillog | grep "pop3d: LOGIN,"" numa
> >> >>> sessão ssh, a tela rola muito rápido e de forma constante, agora se
> >> >>> rodo pelo perl acima, parece que ele "enche" um buffer e depois
> manda
> >> >>> de uma vez para tela, como se mandasse de tempos em tempos. Como
> >> >>> evitar esse "problema de buffer"?
> >> >>>
> >> >>> Obrigado,
> >> >>>
> >> >>> Ari
> >> >>> _______________________________________________
> >> >>> Cascavel-pm mailing list
> >> >>> Cascavel-pm em pm.org
> >> >>> http://mail.pm.org/mailman/listinfo/cascavel-pm
> >> >>
> >> >>
> >> >>
> >> >> --
> >> >> --Lindolfo "Lorn" Rodrigues
> >> >> www.slackwarezine.com.br
> >> >> http://lornlab.org
> >> >> http://sao-paulo.pm.org
> >> >> use Catalyst;
> >> >>
> >> >> _______________________________________________
> >> >> Cascavel-pm mailing list
> >> >> Cascavel-pm em pm.org
> >> >> http://mail.pm.org/mailman/listinfo/cascavel-pm
> >> >
> >> > Cacilda... tava colando link aqui e aparece a resposta do Lor. Se
> >> > passa o dia inteiro com o cliente de e-mail aberto ? :P
> >> >
> >> > --
> >> > twitter.com/giulianisanches
> >> > giulianisanches.blogspot.com
> >> > _______________________________________________
> >> > Cascavel-pm mailing list
> >> > Cascavel-pm em pm.org
> >> > http://mail.pm.org/mailman/listinfo/cascavel-pm
> >> >
> >> _______________________________________________
> >> Cascavel-pm mailing list
> >> Cascavel-pm em pm.org
> >> http://mail.pm.org/mailman/listinfo/cascavel-pm
> >
> >
> >
> > --
> > --Lindolfo "Lorn" Rodrigues
> > www.slackwarezine.com.br
> > http://lornlab.org
> > http://sao-paulo.pm.org
> > use Catalyst;
> >
> > _______________________________________________
> > Cascavel-pm mailing list
> > Cascavel-pm em pm.org
> > http://mail.pm.org/mailman/listinfo/cascavel-pm
> >
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em pm.org
> http://mail.pm.org/mailman/listinfo/cascavel-pm
>



-- 
Alexei Znamensky [russoz_gmail_com] [russoz.wordpress.com] [
www.flickr.com/photos/alexeiz]
"Though we live in trying times, we're the ones who have to try"
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/cascavel-pm/attachments/20090708/861b5de2/attachment.html>


Mais detalhes sobre a lista de discussão Cascavel-pm