проверьте обновление ping для большого количества машин

проверьте обновление ping для большого количества машин

У меня есть большое количество машин, доступность которых мне нужно проверять cron каждый час, поэтому у меня есть около 1000 машин, которые разделены на 4-5 серий имен, за которыми следует номер для каждого узла. Скажем, от ab1000 до ab1200, от bs3000 до bs3892, от zx7800 до zx8900 и т. д. В настоящее время я использую простой скрипт ping, так как не могу держать на этих узлах никакого программного обеспечения для мониторинга (у меня нет разрешения на это). Поэтому в своем коде я вызываю файл, в котором обновляю все имена машин одно за другим (поверьте мне, мне нужно делать это каждый день, так как имена машин встречаются очень часто), и задаюсь вопросом, могу ли я использовать regex для упоминания машин, так как это сильно облегчит мне жизнь. Скажем, например: ab1*,zx[7-8]* и т. д. Я пытался использовать то же самое во входном файле, но это не сильно помогло. Также еще одна проблема в этом, иногда одна или две машины выходят из строя навсегда, и мне не нужно считать каждый раз. Поэтому мне нужно оставить это как исключенное в моем списке оповещений.

Также дайте мне знать, если есть что-то еще, что я могу сделать, чтобы оповещение было более надежным, например, чтобы оповещение давало список, так как 3/300 sx отключены с именами машин 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

решение1

Вам нужен список имен, которые вы хотите отслеживать. Либо вы ведете этот список вручную, либо извлекаете список оттуда, где кто-то другой ведет список машин, которые должны работать.

Вы можете упростить несколько вещей. pingКоманда уже возвращает статус выхода, вы можете использовать его. Также вам не нужно перенаправление для каждого эха, одного раза за цикл достаточно. Это имеет дополнительное преимущество, так как файл инициализируется и не содержит строк с последнего запуска.

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

Если вам нужна статистика, вы можете либо посчитать их, либо использовать wcдля подсчета строк в двух файлах.

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

решение2

Альтернативы:

  • fpingпохож на ping, но специально разработан для пингования нескольких хостов.
  • Как дела— это утилита, предназначенная для мониторинга работоспособности или простоя машин.

Связанный контент