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: Wed, 22 Aug 2012 13:42:21 -0400

Desculpem a demora para enviar o script finalizado, porém estava meio corrido 
por aqui..  

Segue o código do script, que está bem rápido e funcional para gerar os 
relatórios..
http://pastebin.com/NBxBuhPw

O próximo passo agora é ele categorizar os relatórios por data, pois atualmente 
cada vez que você roda o script, ele sobrescreve o relatório gerado 
anteriormento(se não for copiado para outro local).

Obrigado pela ajuda de todos.

Abraços  

--  
Maicon Radeschi


On Saturday, August 18, 2012 at 5:14 PM, Maicon Radeschi wrote:

> 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 
> (mailto: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 
> > (mailto: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 (mailto: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 
> > > > (mailto: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 (mailto:address@hidden) enviou email para 
> > > > > rodrigo, cesar, joao,
> > > > > address@hidden (mailto: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 (mailto:address@hidden)>
> > > > > Aug 8 07:09:36 postfix/smtp[11802]: 6A4686021B: to=<
> > > > > address@hidden (mailto: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 (mailto:address@hidden)>, size=2694, nrcpt=1 (queue 
> > > > > active)
> > > > > Aug 8 07:09:38 postfix/smtp[10665]: 9FF6E6046D: to=<
> > > > > address@hidden (mailto:address@hidden)>, relay=mx4.hotmail.com 
> > > > > (http://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 (mailto: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 (mailto: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 
> > > > > > (mailto: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 (mailto: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 (mailto: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 
> > > > > > > > > (mailto: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 (mailto:address@hidden)>
> > > > > > > > > > Aug 8 07:09:36 postfix/smtp[11802]: 6A4686021B: to=<
> > > > > > > > > > address@hidden (mailto: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 (mailto:address@hidden)>, size=2694, nrcpt=1 
> > > > > > > > > > (queue
> > > > > > active)
> > > > > > > > > > Aug 8 07:09:38 postfix/smtp[10665]: 9FF6E6046D: to=<
> > > > > > > > > > address@hidden (mailto:address@hidden)>, 
> > > > > > > > > > relay=mx4.hotmail.com (http://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 (mailto: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 (mailto: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 (mailto:address@hidden)
> > > > > > > >
> > > > > > > > > ----------------------------------------------------------
> > > > > > > > > Esta lista é moderada de acordo com o previsto em
> > > > > > > > > http://www.listas-discussao.cjb.net 
> > > > > > > > > (http://www.listas-discussao.cjb.net/)
> > > > > > > > > ----------------------------------------------------------
> > > > > > > > > Servidor Newsgroup da lista: news.gmane.org 
> > > > > > > > > (http://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 (mailto:address@hidden)
> > > > > > > ----------------------------------------------------------
> > > > > > > Esta lista é moderada de acordo com o previsto em
> > > > > > > http://www.listas-discussao.cjb.net 
> > > > > > > (http://www.listas-discussao.cjb.net/)
> > > > > > > ----------------------------------------------------------
> > > > > > > Servidor Newsgroup da lista: news.gmane.org 
> > > > > > > (http://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 (mailto: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 (mailto:address@hidden)
> > > > > ----------------------------------------------------------
> > > > > Esta lista é moderada de acordo com o previsto em
> > > > > http://www.listas-discussao.cjb.net 
> > > > > (http://www.listas-discussao.cjb.net/)
> > > > > ----------------------------------------------------------
> > > > > Servidor Newsgroup da lista: news.gmane.org (http://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 (mailto:address@hidden)
> > > ---------------------------------------------------------------------
> > > Esta lista é moderada de acordo com o previsto em 
> > > http://www.listas-discussao.cjb.net (http://www.listas-discussao.cjb.net/)
> > > ---------------------------------------------------------------------
> > > Servidor Newsgroup da lista: news.gmane.org (http://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]