sexta-feira, 20 de julho de 2012

Input de dados mongodb


Boa tarde!
Eu estou estudando mongodb e precisava fazer alguns testes com input de dados, e fiz um script simples para isso e funciona muito bem graças a nosso grande amigo BASH!
Espero que ajude alguém, abs.

#Link para o script:
https://github.com/abargiela/scripts/blob/master/Input_data_mongodb.sh

O script buscará o conteúdo em JSON e fará o input no mongo, segue uma saída simples.

Para visualizar o dado, no meu caso com meu banco chamando bancoteste e a collection colecaoteste


root@debian:~# mongo
MongoDB shell version: 2.0.6
> use bancoteste
switched to db bancoteste
> db.colecaoteste.findOne({"_id" : ObjectId("5009b85efbddf412d8e33c70")})
{
"_id" : ObjectId("5009b85efbddf412d8e33c70"),
"completed_in" : 0.212,
"max_id" : NumberLong("226389767435198464"),
"max_id_str" : "226389767435198464",
"next_page" : "?page=2&max_id=226389767435198464&q=linux",
"page" : 1,
"query" : "linux",
"refresh_url" : "?since_id=226389767435198464&q=linux",
"results" : [
{
"created_at" : "Fri, 20 Jul 2012 18:55:01 +0000",
"from_user" : "BlackBerryDev",
"from_user_id" : 65727873,
"from_user_id_str" : "65727873",
"from_user_name" : "Research In Motion",
"geo" : null,
"id" : NumberLong("226389767435198464"),
"id_str" : "226389767435198464",
"iso_language_code" : "en",
"metadata" : {
"result_type" : "recent"
},
"profile_image_url" : "http://a0.twimg.com/profile_images/2198932640/BlackBerry-Twitter_normal.jpg",
"profile_image_url_https" : "https://si0.twimg.com/profile_images/2198932640/BlackBerry-Twitter_normal.jpg",
"source" : "<a href="http://www.exacttarget.com/social" rel="nofollow">SocialEngage</a>",
"text" : "@marioboikov Thanks for your question. Support for Linux continues to be evaluated. I've added your request to the demand list.  ^AS",
"to_user" : "marioboikov",
"to_user_id" : 321267837,
"to_user_id_str" : "321267837",
"to_user_name" : "Mario Boikov",
"in_reply_to_status_id" : NumberLong("226038200148320256"),
"in_reply_to_status_id_str" : "226038200148320256"
},
.
. #Conteúdo omitido para não prolongar muito.
.

{
"created_at" : "Fri, 20 Jul 2012 18:54:15 +0000",
"from_user" : "North_Group",
"from_user_id" : 206944855,
"from_user_id_str" : "206944855",
"from_user_name" : "North Group",
"geo" : null,
"id" : NumberLong("226389576263036929"),
"id_str" : "226389576263036929",
"iso_language_code" : "en",
"metadata" : {
"result_type" : "recent"
},
"profile_image_url" : "http://a0.twimg.com/profile_images/1531683421/North_normal.jpg",
"profile_image_url_https" : "https://si0.twimg.com/profile_images/1531683421/North_normal.jpg",
"source" : "<a href="http://twitterfeed.com" rel="nofollow">twitterfeed</a>",
"text" : "Oracle Offers Free Software To Win New Linux Users (ORCL): Oracle has made an interesting offer to companies usi... http://t.co/M285wyD0",
"to_user" : null,
"to_user_id" : 0,
"to_user_id_str" : "0",
"to_user_name" : null
}
],
"results_per_page" : 15,
"since_id" : 0,
"since_id_str" : "0"
}



quarta-feira, 28 de março de 2012

Script apenas lembrança.


Script apenas para minha recordação, depois que o fiz acho que não será tão bem utilizado quando eu pensei que pudesse utiliza-lo, porém para não perder, estou adicionando-o aqui.

https://github.com/abargiela/scripts/blob/master/store_informations_in_mysql.sh

terça-feira, 13 de março de 2012

IO Stress

Olá!
Tive uma nova necessidade, a de escrever/ler em um diretório que estava montado (iscsi), houve a necessidade de estressa-lo para verificarmos como seria o desempenho, segue o script:

Para escrita:
https://github.com/abargiela/scripts/blob/master/io_stress_write.sh

E para leitura:
https://github.com/abargiela/scripts/blob/master/io_stress_reading.sh

Seguiro executar os 2 scripts simultaneamentes, ou seja, abra 2 terminais e execute 1 em cada.

Pode parecer feio, porém para minha necessidade atendeu!

Os dados coletados serão similares a:

Tue Mar 13 11:23:26 BRT 2012
1000000+0 records in
1000000+0 records out
1048000000 bytes (1.0 GB) copied, 6.61428 seconds, 158 MB/s
Tue Mar 13 11:24:22 BRT 2012
1000000+0 records in
1000000+0 records out
1048000000 bytes (1.0 GB) copied, 6.56956 seconds, 160 MB/s
Tue Mar 13 11:25:14 BRT 2012

No script de escrita(io_stress_write.sh) você consegue coletar as estatísticas utilizando os parâmetros no mesmo, a saída será similar à:

Média de transmissão: 149 MB/s 
Menor taxa de transmissão: 44.9 MB/s
Maior taxa de transmissão: 167 MB/s


É isso, não sei o quanto essa dica pode ajudar, porém fica aqui para futuras consultas :)

sexta-feira, 26 de agosto de 2011

[ Varnish Troubleshoot ] Varnish Error to start

Olá,
Tive um problema para subir um varnish em produção e gostaria de compartilhar a solução:

