Re: Alguma forma mais rápida para ler um arq texto sequencial em bash

2011-11-01 Por tôpico hamacker
Nem tanto, o sarg era muito demorado na época e então resolvi criar meu
próprio display de logs, é bastante versátil porque se integra a outras
soluções, por exemplo, temos uma interface onde liberamos um login para
usar a internet e é válido por 1 dia, ao final desse processo, um log é
gerado desse usuário e se necessário enviado por email. Outro exemplo,
tenho cerca de 600 sites que estão liberados para uso diário e não desejo
que eles apareçam no relatório, no relatório quero apenas a exceção à estes
sites.

Tem outras coisas também, como pode ver, construímos nossas próprias rodas
e há vantagens em faze-las assim. É claro que quando houver um sistema de
gerenciamento que faça tudo que já fazemos de forma integrada provavelmente
analisarei, mas comparativamente, prefiro meu script ao BRMA que é uma
ferramenta proprietária e menos flexível.

[]'s

Em 30 de outubro de 2011 19:18, P. J.  escreveu:

> Oi,
>
> Em 21/10/11, Fabricio Cannini escreveu:
> > Em 21 de outubro de 2011 17:36, Paulino Kenji Sato 
> > escreveu:
> >
> > Oi Hamacker.
> >
> > Estava pensando aqui, não seria a hora de usar um banco de dados pra
> > guardar os logs e uma interface web pra fazer essas pesquisas ?
> >
> > Just my 0,02 $LC_CURRENCY
>
> Concordo, independente de tipo de complexidade o algoritmo tenha...
> não deixa de ser custoso... acho que um software que gerencie isso é
> mais viável, pois como o sábio sempre fala o armengue de hj é a dor de
> cabeça de amanhã...rs
>
> [   ] 's
>
> --
> |  .''`.   A fé não dá respostas. Só impede perguntas.
> | : :'  :
> | `. `'`
> |   `-   P.J. - http://wiki.dcc.ufba.br/~PeeJay
>
>
> --
> To UNSUBSCRIBE, email to debian-user-portuguese-requ...@lists.debian.org
> with a subject of "unsubscribe". Trouble? Contact
> listmas...@lists.debian.org
> Archive:
> http://lists.debian.org/cacnf0pig1ywevcajpldwjmwkaxavo+4uttkz-8ukwj50v6m...@mail.gmail.com
>
>


Re: Alguma forma mais rápida para ler um arq texto sequencial em bash

2011-10-30 Por tôpico Leonardo Carneiro
2011/10/28 hamacker 

>
> E só leva 11min porque tem um grep no meio que remove do log acessos
> considerados de livre acesso e leva 9min! senão seria tudo em 2min.
>
>
Dependendo do tipo da tua filtragem (e obviamente do tamanho do arquivo),
usar o fgrep pode dar um boost legal no desempenho =)


Re: Alguma forma mais rápida para ler um arq texto sequencial em bash

2011-10-30 Por tôpico P. J.
Oi,

Em 21/10/11, Fabricio Cannini escreveu:
> Em 21 de outubro de 2011 17:36, Paulino Kenji Sato 
> escreveu:
>
> Oi Hamacker.
>
> Estava pensando aqui, não seria a hora de usar um banco de dados pra
> guardar os logs e uma interface web pra fazer essas pesquisas ?
>
> Just my 0,02 $LC_CURRENCY

Concordo, independente de tipo de complexidade o algoritmo tenha...
não deixa de ser custoso... acho que um software que gerencie isso é
mais viável, pois como o sábio sempre fala o armengue de hj é a dor de
cabeça de amanhã...rs

[   ] 's

-- 
|  .''`.   A fé não dá respostas. Só impede perguntas.
| : :'  :
| `. `'`
|   `-   P.J. - http://wiki.dcc.ufba.br/~PeeJay


--
To UNSUBSCRIBE, email to debian-user-portuguese-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: 
http://lists.debian.org/cacnf0pig1ywevcajpldwjmwkaxavo+4uttkz-8ukwj50v6m...@mail.gmail.com



Re: Alguma forma mais rápida para ler um arq texto sequencial em bash

2011-10-28 Por tôpico hamacker
Só para concluir este assunto.

Removi do meu script a parte do while read SQUID_LINHA ; do...done que
embora fosse sequencial e com uma tacada só me proporcionava analise de
quase todo tipo de acesso e separação por usuario - era lento pra danado !
Com mais de 12h, o negócio não terminava.

Bem, o que fiz ?
parei de fazer a leitura sequencial, usei um 'awk' para pegar todos os
usuarios contidos no log e depois um grep para pegar usuario por usuario e
refiz a saída usando outra sintaxe do 'awk' formatando o resultado,
resultado ?
O tempo caiu para 11min, por isso AWK rocks !
E só leva 11min porque tem um grep no meio que remove do log acessos
considerados de livre acesso e leva 9min! senão seria tudo em 2min.

Só preciso conhecer melhor essa ferramenta porque olhando a sintaxe sem
saber o que faz parece código alienigena.

[]'s a todos.

Em 21 de outubro de 2011 16:50, hamacker  escreveu:

> Olha é muito dificil eu não usar um pipe, pegar o primeiro parametro assim
> :
>
> PARAM_DATA_UNIXTIME=${SQUID_LINHA%% *}
>
> Eu já uso a bastante tempo, mas não há como pegar o segundo parametro,
> terceiro,... dessa forma, eu tenho que fatiar o relatorio colunado do squid
> e despachar para outro arquivo aquilo que for importante.
> Quando meu script chegou a esse laço while já passou pelos greps da vida
> que eliminaram efemeridades que não me interessavam.
>
>
> SQUIDLOG="/var/log/squid3/access.log"
> FINISH=$(wc -l "$SQUIDLOG"|cut -d" " -f1)
> STARTING=0
> while read SQUID_LINHA ; do
>   STARTING=$((STARTING+1))
>   PERC=$((STARTING*100/$FINISH))
>   PARAM_DATA_UNIXTIME=`echo $SQUID_LINHA|cut -d " " -f 1`
>   PARAM_DATA_UNIXTIME=`expr "$PARAM_DATA_UNIXTIME-10800"|bc`
>   PARAM_DATA=`date +%d-%m-%Y+%H:%M -d "1970-01-01 $PARAM_DATA_UNIXTIME
> sec"`
>   if [ "$PARAM_DATA" = "$DATA_DESEJADA" ] ; then
> PARAM_DURACAO=`expr $SQUID_LINHA|cut -d " " -f 2`
> DURACAO_SEGUNDOS="$[PARAM_DURACAO/100]"
> PARAM_DURACAO=`date +%H:%M:%S -d "1970-01-01 $DURACAO_SEGUNDOS sec"`
> PARAM_CLIENTE=`expr $SQUID_LINHA|cut -d " " -f 3`
> PARAM_RESULTADO=`expr $SQUID_LINHA|cut -d " " -f 4`
> PARAM_BYTES=`expr $SQUID_LINHA|cut -d " " -f 5`
> PARAM_METODO_REQUISITADO=`expr $SQUID_LINHA|cut -d " " -f 6`
> PARAM_URL=`expr $SQUID_LINHA|cut -d " " -f 7`
> PARAM_LOGIN=`expr $SQUID_LINHA|cut -d " " -f 8`
> PARAM_HIERARQUIA_CODIGO=`expr $SQUID_LINHA|cut -d " " -f 9`
> PARAM_MIME=`expr $SQUID_LINHA|cut -d " " -f 10`
> ...
> blablabla
>   fi
> done < $SQUIDLOG
>
> Na realidade eu perco muito tempo na filtragem, o log do squid tem vários
> dias armazenados, mas se eu quiser pegar os dados do dia 20-10-2011, e os
> logs contém arquivos desde o dia 15 então tenho que avançar 5 dias
> linha-a-linha para finalmente chegar aonde eu desejo. Isso tem sido uma
> tortura para mim pq mesmo apenas o "while read SQUID_LINHA ; do ... done" já
> demora bastante até chegar o dia 20.
>
> Eu precisava dum jeito mais rápido.
> Eu tô pesando seriamente em facilitar o meu lado por mudar as configurações
> do squid só para não ter que converter o formato unixdate e realizar um grep
> mantendo apenas a data desejada. Daí a velocidade aumentaria bastante, a
> questão é que se eu alterar o formato original do squid, nunca mais vou
> poder usar algum programa analizador de logs que houverem para ele.
>
> []'s
>
> Em 21 de outubro de 2011 15:32, Paulino Kenji Sato escreveu:
>
> 2011/10/21 hamacker :
>> > Ola pessoal,
>> >
>> > Eu tenho uma rotina dentro dum batch que reformata e audita o que desejo
>> no
>> > arquivo de log do squid, porém a medida que o log do squid aumenta
>> torna-se
>> > insustentável o tempo para ler este arquivo
>>
>> > Será que há algum outro algorítimo ou função que poderia usar para
>> melhor a
>> > performance ?
>>
>> Reescreva isso em awk, perl ou python, ou outra linguagem de sua
>> preferencia, e não use system('cut -d -f');
>>
>> O problema do seu script e que faz muito fork, chamando programas
>> externos, como o cut e ou wc.
>> O cut -d " " -f 1  pode ser feito em bash, assim:
>> PARAM_DATA_UNIXTIME=${SQUID_LINHA%% *}
>>
>>
>> Paulino
>>
>>
>> --
>> To UNSUBSCRIBE, email to debian-user-portuguese-requ...@lists.debian.org
>> with a subject of "unsubscribe". Trouble? Contact
>> listmas...@lists.debian.org
>> Archive:
>> http://lists.debian.org/camm-fmjccgdw3pbunyyjsowyrgaf-_k9_ev6p_urg3qgdo_...@mail.gmail.com
>>
>>
>


