Re: Alguma forma mais rápida para ler um arq texto sequencial em bash
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/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
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
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
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
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
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 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
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 ?