Monitorar status de computadores

O script a seguir permite monitorar uma lista de computadores (identificados por hostname e número de IP) através de algumas variáveis, como a conectividade, temperatura, tempo de funcionamento e uso de disco. Existem vários programas bem completos para monitoramento de máquinas, mas o objetivo desse é comprimir as principais informações de vários computadores em um arquivo com as informações obtidas no instante de consulta.

A rotina executa remotamente os comandos, e portanto precisa de acesso sem senha nos computadores. Isso pode ser feito gravando uma chave de segurança ou usando o comando “sshpass” (opção utilizada), que pode ser instalado pelo comando “sudo apt-get install sshpass”. Também deve ser instalado o programa “sensors”, para acessar as informações de temperatura, através do comando “sudo apt-get install lm-sensors”. Para saber a temperatura de uma Raspberry pi, o comando é “vcgencmd measure_temp”.

Feito em shell script, é feito um loop para todos os computadores para executar os seguintes comandos:

  • sensors ou vcgencmd measure_temp – obter temperatura (em °C) com o maior valor dentre todos os sensores (de núcleo e de gabinete); um “if” exclui as máquinas virtuais dessa análise
  • uptime – exibe o tempo de funcionamento do computador (em dias)
  • df – exibe a ocupação dos discos (no caso, em porcentagem e somente é selecionado o disco com maior ocupação)

A saída dos comandos é editada pelo comando “grep” para restringir linhas, “awk” para selecionar colunas, “sort” para ordenar os valores numericamente e “tail” para selecionar o maior valor. Os valores são salvos em uma variável e impressas (junto com o hostname) no arquivo de saída “status.txt” em formato CSV (colunas separadas por vírgula).

Em vez de gravar sobrescrevendo um único arquivo, é possível editar o script para criar um arquivo por dia e ir ir incluindo novas informações no fim do arquivo – e fazer um gráfico da evolução das variáveis analisadas. Em ambos os casos, é interessante incluir a execução desse script no crontab, para atualização de status após um intervalo de tempo. Para ficar mais completo, pode-se configurar para mandar um e-mail caso alguma variável atinja um valor crítico – veja mais no post Como enviar e-mails para vários destinatários.