Создание монитора системы Linux с использованием Bash

LinuxLinuxBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом проекте вы создадите монитор системы Linux с использованием сценария на shell. Этот сценарий будет непрерывно отслеживать использование ЦПУ, памяти и диска вашей системы, отображая проценты использования в реальном времени. Если использование любого ресурса превысит заранее установленный порог, будет отображено предупреждение. Завершив этот проект, вы научитесь основам программирования на shell в Linux и создадите практический инструмент.

Монитор системы Linux

🎯 Задачи

Завершив этот проект, вы:

  • Научитесь создавать сценарий на shell для мониторинга системных ресурсов.
  • Поймете, как устанавливать и использовать пороговые значения для использования ЦПУ, памяти и диска.
  • Создадите функцию для отправки предупреждений при превышении пороговых значений.

🏆 Достижения

После завершения этого проекта вы:

  • Сможете создавать и запускать монитор системы Linux с использованием сценария на shell.
  • Поймете, как работать с командами для работы с системными ресурсами, такими как top, free и df.
  • Будете готовы расширять сценарий, добавляя новые функции, например, уведомления по электронной почте.

Настройка проекта

Начните с подготовки чистого рабочего пространства для вашего сценария. Мы рекомендуем использовать WebIDE для этого проекта, так как он подходит для написания и тестирования сценариев.

Перейдите в этот каталог и создайте файл с именем system_monitor.sh:

cd ~/project
touch system_monitor.sh
Создание сценария монитора системы

Откройте файл в вашем любимом текстовом редакторе и добавьте следующие строки:

#!/bin/bash

## Определите пороговые значения для использования ЦПУ, памяти и диска (в процентах)
CPU_THRESHOLD=80
MEMORY_THRESHOLD=80
DISK_THRESHOLD=80

Вот что делает каждая часть кода:

  • #!/bin/bash: Эта строка указывает, что сценарий будет интерпретироваться с использованием оболочки Bash.
  • CPU_THRESHOLD=80: Устанавливает порог использования ЦПУ на 80%. Вы можете изменить это значение позже.
  • MEMORY_THRESHOLD=80 и DISK_THRESHOLD=80: Аналогично, эти строки определяют пороги для использования памяти и диска.

Сохраните файл и сделайте его исполняемым:

chmod +x system_monitor.sh

Добавление функции оповещения

Теперь добавим функцию для отправки оповещений, когда использование ресурсов превышает пороговые значения. Откройте файл system_monitor.sh и добавьте следующий код:

## Функция для отправки оповещения
send_alert() {
  echo "$(tput setaf 1)ALERT: $1 usage exceeded threshold! Current value: $2%$(tput sgr0)"
}

Вот разбор этой функции:

  • send_alert: Функция принимает два аргумента:
    • $1 представляет тип ресурса (например, ЦПУ, Память, Диск).
    • $2 представляет текущий процент использования.
  • tput setaf 1: Изменяет цвет текста на красный, чтобы оповещения были хорошо видны.
  • tput sgr0: Возвращает форматирование текста к нормальному после сообщения об оповещении.

Добавьте тестовый вызов функции, чтобы убедиться, что она работает:

send_alert "CPU" 85
Сниппет кода функции оповещения

Запустите сценарий:

./system_monitor.sh

Вы должны увидеть красное сообщение об оповещении, похожее на следующее:

ALERT: CPU usage exceeded threshold! Current value: 85%

Перед переходом к следующему шагу удалите тестовый вызов send_alert из сценария.

Мониторинг использования ЦПУ

Давайте добавим логику для мониторинга использования ЦПУ. Откройте сценарий и добавьте следующий код:

## Мониторинг использования ЦПУ
cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')
cpu_usage=${cpu_usage%.*} ## Преобразование в целое число
echo "Current CPU usage: $cpu_usage%"

if ((cpu_usage >= CPU_THRESHOLD)); then
  send_alert "CPU" "$cpu_usage"
fi

Вот что происходит в этом коде:

  1. top -bn1: Запускает команду top в пакетном режиме для одной итерации, чтобы получить статистику использования ЦПУ в реальном времени.
  2. grep "Cpu(s)": Фильтрует вывод, чтобы сосредоточиться на строке с использованием ЦПУ.
  3. awk '{print $2 + $4}': Извлекает и суммирует проценты использования ЦПУ пользователем и системой.
  4. cpu_usage=${cpu_usage%.*}: Удаляет десятичную часть, чтобы упростить сравнение с пороговым значением.
  5. if ((cpu_usage >= CPU_THRESHOLD)): Сравнивает использование ЦПУ с пороговым значением и вызывает функцию send_alert, если порог превышен.

