
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 ping
comando 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 wc
para contar as linhas nos dois arquivos.
echo "$(wc -l < /tmp/nodedown.txt) / $(wc -l < /tmp/node.txt)"