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

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

 # Если от 2% и выше
 if grep -e 'average: [^1]\.' '/path/top/load.txt'; then
  # Записываем в отдельный файл "время_more1.txt"
  top -b -n 1 > "/path/top/`date +%Y-%m-%d`/`date +%T`_more1.txt"
  chmod 777     "/path/top/`date +%Y-%m-%d`/`date +%T`_more1.txt"
 fi

fi

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

08.07.2019