verificar atualização de ping para o número em massa de máquinas

0

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

Além disso, deixe-me saber se há qualquer outra coisa que eu possa fazer o alerta mais robusto como alerta para dar lista como 3/300 sx estão para baixo 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
    
por Ratheesh P 27.08.2018 / 20:51

3 respostas

0

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

Você pode simplificar algumas coisas. O comando ping 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 que o loop é suficiente. Isso tem o benefício 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 você quiser uma estatística, pode contá-las ou usar wc para contar as linhas nos dois arquivos.

echo "$(wc -l < /tmp/nodedown.txt) / $(wc -l < /tmp/node.txt)"
    
por 27.08.2018 / 21:08
0

Alternativas:

  • O fping é como o ping, mas explicitamente projetado para executar ping em vários hosts.
  • O whatsup é um utilitário projetado para monitorar as máquinas que estão sendo ativadas ou desativadas.
por 27.08.2018 / 21:36
0

Talvez uma declaração de caso:

#!/bin/sh
glob=${1:-*}

for node in 'cat /tmp/node.txt'
do
    case $node in
        $glob)  : ;;
        *)      continue ;;
    esac
    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

Chame como:

nodecheck.sh 'bs381*'

Certifique-se de citar o regex para que o shell não o expanda.

    
por 28.08.2018 / 01:25