Re: Alguma forma mais rápida para ler um arq texto sequencial em bash

2011-10-21 Por tôpico Fabricio Cannini
Em 21 de outubro de 2011 17:36, Paulino Kenji Sato  escreveu:

Oi Hamacker.

Estava pensando aqui, não seria a hora de usar um banco de dados pra
guardar os logs e uma interface web pra fazer essas pesquisas ?

Just my 0,02 $LC_CURRENCY


--
To UNSUBSCRIBE, email to debian-user-portuguese-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: 
http://lists.debian.org/caop_gpokqfhddmntrcaxkjqo6gcegqu__etjoacfkywxphg...@mail.gmail.com



Re: Alguma forma mais rápida para ler um arq texto sequencial em bash

2011-10-21 Por tôpico Paulino Kenji Sato
Ola,

2011/10/21 hamacker :
> Olha é muito dificil eu não usar um pipe, pegar o primeiro parametro assim :
>
> PARAM_DATA_UNIXTIME=${SQUID_LINHA%% *}
>
> Eu já uso a bastante tempo, mas não há como pegar o segundo parametro,
> terceiro,... dessa forma, eu tenho que fatiar o relatorio colunado do squid
> e despachar para outro arquivo aquilo que for importante.
> Quando meu script chegou a esse laço while já passou pelos greps da vida que
> eliminaram efemeridades que não me interessavam.

