sexta-feira, março 12, 2010

utilizando sockets em shell script para criar um sistema de monitoramento rústico

como membro do SETI@home , sempre que possível adiciono uma máquina sob meu controle para contribuir na busca por vida extra-terrestre. o que me interessa em si não é a descoberta de E.T's, mas sim a infraestrutura computacional criada para permitir esse tipo de colaboração. no portal do SETI há também uma área que apresenta informações sobre o estado da suas máquinas. apesar de servir muito bem ao projeto, pensei em desenvolver um sistema similar que fornecesse algumas informações simples sobre alguns servidores que tenho contato. para minha dissertação de mestrado irei fazer algo bem mais avançando, envolvendo serviços web e etc. mas no caso mais simples, pensei em utilizar shell script, algo que está disponível em todas as máquinas Linux.

o primeiro passo foi definir que informações eu queria acessar. considerei que a saída dos comandos uptime, hostname e sensors seriam bastante. o uptime joga o tempo que o servidor está ligado e sua carga média nos últimos 1, 5 e 15 minutos. mais sobre a carga você encontra aqui. o hostname faz o óbvio. já o sensors joga dados como temperatura na tela. para instalação das ferramentas necessárias, dêem uma olhada aqui (para Ubuntu).

agora como trabalhar com sockets e shell script. no site da O'Reilly tem uma ótima explicação sobre uma ferramenta genial chamada netpipes. com ela, é possível direcionar a entrada e saída de scripts para conexões TCP. basta fazer o script como se ele fosse executar localmente. não cheguei a fazer nenhum padrão de comunicação mais complexo, mas as aplicações são inúmeras.

o script final ficou assim:

#!/bin/bash
HOSTNAME=`/bin/hostname`;
UPTIME=`/usr/bin/uptime`;
SENSORS=`/usr/bin/sensors | grep Core `;

echo "***************************************************************************************************************";
echo "Printing host information state.";
echo "Hostname: $HOSTNAME";
echo "Uptime: $UPTIME";
echo "Temperature:"
echo $SENSORS;
echo "***************************************************************************************************************";
simples, não? salvei em um arquivo com o nome hostInformationState.sh . agora qual seria o comando para torná-lo um servidor em execução? mais simples ainda:

faucet 30000 --out ./hostInformationState.sh
pronto. e qual seria o comando para recuperar tais informações? o servidor está escutando na porta 30000, então um telnet bastaria. mas caso deseje algo mais limpo, o cliente do netpipes também permite:

hose SERVIDOR 30000 --netslave

com o serviço executando em várias máquinas, já é fácil construir um script que colete toda a informação de várias máquinas. e se aprofundando nos links acima, dá para construir coisa bem complexa apenas com shell script. o quanto isso é recomendável fica a cargo do leitor descobrir.



Post a Comment

Nenhum comentário: