verifique a atualização do ping para um grande número de máquinas

verifique a atualização do ping para um grande número de máquinas

Eu tenho um grande número de máquinas que preciso fazer o cron para verificar a disponibilidade a cada hora. Eu tenho quase 1.000 máquinas que estão divididas entre 4-5 séries de nomes seguidas de números para cada nó. Digamos de ab1000 a ab1200, de bs3000 a bs3892, de zx7800 a zx8900 etc. Atualmente estou usando um script de ping simples, pois não consigo manter nenhum software nesses nós para monitorar (não tenho aprovação para isso). Então, no meu código, estou chamando o arquivo onde atualizo todos os nomes das máquinas, um por um (acredite, preciso fazer isso todos os dias, pois os nomes das máquinas acontecem com muita frequência) e me pergunto se posso usar regex para mencionar as máquinas como vai facilitar muito a minha vida. Digamos, por exemplo: ab1*,zx[7-8]* etc. Tentei usar o mesmo no arquivo de entrada, mas não ajudou muito. Além disso, mais um problema é que às vezes uma ou duas máquinas ficam inativas permanentemente e não preciso contar todas as vezes. Portanto, preciso mantê-lo excluído da minha lista de alertas.

Informe também se houver mais alguma coisa que eu possa tornar o alerta mais robusto, como alerta para fornecer uma lista, pois 3/300 sx estão inativos com nomes de máquinas sz7701,7702,7703

cat /tmp/node.txt

zx7800
zx7801
zx7802
.....
....
zx8900
bs3000
bs3001

cat nodecheck.sh

for node in `cat /tmp/node.txt`
do
 count=0
 count=$(ping -c 3 $node | grep "100%packet loss"|wc -l)
 if [ $count -ne 0 ]
 then
  echo "$node" >> /tmp/nodedown.txt
 fi
done

Responder1

Você precisa de uma lista dos nomes que deseja monitorar. Você mantém essa lista manualmente ou extrai a lista de onde outra pessoa mantém a lista das máquinas que deveriam estar em execução.

Você pode simplificar algumas coisas. O pingcomando já retorna um status de saída, você pode usá-lo. Além disso, você não precisa de redirecionamento para cada eco, uma vez por loop é suficiente. Isso tem a vantagem adicional de que o arquivo é inicializado e não contém as linhas da última execução.

for node in $(cat /tmp/node.txt); do
  if ! ping -c 3 $node &> /dev/null; then
    echo "$node"
  fi
done > /tmp/nodedown.txt

Se quiser uma estatística, você pode contá-las ou usá-la wcpara contar as linhas nos dois arquivos.

echo "$(wc -l < /tmp/nodedown.txt) / $(wc -l < /tmp/node.txt)"

Responder2

Alternativas:

  • fpingé como o ping, mas projetado explicitamente para executar ping em vários hosts.
  • e aíé um utilitário projetado para monitorar máquinas em atividade ou inatividade.

informação relacionada