
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 ping
comando 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 wc
las líneas en los dos archivos.
echo "$(wc -l < /tmp/nodedown.txt) / $(wc -l < /tmp/node.txt)"