Use um array, como seria feito em perl ou similar ao usar o comando de
fatiar (split).
declare -a CAMPOS_DO_SQUID
CAMPOS_DO_SQUID=($SQUID_LINHA)
# timestamp
echo ${CAMPOS_DO_SQUID[0]}
# ip do cliente
echo ${CAMPOS_DO_SQUID[2]}

Assim em diante...

-- 
Paulino


--
To UNSUBSCRIBE, email to debian-user-portuguese-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: 
http://lists.debian.org/CAMM-fMgdQSfc-87Gin0MU+Xkisi2V7F500n5DotS=gfw6fy...@mail.gmail.com



Re: Alguma forma mais rápida para ler um arq texto sequencial em bash

2011-10-21 Por tôpico hamacker
Olha é muito dificil eu não usar um pipe, pegar o primeiro parametro assim :

PARAM_DATA_UNIXTIME=${SQUID_LINHA%% *}

Eu já uso a bastante tempo, mas não há como pegar o segundo parametro,
terceiro,... dessa forma, eu tenho que fatiar o relatorio colunado do squid
e despachar para outro arquivo aquilo que for importante.
Quando meu script chegou a esse laço while já passou pelos greps da vida que
eliminaram efemeridades que não me interessavam.

SQUIDLOG="/var/log/squid3/access.log"
FINISH=$(wc -l "$SQUIDLOG"|cut -d" " -f1)
STARTING=0
while read SQUID_LINHA ; do
  STARTING=$((STARTING+1))
  PERC=$((STARTING*100/$FINISH))
  PARAM_DATA_UNIXTIME=`echo $SQUID_LINHA|cut -d " " -f 1`
  PARAM_DATA_UNIXTIME=`expr "$PARAM_DATA_UNIXTIME-10800"|bc`
  PARAM_DATA=`date +%d-%m-%Y+%H:%M -d "1970-01-01 $PARAM_DATA_UNIXTIME sec"`
  if [ "$PARAM_DATA" = "$DATA_DESEJADA" ] ; then
PARAM_DURACAO=`expr $SQUID_LINHA|cut -d " " -f 2`
DURACAO_SEGUNDOS="$[PARAM_DURACAO/100]"
PARAM_DURACAO=`date +%H:%M:%S -d "1970-01-01 $DURACAO_SEGUNDOS sec"`
PARAM_CLIENTE=`expr $SQUID_LINHA|cut -d " " -f 3`
PARAM_RESULTADO=`expr $SQUID_LINHA|cut -d " " -f 4`
PARAM_BYTES=`expr $SQUID_LINHA|cut -d " " -f 5`
PARAM_METODO_REQUISITADO=`expr $SQUID_LINHA|cut -d " " -f 6`
PARAM_URL=`expr $SQUID_LINHA|cut -d " " -f 7`
PARAM_LOGIN=`expr $SQUID_LINHA|cut -d " " -f 8`
PARAM_HIERARQUIA_CODIGO=`expr $SQUID_LINHA|cut -d " " -f 9`
PARAM_MIME=`expr $SQUID_LINHA|cut -d " " -f 10`
...
blablabla
  fi
