Заметки / Скрипт мониторинга нагрузки

Shell, Unix
 Небольшой лёгкий shell-скрипт мониторинга нагрузки на сервере. Можно поставить на ежеминутное выполнение в cron'е.

load.sh:
# Сбрасываем нагрузку в "load.txt"
uptime > /path/top/load.txt

# Если от 1% и выше
if grep -e 'average: [^0]\.' '/path/top/load.txt'; then

 # Если нет директории с датой перегрузки, создаём её
 if [ ! -d "/path/top/`date +%Y-%m-%d`" ]; then
  mkdir "/path/top/`date +%Y-%m-%d`"
  # Права 777 позволят удалять файлы любому пользователю сервера
  chmod 777 "/path/top/`date +%Y-%m-%d`"
 fi

 # Если нагрузка 1%
 if grep -e 'average: [1]\.' '/path/top/load.txt'; then
  # Сохранение вывода top в файл "время.txt"
  top -b -n 1 > "/path/top/`date +%Y-%m-%d`/`date +%T`.txt"
  chmod 777     "/path/top/`date +%Y-%m-%d`/`date +%T`.txt"
 fi

 # Если от 3% и выше
 if grep -e 'average: [^1]\.' '/path/top/load.txt'; then
  if grep -e 'average: [^2]\.' '/path/top/load.txt'; then

   # Записываем в отдельный файл "время_more2.txt"
   top -b -n 1 > "/path/top/`date +%Y-%m-%d`/`date +%T`_more2.txt"
   chmod 777     "/path/top/`date +%Y-%m-%d`/`date +%T`_more2.txt"

  fi
 fi

fi

Нужно создать директорию "top" в пути "path" (например, "/var/www/" и так далее) - в ней будут создаваться поддиректории с файлами нагрузки по дням. Выполнение скрипта желательно проверить в консоли. Если не будет выполнятся, то нужно установить на "load.sh" подходящие права (например, "744"). Ещё может потребоваться установить переносы строк в Unix-формате ("\n" вместо "\r\n", если скрипт загружается с компьютера под Windows). Для этого достаточно закачать файл через обычный FTP-менеджер, в режиме передачи текстовых файлов.

08.07.2019