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: Maicon Radeschi
Subject: Re: [shell-script] Shell script para monitorar logs
Date: Sat, 18 Aug 2012 17:14:18 -0400

Boa tarde,

Fiz uma alteração no código que melhorou 10000% a velocidade do script, que 
inclusive está e pronto e agora demorando em média 5minutos e 30segundos para 
gerar um relatório de uma log de 150MB, esse tempo já incluído a geração do 
HTML.. No momento não tem como enviar o script pra lista pois estou em casa e 
acabei deixando tudo no trabalho. Mas na segunda-feira na parte da manhã envio 
o script final para lista, se possível com o teste de geração de relatório em 
log maior..

Obrigado a todos pela ajuda..

Abraços

Maicon

On 18 Aug, 2012, at 3:24 PM, Robson Alexandre <address@hidden> wrote:

> Fiquei curioso para saber se o script que sugeri deu certo. Por isso mandei a 
> msg em PM.
> 
> Como foi o desempenho do script (já que não tenho um log aqui parecido para 
> testar).
> Caso não consiga o resultado esperado, vc poderia mandar parte do log para eu 
> testar, para fins didáticos
> 
> Atenciosamente
> 
> Robson Alexandre
> 
> Em 16 de agosto de 2012 11:49, Maicon Radeschi <address@hidden> escreveu:
> Bom dia,
> 
> Essa é a primeira versão que havia feito, não cheguei a conferir se os
> relatorios gerados estão realmente corretos..
> http://pastebin.com/RumAJ35z
> 
> Essa é a versão que estou fazendo no momento, ainda não fiz a função de
> geração de html a partir dos dados obtidos, está demorando cerca de 2 horas
> e meia para ler 1000 emails, sem gerar o html, acredito que deva ficar em
> torno de 5 horas para gerar o relatório completo, com um log de 1gb. Porém
> acredito que feito dessa forma não tem como o relatório estar errado, pois
> pego o ID do email e a partir desse ID pego o campo from e to, sendo que
> para gerar o html, só preciso pegar inserir os dados extraídos previamente.
> http://pastebin.com/6icLHQzH
> 
> Abraços
> 
> Maicon
> 
> 2012/8/15 Robson Alexandre <address@hidden>
> 
> > **
> >
> >
> > Boa Júlio,
> > realmente não testei o comando com uma massa de dados e acabei esquecendo
> > deste detalhe.
> >
> > Maicon,
> > seu script anexo não veio, acredito que a lista não aceite envio de anexos,
> > por isso sugiro que vc o coloque no pastebin.
> > Mas pelo que eu entendi seu problema é no algoritmo do seu procedimento.
> > E pelo que pude entender pois não manjo do log do postfix também seria algo
> > do tipo:
> >
> > criar uma lista from das linhas que contém from do tipo
> > idmsg;remetente
> > criar a uma segunda lista to com
> > idmsg;destinatario
> > substituir na lista to os idmsg com remetente da lista from
> > a partir da lista from fazer o uniq -c pra contar qtos emais cada user
> > enviou
> > contar na lista to (remetente;destinatario) modificada a qtde de emails
> > e montar os htmls
> >
> > Como eu não possuo log do postfix para testar imagino algo do tipo:
> >
> > http://pastebin.com/bSQdSFmV
> >
> > Att
> > Robson Alexandre
> >
> > Em 14 de agosto de 2012 18:30, Maicon Radeschi <address@hidden
> > >escreveu:
> >
> >
> > > Julio, é um prazer ter uma resposta sua, sou grande fã, com vários livros
> > > aqui!
> > >
> > > Fiz um novo script usando os comandos que passou, ele monta um relatório
> > > completo, porém aparentemente não fica correto. Por exemplo:
> > >
> > > O usuário address@hidden enviou email para rodrigo, cesar, joao,
> > > address@hidden. Porém no relatório de Maicon esses envios não aparecem,
> > > mas
> > > outros envios que não consigo identificar de quem seja.
> > > Por isso meu primeiro script tentava gerar o relatório pelo ID da
> > mensagem,
> > > pois com ele é possível saber quem enviou a mensagem e para quem,
> > inclusive
> > > se foi enviado para mais de uma pessoa, além de tamanho do email, data,
> > > etc..
> > >
> > > Abaixo um exemplo de log do postfix e anexo envio o script que fiz(não
> > está
> > > otimizado, queria apenas que funcionasse, depois tentaria arrumar
> > possíveis
> > > lags)
> > >
> > > 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
> > >
> > > Abraços e obrigado!
> > >
> > > 2012/8/14 Julio C. Neves <address@hidden>
> > >
> > > > **
> >
> > > >
> > > >
> > > > 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]
> > > >
> > > >
> > > >
> > >
> > >
> > >
> > > --
> > > --
> > > Maicon Radeschi
> > > address@hidden
> > >
> > >
> > > [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]