done < $SQUIDLOG

Na realidade eu perco muito tempo na filtragem, o log do squid tem vários
dias armazenados, mas se eu quiser pegar os dados do dia 20-10-2011, e os
logs contém arquivos desde o dia 15 então tenho que avançar 5 dias
linha-a-linha para finalmente chegar aonde eu desejo. Isso tem sido uma
tortura para mim pq mesmo apenas o "while read SQUID_LINHA ; do ... done" já
demora bastante até chegar o dia 20.

Eu precisava dum jeito mais rápido.
Eu tô pesando seriamente em facilitar o meu lado por mudar as configurações
do squid só para não ter que converter o formato unixdate e realizar um grep
mantendo apenas a data desejada. Daí a velocidade aumentaria bastante, a
questão é que se eu alterar o formato original do squid, nunca mais vou
poder usar algum programa analizador de logs que houverem para ele.

[]'s

Em 21 de outubro de 2011 15:32, Paulino Kenji Sato escreveu:

> 2011/10/21 hamacker :
> > Ola pessoal,
> >
> > Eu tenho uma rotina dentro dum batch que reformata e audita o que desejo
> no
> > arquivo de log do squid, porém a medida que o log do squid aumenta
> torna-se
> > insustentável o tempo para ler este arquivo
>
> > Será que há algum outro algorítimo ou função que poderia usar para melhor
> a
> > performance ?
>
> Reescreva isso em awk, perl ou python, ou outra linguagem de sua
> preferencia, e não use system('cut -d -f');
>
> O problema do seu script e que faz muito fork, chamando programas
> externos, como o cut e ou wc.
> O cut -d " " -f 1  pode ser feito em bash, assim:
> PARAM_DATA_UNIXTIME=${SQUID_LINHA%% *}
>
>
> Paulino
>
>
> --
> To UNSUBSCRIBE, email to debian-user-portuguese-requ...@lists.debian.org
> with a subject of "unsubscribe". Trouble? Contact
> listmas...@lists.debian.org
> Archive:
> http://lists.debian.org/camm-fmjccgdw3pbunyyjsowyrgaf-_k9_ev6p_urg3qgdo_...@mail.gmail.com
>
>


Re: Alguma forma mais rápida para ler um arq texto sequencial em bash

2011-10-21 Por tôpico Paulino Kenji Sato
2011/10/21 hamacker :
> Ola pessoal,
>
> Eu tenho uma rotina dentro dum batch que reformata e audita o que desejo no
> arquivo de log do squid, porém a medida que o log do squid aumenta torna-se
> insustentável o tempo para ler este arquivo

> Será que há algum outro algorítimo ou função que poderia usar para melhor a
> performance ?

Reescreva isso em awk, perl ou python, ou outra linguagem de sua
preferencia, e não use system('cut -d -f');

O problema do seu script e que faz muito fork, chamando programas
externos, como o cut e ou wc.
O cut -d " " -f 1  pode ser feito em bash, assim:
PARAM_DATA_UNIXTIME=${SQUID_LINHA%% *}


Paulino


--
To UNSUBSCRIBE, email to debian-user-portuguese-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: 
http://lists.debian.org/camm-fmjccgdw3pbunyyjsowyrgaf-_k9_ev6p_urg3qgdo_...@mail.gmail.com



Alguma forma mais rápida para ler um arq texto sequencial em bash

2011-10-21 Por tôpico hamacker
Ola pessoal,

Eu tenho uma rotina dentro dum batch que reformata e audita o que desejo no
arquivo de log do squid, porém a medida que o log do squid aumenta torna-se
insustentável o tempo para ler este arquivo. A rotina para ler um arquivo
texto é assim :
SQUIDLOG="/var/log/squid3/access.log"
FINISH=$(wc -l "$SQUIDLOG"|cut -d" " -f1)
STARTING=0
while read SQUID_LINHA ; do
  STARTING=$((STARTING+1))
  PERC=$((STARTING*100/$FINISH))
  PARAM_DATA_UNIXTIME=`echo $SQUID_LINHA|cut -d " " -f 1`
  blablabla
done < $SQUIDLOG

Só que essa forma de ler linha-a-linha é muito lenta, alias o bash é muito
lento.
Fiz um teste de script removendo o conteúdo entre o while read...done, e
praticamente não houve diferença de tempo, o que dá a entender que a demora
é por conta do próprio laço.

Será que há algum outro algorítimo ou função que poderia usar para melhor a
performance ?