- Ao tentar o start, ocorre o erro:

[root@varnish-machine ~]#     /etc/init.d/varnish  start
[root@varnish-machine ~]# or:                         [FAILED]


- Ao tentar startar apenas usando o daemon, ocorre:

[root@varnish-machine ~]# varnishd
storage_file: filename: ./varnish.4lLrqn size 3586 MB.
Using old SHMFILE


- Tentei então fazer um debug no init do varnish e então no final ele mostra o seguinte trecho em negrito

[root@varnish-machine ~]# sh -x     /etc/init.d/varnish  start
+ echo -n 'Starting varnish HTTP accelerator: '
Starting varnish HTTP accelerator: + ulimit -n 131072
+ ulimit -l 82000
+ '[' '-a :80  -T 127.0.0.1:6082 -f /etc/varnish/default.vcl -u varnish -g varnish -h classic,116387 -p listen_depth=16384 -p overflow_max=10000 -p sess_timeout=5 -p session_linger=50 -p thread_pools=16 -p lru_interval=900 -p cli_timeout=20 -p ping_interval=5 -w 300,4096,60 -t 60 -s file,/var/lib/varnish/varnish_storage.bin,20G' = '' ']'




- Então tentei subir manualmente o varnish, e ai que encontrei o erro e a solução:

[root@varnish-machine ~]# varnishd  -a :80  -T 127.0.0.1:6082 -f /etc/varnish/default.vcl -u varnish -g varnish -h classic,116387 -p listen_depth=16384 -p overflow_max=10000 -p sess_timeout=5 -p session_linger=50 -p thread_pools=16 -p lru_interval=900 -p cli_timeout=20 -p ping_interval=5 -w 300,4096,60 -t 60 -s file,/var/lib/varnish/varnish_storage.bin,20G
storage_file: filename: /var/lib/varnish/varnish_storage.bin size 20480 MB.
Message from VCC-compiler:
Unused backend backend1, defined:
(/etc/varnish/backends.inc Line 29 Pos 9)backend backend1 {
--------########################--
Running VCC-compiler failed, exit 1
VCL compilation failed


Havia um problema na VCL, acessei o arquivo, fui até a linha, corrigi e problema solucionado.

Espero que ajude, abs.

terça-feira, 9 de agosto de 2011

sqlplus

Falae galera!
Hoje precisei realizar a conexão em um banco oracle de um parceiro para homologar se a conexão com o mesmo encontrava-se ok. Consultei nossos amigos DBA's e os mesmos sugeriram utilizar o client sqlpus.

Quando realizei a instalação me deparei com ajustes que foram necessário realizar e graças aos skills de nosso amigo Arnaldo Pedroso, demorei apenas 2 minutos para configurar, e gostaria de compartilhar com vocês para caso haja uma necessidade futura. (:

1 - Deve-se fazer o export das bibliotecas do client, para evitar o seguinte erro: sqlplus64: error while loading shared libraries: libsqlplus.so: cannot open shared object file: No such file or directory
Essa configuração pode ser adicionada para ser exportada automaticamente via .bashrc, porém isso fica a critério e necessidade de cada um.
export LD_LIBRARY_PATH="/usr/lib/oracle/10.2.0.3/client64/lib/"
 ou
echo "/usr/lib/oracle/10.2.0.3/client64/lib/" > /etc/ld.so.conf.d/sqlplus 


2 - Você deve criar o arquivo aonde ficarão os dados para a conexão com o banco:
Por default ele busca esse arquivo na seguinte ordem:
/root/.tnsnames.ora #Podendo variar de acorodo com o usuário logado, no meu caso estava como root, por isso ele buscou primeiro no /root
/etc/tnsnames.ora
/usr/lib/oracle/10.2.0.3/client64/lib/network/admin/tnsnames.ora
Utilizei a última opção em vermelho


3 - Dentro do arquivo, adicionei a seguinte configuração:

nomeConexaoOracle =
#O nome acima será o mesmo nome utilizado para a conexão
 (DESCRIPTION =
   (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(Host = 127.0.0.1)(Port = 1542))
# Acima colocam-se o IP e a porta a qual deseja-se conectar.
   )
 (CONNECT_DATA =
   (SERVICE_NAME = SINNPROD)
 )
)


4 - Para realizar a conexão basta:

sqlplus username/password@conexão

sqlplus USERtest/PASSWORD@
nomeConexaoOracle

Se todas as informações estiverem corretas, sucesso total.


Espero que ajude em algum momento, abs.

Referências: http://www.orafaq.com/wiki/Tnsnames.ora
DBA: Arnaldo Pedroso's mind (:

segunda-feira, 25 de abril de 2011

TCPDUMP SQL style :D

Um amigo do trabalho Julio, nos passou esse cara abaixo, achei bastante útil, estou repassando :D
Nesse caso estamos monitorando o MySQL, podemos ver pela porta 3306, porém apesar de não ter testado ainda ele pegue qualquer linguagem SQL, claro adaptando para a porta do mesmo, ainda vou testar ou caso você tenha testado por favor poste :D Grato.




 tcpdump -i eth0 -s 0 -l -w - dst port 3306 | strings | perl -e '
        while(<>){
                chomp; next if /^[^ ]+[ ]*$/;
                if(/^(SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER)/i){
                        if (defined $q){
                                print "$q\n";
                        }
                $q=$_;
                }
                else{
                        $_ =~ s/^[ \t]+//; $q.=" $_";
                }
        }'

Espero que ajude assim como me auxiliou, abraço.