shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Cruzar access.log com outro log


From: Adriano Carneiro de Moura
Subject: Re: [shell-script] Cruzar access.log com outro log
Date: Mon, 27 Aug 2007 16:35:11 -0300 (ART)

Ok,

Vou tentar implementar o script do Flavio.

Quem me deras se todas as listas que participo tivesse metade da eficiência 
desta lista aqui.

Muitíssimo obrigado a todos que responderam.

Flavio Junior <address@hidden> escreveu:                               Sabia q 
eu já tinha feito isso...
 
 Procurei no historico da lista e encontrei:
 http://www.mail-archive.com/address@hidden/msg03978.html
 
 É exatamente o que voce quer, so muda de ingles pra portugues..
 
 O link pro script q escrevi direto é:
 
 http://pastebin.ca/179891
 
 Espero que isso ajude,
 
 Flávio do Carmo Junior
 
 On 8/27/07, Tiago Barcellos Peczenyj <address@hidden> wrote:
 >
 >   Ola,
 >
 > primeiro vamos transformar os 3 awk's em 1
 >
 > awk '{ $1=gensub("^(\d+)/(\d+)","\\2/\\1",1,$1);
 > $8=gensub("http://([^/]+)/.*","\\1",1,$8);
 > print $1,$2,$4,$8 }' access.log | sort -u
 >
 > se bem que, com o FS correto, fica bem mais simples
 >
 > awk -F '[ /]' '{print $2"/"$1"/"$3,$4,$6,$13}' access.log | sort -u
 > 27/08/2007 11:49:43 192.168.0.126 rad.msn.com
 > 27/08/2007 11:49:44 192.168.0.126 rad.msn.com
 > 27/08/2007 11:56:22 192.168.0.126 www.orkut.com
 > 27/08/2007 12:00:22 192.168.0.126 rad.msn.com
 > 27/08/2007 12:07:00 192.168.0.126 sb.google.com
 >
 > A parte 'complexa' fica na analise dos horarios de entrada e saida de
 > cada usuario.
 >
 > O que eu poderia sugerir...
 >
 > Acredito que se os dados dos usuarios forem alterados para este formato:
 >
 > awk -F '[ :/]' '{t=mktime($5" "$4" "$3" "$6" "$7" "$8); print
 > t,$9,$2,$1}' users.log | sort -n
 > 1188222050 10.3.16.131 entrou JOAQUIM
 > 1188223681 10.3.16.131 saiu JOAQUIM
 >
 > awk -F '[ /:]' '{t=mktime($3" "$1" "$2" "$4" "$5" "$6); print
 > t,$8,$16}' access.log | sort -u
 > 1188226183 192.168.0.126 rad.msn.com
 > 1188226184 192.168.0.126 rad.msn.com
 > 1188226582 192.168.0.126 www.orkut.com
 > 1188226822 192.168.0.126 rad.msn.com
 > 1188227220 192.168.0.126 sb.google.com
 >
 > vou dar o caminho das pedras, até pq mais do que isso seria resolver o
 > problema inteiro:
 >
 > o que eu fiz foi usar a função mktime para calcular um numero inteiro,
 > um time stamp.
 >
 > preciso saber agora, para um dado ip, qual é o usuario que estava logado.
 >
 > vindo do users.log
 > timestamp_começo IP FULANO entrou
 > timestamp_fim IP FULANO saiu
 >
 > e no access.log
 > timestamp_x IP ...
 >
 > Eu encontro o fulado quando eu satisfaço esta condição
 >
 > IP (user.log) == IP (access.log)
 > AND timestamp_começo < timestamp_x
 > AND timestamp_x < timestamp_fim
 >
 > o grande problema é que eu não posso levar isto ao pe da letra, pelo
 > seguinte: se eu conectei com o mesmo IP uma semana antes e uma semana
 > depois, isso interfere na pesquisa. teria que fazer algo mais. este
 > tipo de problema acontece quando eu oriento os meus registros por
 > linha, quando na verdade eu tenho um registro multi-linha.
 >
 > eu fui claro? relendo pode ter ficado um pouco confuso...
 >
 > o correto seria eu ter um arquivo assim
 >
 > IP timestamp_começo timestamp_fim FULANO
 >
 > eu pensaria em separar os arquivos por IP, criar arquivos
 >
 > users_IP
 >
 > cujo conteudo seria
 >
 > timestamp_começo timestamp_fim FULANO
 >
 > $ awk -F '[ :/]' '{
 > t=mktime($5" "$4" "$3" "$6" "$7" "$8); print t,$2,$1 > "users_"$9}'
 > users.log | sort -n
 >
 > $ cat users_10.3.16.131
 > 1188222050 entrou JOAQUIM
 > 1188223681 saiu JOAQUIM
 >
 > $ awk '$2 ~ /entrou/{entrou[$3]=$1}
 > $2 ~/saiu/{print entrou[$3],$1,$3 > "new_"FILENAME}' users_*
 >
 > $ cat new_users_10.3.16.131
 > 1188222050 1188223681 JOAQUIM
 >
 > agora é, dado o ip e o timestamp, vc abrir o arquivo new_users_IP e
 > procurar o intervalo correto. teras que usar o getline() em um while
 >
 > No livro "The AWK programming language" do Aho, Weinberger &
 > Kerninghan existe um capitulo sobre "Reports and Databases" -- o caso
 > de procurar dados em 2 arquivos seria um caso de um "Natural Join".
 >
 > Entretanto o problema neste caso está na forma como a informação foi
 > espalhada de uma forma não trivial, recomendo algumas horas ajudando
 > um bom AWK para chegar em um resultado satisfatório.
 >
 > Podem existir alternativas? Sim, devem haver ferramentas que, se
 > utilizadas corretamente, devem prover a mesma informação, porém não as
 > conheço com a profundidade adequada e, para mim, isso é uma tarefa
 > para o AWK ;-)
 >
 > On 8/27/07, Adriano Carneiro de Moura 
 > <address@hidden<adrianodemoura%40yahoo.com.br>>
 > wrote:
 > > On 8/27/07, Adriano Carneiro de Moura 
 > > <address@hidden<adrianodemoura%40yahoo.com.br>>
 > wrote:
 > > >
 > > > pessoal,
 > > >
 > > > estou usando um proxy transparente e preciso fazer um relatório de
 > usuário/ip/site, aconte que o nome dos usuários estão em outro log,
 > diferente do access.log, e preciso cruzar os dois logs.
 > > >
 > > > Para tirar a linha no access.log estou usando o seguinte comando.
 > > >
 > > > cat /var/log/squid/access.log | awk '{print $1,$2,$4,$8}' | awk -F"/"
 > '{print $1,$2,$3,$5}' | awk '{print $1,$2,$3,$4,$5,$7}' | sort -u
 > > > obtenho o seguinte resultado:
 > > > 27 08 2007 10:43:31 10.3.16.131 www.google.com.br
 > > > 27 08 2007 10:43:43 10.3.16.92 www.netveiculos.com.br
 > > > 27 08 2007 10:43:45 10.3.16.92 www.netveiculos.com.br
 > > >
 > > > Desta forma eu tenho data/Hora/Ip/Site
 > > >
 > > > eu preciso acrescentar mais uma coluna neste relatório, informando o
 > Usuario, para ficar assim:
 > > > JOAQUIM 27 08 2007 10:43:31 10.3.16.131 www.google.com.br
 > > > JOSE 27 08 2007 10:43:43 10.3.16.92 www.netveiculos.com.br
 > > > JOSE 27 08 2007 10:43:45 10.3.16.92 www.netveiculos.com.br
 > > >
 > > > o problema é que o nome do usuário está em outro log, deste jeito:
 > > > JOAQUIM entrou 27/08/2007 10:40:50 10.3.16.131
 > > > JOAQUIM saiu 27/08/2007 11:08:01 10.3.16.131
 > > >
 > > > Além de buscar o usuário em outro log, tenho que verificar o IP e data
 > de entrata/saída.
 > --
 > Tiago B Peczenyj
 > Linux User #405772
 >
 > http://peczenyj.blogspot.com/
 >  
 >
 
 [As partes desta mensagem que não continham texto foram removidas]
 
 
     
                               



       Flickr agora em português. Você clica, todo mundo vê. Saiba mais.

[As partes desta mensagem que não continham texto foram removidas]



reply via email to

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