[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