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: Robson Alexandre
Subject: Re: [shell-script] Shell script para monitorar logs
Date: Wed, 15 Aug 2012 17:56:23 -0300

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
>
> > 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]



reply via email to

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