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 09:21:02 -0400

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]



reply via email to

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