verifique la actualización de ping para una gran cantidad de máquinas

verifique la actualización de ping para una gran cantidad de máquinas

Obtuve una gran cantidad de máquinas que necesito cronificar para verificar la disponibilidad cada hora. Obtuve casi 1000 máquinas que se dividen entre 4 y 5 series de nombres seguidas de un número para cada nodo. Digamos de ab1000 a ab1200, de bs3000 a bs3892, de zx7800 a zx8900, etc. Actualmente estoy usando un script de ping simple ya que no puedo mantener ningún software en estos nodos para monitorear (no tengo aprobación para eso). Entonces, en mi código, llamo al archivo donde actualizo todos los nombres de las máquinas uno por uno (créanme, necesito hacer esto todos los días ya que los nombres de las máquinas ocurren con mucha frecuencia) y me pregunto si puedo usar expresiones regulares para mencionar las máquinas. Me facilitará mucho la vida. Digamos, por ejemplo: ab1*,zx[7-8]* etc. Intenté usar lo mismo en el archivo de entrada pero no ayudó mucho. Además, un problema más es que, a veces, una o dos máquinas están inactivas permanentemente y no necesito contarlas cada vez. Entonces necesito mantenerlo excluido en mi lista de alertas.

También avíseme si hay algo más que pueda hacer que la alerta sea más sólida, como una alerta para proporcionar una lista, ya que 3/300 sx están inactivos con los nombres de las 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

Respuesta1

Necesita una lista de los nombres que desea monitorear. O mantiene esta lista manualmente o extrae la lista de donde alguien más mantiene la lista de las máquinas que se supone que deben estar ejecutándose.

Puedes simplificar algunas cosas. El pingcomando ya devuelve un estado de salida, puedes usarlo. Además, no necesita redirección para cada eco, una vez por bucle es suficiente. Esto tiene el beneficio adicional de que el archivo se inicializa y no contiene las líneas de la última ejecución.

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

Si desea una estadística, puede contarlas o contar wclas líneas en los dos archivos.

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

Respuesta2

Alternativas:

  • fpinges como ping, pero diseñado explícitamente para hacer ping a múltiples hosts.
  • qué pasaes una utilidad diseñada para monitorear las máquinas que están encendidas o apagadas.

información relacionada