Запустите сценарий, чтобы протестировать мониторинг использования ЦПУ:

./system_monitor.sh

Вы должны увидеть отображенное использование ЦПУ. Если оно выше порогового значения, вы увидите оповещение.

Мониторинг использования памяти

Далее, добавьте код для мониторинга использования памяти. Вставьте следующие строки ниже логики мониторинга ЦПУ:

## Мониторинг использования памяти
memory_usage=$(free | awk '/Mem/ {printf("%3.1f", ($3/$2) * 100)}')
echo "Current memory usage: $memory_usage%"
memory_usage=${memory_usage%.*}
if ((memory_usage >= MEMORY_THRESHOLD)); then
  send_alert "Memory" "$memory_usage"
fi

Вот как это работает:

  1. free: Предоставляет статистику использования памяти.
  2. awk '/Mem/ {printf("%3.1f", ($3/$2) * 100)}': Вычисляет процент используемой памяти, разделив используемую память ($3) на общую память ($2).
  3. Сценарий сравнивает memory_usage с пороговым значением и отправляет оповещение, если это необходимо.

Запустите сценарий:

./system_monitor.sh

Вы должны увидеть процент использования памяти, и будут вызваны оповещения, если использование превышает пороговое значение.

Мониторинг использования диска

Теперь давайте настроим мониторинг использования диска. Добавьте следующий код ниже логики мониторинга памяти:

## Мониторинг использования диска
disk_usage=$(df -h / | awk '/\// {print $(NF-1)}')
disk_usage=${disk_usage%?} ## Удалить знак %
echo "Current disk usage: $disk_usage%"

if ((disk_usage >= DISK_THRESHOLD)); then
  send_alert "Disk" "$disk_usage"
fi

Пояснения:

  1. df -h /: Получает статистику использования диска для корневого каталога.
  2. awk '/\// {print $(NF-1)}': Извлекает столбец с процентом использования.
  3. disk_usage=${disk_usage%?}: Удаляет символ % для упрощения сравнения.
  4. Генерируются оповещения, если использование диска превышает пороговое значение.

Запустите скрипт:

./system_monitor.sh

Вы должны увидеть статистику использования диска, и при необходимости будут сгенерированы оповещения.

Объединение всего в цикл

Наконец, объединим мониторинг ЦПУ, памяти и диска в цикл для непрерывного мониторинга. Замените существующее содержимое на следующее:

while true; do
  ## Мониторинг ЦПУ
  cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')
  cpu_usage=${cpu_usage%.*}
  if ((cpu_usage >= CPU_THRESHOLD)); then
    send_alert "CPU" "$cpu_usage"
  fi

  ## Мониторинг памяти
  memory_usage=$(free | awk '/Mem/ {printf("%3.1f", ($3/$2) * 100)}')
  memory_usage=${memory_usage%.*}
  if ((memory_usage >= MEMORY_THRESHOLD)); then
    send_alert "Memory" "$memory_usage"
  fi

  ## Мониторинг диска
  disk_usage=$(df -h / | awk '/\// {print $(NF-1)}')
  disk_usage=${disk_usage%?}
  if ((disk_usage >= DISK_THRESHOLD)); then
    send_alert "Disk" "$disk_usage"
  fi

  ## Отображение текущей статистики
  clear
  echo "Resource Usage:"
  echo "CPU: $cpu_usage%"
  echo "Memory: $memory_usage%"
  echo "Disk: $disk_usage%"
  sleep 2
done

Этот цикл непрерывно мониторит и обновляет использование ресурсов, очищая экран и отображая текущую статистику с регулярными интервалами.

Запустите скрипт для тестирования:

./system_monitor.sh

Итог

Поздравляем! Вы создали полностью функциональный монитор системы Linux с использованием Bash. Этот инструмент отслеживает использование ЦПУ, памяти и диска в реальном времени и оповещает вас, если использование превышает предварительно определенные пороговые значения. Не стесняйтесь расширять скрипт, добавляя такие функции, как уведомления по электронной почте или мониторинг дополнительных ресурсов.

Монитор системы Linux