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: Tue, 14 Aug 2012 17:30:05 -0400

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]



reply via email to

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