shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Shell script para monitorar logs


From: Julio C. Neves
Subject: Re: [shell-script] Shell script para monitorar logs
Date: Tue, 14 Aug 2012 13:03:31 -0300

Maicon,

Não conheço este log, portanto estou partindo do pressuposto que qtd
remetentes = qtd destinatários, isto é, será gerado um registro para cada
destinatário.

# Criando um arquivo de remetentes
sed -rn '/from=/{s/.*from=<([^>]*)>.*/\1/;p}' > from
# Criando um arquivo de destinatários
sed -rn '/to=/{s/.*to=<([^>]*)>.*/\1/;p}' > to
# Quem mandou email para quem
paste from to | sort
# Qtd email/usuários
sort from | uniq -c
# Total enviados
wc -l from

Abcs,
Julio

*
*



Em 14 de agosto de 2012 10:21, Maicon Radeschi <address@hidden>escreveu:

> Bom dia..
>
> Na verdade eu já fiz e refiz esse script várias vezes, mas a situação é a
> seguinte:
>
> Tenho um arquivo de log do postfix mensal de +/- 10GB, preciso a partir
> desse arquivo, gerar um relatório em HTML com as seguintes informações.
>
> --
>
> Index.html
>
> Número total de emails enviados pelo servidor
>
> Nome dos usuários ; Total de mensagens enviadas por cada usuário
>
> usuarios.html
>
> Cada usuário teria um html, contendo para quem ele enviou emails.
>
> --
>
> A questão é que como o arquivo é muito grande, não posso ficar lendo ele a
> todo momento para pegar a informação de ID da mensagem, do campo from e
> campo to, pois da forma como estava fazendo, o script primeiramente
> capturava todos os ID de mensagens do log, usando o no uniq eu tirava os
> repetidos(pois geralmente são 4 a 5 linhas e log por email) e ía salvando
> esses ID em arquivos separados, aí dava um wc -l para contar o total de
> emails enviados.. O problema é que para fazer isso já li uma vez o arquivo
> de 10GB, com a lógica que tinha feito, para pegar o campo FROM teria que
> ler outra vez, e depois para comparar para quem essas pessoas desse campo
> FROM enviaram os emails(campo TO), teria que ler mais um vez. Aí ficaria
> muito lento, demoraria dias para gerar um relatório.
>
> Eu sei que está meio complicada minha explicação.. Vou tentar escrever um
> outro código e envio, mas se conseguirem uma idéia melhor para eu fazer
> isso, agradeço.
>
> Abraços.
> --
> --
> Maicon Radeschi
>
> 2012/8/14 Julio C. Neves <address@hidden>
>
> > **
> >
> >
> > Robson,
> > minha proposta seria a mesma que a sua, porém acho que vc esqueceu de
> > colocar um sort antes do uniq -c.
> >
> > Abcs,
> > Julio
> >
> > *
> > *
> >
> > Em 14 de agosto de 2012 09:12, Robson Alexandre
> > <address@hidden>escreveu:
> >
> >
> > > Bom dia Maicon,
> > > Não entendi exatamente seu problema, se é de lógica/algoritmo ou de
> qual
> > > ferramenta apropriada para utilizar.
> > > Pensei logo de cara em usar o uniq -c desta forma
> > > sed -r '/from=/{s/.*from=<([^>]*)>.*/\1;p}' arquivo.log | uniq -c
> > > Seria uma idéia para somar todos os remetentes agrupando.
> > > Daí teria de pegar cada remetente para cada destinatário e agrupa-los 1
> > > para N.
> > > Vc poderia postar o script q está tentando fazer para podermos te
> ajudar
> > > melhor?
> > >
> > > Atenciosamente
> > > Robson Alexandre
> > > Em 13/08/2012 20:03, "Maicon Radeschi" <address@hidden> escreveu:
> > >
> > > > **
> > > >
> > > >
> > > > Boa tarde,
> > > >
> > > > Estou tentando desenvolver um script para gerar logs de emails
> enviados
> > > por
> > > > um servidor postfix, os logs estão no seguinte formato..
> > > >
> > > > Aug 8 07:09:36 postfix/smtpd[10659]: 9FF6E6046D:
> > > > client=localhost.localdomain[127.0.0.1]
> > > > Aug 8 07:09:36 postfix/cleanup[11622]: 9FF6E6046D: message-id=<
> > > > address@hidden>
> > > > Aug 8 07:09:36 postfix/smtp[11802]: 6A4686021B: to=<
> > > > address@hidden>, relay=127.0.0.1[127.0.0.1]:10024,
> > > conn_use=83,
> > > > delay=42, delays=0.02/42/0.01/0.56, dsn=2.0.0, status=sent (250 2.0.0
> > > from
> > > > MTA([127.0.0.1]:10025): 250 2.0.0 Ok: queued as 9FF6E6046D)
> > > > Aug 8 07:09:36 postfix/qmgr[1972]: 9FF6E6046D: from=<
> > > > address@hidden>, size=2694, nrcpt=1 (queue active)
> > > > Aug 8 07:09:38 postfix/smtp[10665]: 9FF6E6046D: to=<
> > > > address@hidden>, relay=mx4.hotmail.com[65.55.37.72]:25,
> > > > conn_use=6, delay=1.5, delays=0.05/0.03/0.28/1.2, dsn=2.0.0,
> > status=sent
> > > > (250 <address@hidden> Queued mail
> for
> > > > delivery)
> > > > Aug 8 07:09:38 postfix/qmgr[1972]: 9FF6E6046D: removed
> > > >
> > > > Seria fácil se os arquivos de logs não ficassem na casa dos
> gigabytes,
> > > > então por questões de desempenho, não posso ficar lendo o arquivo de
> > log
> > > > toda vez, em uma única leitura, preciso pegar o campo
> > > > address@hidden e depois contar quantos emails esse
> > > usuário
> > > > enviou e para quem tal usuário enviou esse email. Com esses dados o
> > > script
> > > > deve gerar uma página html para facilitar a visualização.
> > > >
> > > > A pagina teria o nome de todos os usuários que mandaram email, com o
> > > total
> > > > de emails enviados na frente do nome, e ao clicar no usuário seria
> > > aberta a
> > > > lista de todos os destinatários que esse usuário se comunicou, também
> > > com o
> > > > total.
> > > >
> > > > Pensei em fazer usando read para ir lendo linha por linha e ir
> criando
> > > > arquivos pequenos com o nome do usuario, dentro desses arquivos já ir
> > > > jogando o nome dos destinatários desse usuário. Pois aí não
> precisaria
> > > mais
> > > > ler o arquivo grande denovo, na hora de gerar o html, podia usar o
> > > próprio
> > > > ls pra pegar todos os arquivos(que já são os nomes dos usuários)..
> > > >
> > > > Porém os códigos que tenho feito, ou tem ficado muito lento, ou não
> tem
> > > > dado certo por algum motivo que não sei explicar.. As informações das
> > > > mensagens podem ser capturadas com o ID(9FF6E6046D por exemplo)..
> > > >
> > > > Alguém tem alguma idéia que possa me ajudar?
> > > >
> > > > Abraços
> > > >
> > > > --
> > > > --
> > > > Maicon
> > > >
> > > > [As partes desta mensagem que não continham texto foram removidas]
> > > >
> > > >
> > > >
> > >
> > >
> > > [As partes desta mensagem que não continham texto foram removidas]
> > >
> > >
> > >
> > > ------------------------------------
> > >
> > > ----------------------------------------------------------
> > > Esta lista não admite a abordagem de outras liguagens de programação,
> > como
> > > perl, C etc. Quem insistir em não seguir esta regra será moderado sem
> > > prévio aviso.
> > > ----------------------------------------------------------
> > > Sair da lista: address@hidden
> >
> > > ----------------------------------------------------------
> > > Esta lista é moderada de acordo com o previsto em
> > > http://www.listas-discussao.cjb.net
> > > ----------------------------------------------------------
> > > Servidor Newsgroup da lista: news.gmane.org
> > > Grupo: gmane.org.user-groups.programming.shell.brazil
> > >
> > > Links do Yahoo! Grupos
> > >
> > >
> > >
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> >
> >
>
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>
> ------------------------------------
>
> ---------------------------------------------------------------------
> Esta lista não admite a abordagem de outras liguagens de programação, como
> perl, C etc. Quem insistir em não seguir esta regra será moderado sem
> prévio aviso.
> ---------------------------------------------------------------------
> Sair da lista: address@hidden
> ---------------------------------------------------------------------
> Esta lista é moderada de acordo com o previsto em
> http://www.listas-discussao.cjb.net
> ---------------------------------------------------------------------
> Servidor Newsgroup da lista: news.gmane.org
> Grupo: gmane.org.user-groups.programming.shell.brazil
>
> Links do Yahoo! Grupos
>
>
>


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]