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: Thu, 16 Aug 2012 10:49:06 -0400

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]



reply via email to

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