Скрипт Shell для мониторинга использования диска Linux (порог 80%)
Если вы когда-либо использовали систему Linux в производстве или даже просто вели личный сервер, вы знаете, что нехватка дискового пространства — одна из самых раздражающих проблем. Вдруг ваши приложения перестают работать, базы данных не могут записывать новые данные, а журнальные файлы продолжают заполняться, словно неуправляемый поезд.
Хорошая новость заключается в том, что Linux позволяет удивительно легко отслеживать использование диска и выявлять проблемы до того, как они произойдут. Всё, что вам нужно — это небольшой скрипт на shell, немного логики и, возможно, уведомление по электронной почте (или сообщение в ваш канал Slack, если хотите что-то более продвинутое).
В этой статье мы создадим простой скрипт, который проверяет использование диска и отправляет уведомление, если оно превышает 80%.
Шаг 1: Проверка использования диска в Linux
Прежде чем писать скрипт, необходимо узнать текущее использование дискового пространства на вашей системе с помощью команды df.
df -h
Флаг -h означает «для удобочитаемости человеком», поэтому вместо отображения сырых блоков данных он форматирует вывод в ГБ и МБ, что гораздо проще для понимания.
В приведённом выше примере корневой раздел / (/dev/sda1) заполнен на 45%, что совершенно нормально, но как только его заполнение начнёт превышать 80%, это будет нашим сигналом тревоги — это значит, что пространство заканчивается.
Шаг 2: Создайте скрипт для мониторинга использования диска
Теперь, когда вы знаете, как вручную проверять использование диска, давайте превратим это в что-то автоматическое с помощью shell-скрипта, которые отлично подходят для таких задач, потому что позволяют объединять команды, которые мы обычно выполняем, с небольшой логикой.
Вот очень простой скрипт для мониторинга вашего корневого раздела (/):
#!/bin/bash # Set threshold (percentage) THRESHOLD=80 # Extract the usage percentage for root filesystem USAGE=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//') # Compare usage against threshold if [ "$USAGE" -ge "$THRESHOLD" ]; then echo "Warning: Disk usage is at ${USAGE}% on $(hostname)" | mail -s "Disk Alert: $(hostname)" [email fi
Давайте разберём, что здесь происходит:
THRESHOLD=80→ Это тот предел, который нас интересует; всё, что выше, слишком рискованно.df -h /→ Это проверяет только корневую файловую систему.awk 'NR==2 {print $5}'→ Из вывода команды df это извлекает колонку «Использовано%».sed 's/%//'→ Убирает знак%, чтобы мы могли рассматривать его как число.- Блок
if→ Если использование диска превышает порог, это вызывает тревогу.
Прямо сейчас скрипт отправляет электронное письмо с помощью команды mail. Если вы ещё не настроили электронную почту на своей системе, не волнуйтесь, я покажу вам, как это сделать.
Шаг 3: Мониторинг использования диска для всех разделов
Большинство серверов не полагаются на один раздел; вместо этого они обычно делятся на несколько, таких как /, /home, /var или даже /data. Если вы следите только за корневым разделом (/), вы рискуете пропустить критические проблемы в других местах. Например, если /var заполняется логами, ваши приложения могут выйти из строя, даже если на / осталось много свободного места.
Вот слегка улучшенная версия, которая проверяет все смонтированные файловые системы:
#!/bin/bash THRESHOLD=80 # Loop through each filesystem listed by df df -h | grep '^/dev/' | while read line; do USAGE=$(echo $line | awk '{print $5}' | sed 's/%//') PART=$(echo $line | awk '{print $6}') if [ "$USAGE" -ge "$THRESHOLD" ]; then echo "Warning: Partition $PART is at ${USAGE}% on $(hostname)" | mail -s "Disk Alert: $(hostname)" [email fi done
Теперь вместо того, чтобы проверять только /, он проходит через все файловые системы под /dev/, и если какой-либо раздел превышает 80%, вы получите предупреждающее письмо.
Шаг 4: Автоматизация сценария с помощью Cron
Cron — это простой сервис планирования задач в Linux, который может выполнять команды в заданное время или через определённые интервалы. Вы можете использовать его, чтобы ваш скрипт для мониторинга диска запускался автоматически, например, каждый час.
Чтобы настроить это, откройте ваш crontab с помощью:
crontab -e
Добавьте эту строку внизу:
0 * * * * /path/to/disk_check.sh
Это означает:
0→ запуск в начале часа.* * * *→ каждый час, каждый день./path/to/disk_check.sh→ замените это на фактическое расположение вашего скрипта.
Сохраните и выйдите, а остальное сделает cron. С этого момента ваш скрипт будет тихо проверять использование диска в фоновом режиме и уведомлять вас, если возникнут проблемы.
Шаг 5: Тестирование скрипта
Прежде чем полагаться на этот скрипт, разумно его протестировать. В конце концов, вы же не хотите ждать, пока ваш диск действительно не заполнится на 80%, чтобы узнать, работает ли ваша система оповещений.
Самый простой способ проверить — временно понизить порог:
THRESHOLD=1
Таким образом, скрипт почти наверняка сразу вызовет оповещение, так как большинство разделов заполнены как минимум на 1%. После того как вы убедитесь, что электронные письма или журналы работают, верните значение обратно на 80.
Если вы не готовы настраивать электронную почту, вы можете заменить команду mail чем-то более простым, например:
echo "Warning: Partition $PART is at ${USAGE}% on $(hostname)"
Это просто выведет предупреждение в ваш терминал, что полезно для быстрой отладки.
Шаг 6: Настройка уведомлений по электронной почте
Наш скрипт использует команду mail для отправки уведомлений, но этот инструмент не всегда установлен по умолчанию. Сначала вам нужно будет его установить:
sudo apt install mailutils [On Debian] sudo yum install mailx [On RHEL]
После установки необходимо убедиться, что ваш сервер действительно может отправлять электронные письма, что может потребовать дополнительной настройки, например, конфигурации Postfix, Gmail SMTP или стороннего сервиса, такого как SendGrid.
Если вы не хотите сейчас разбираться с электронной почтой, вы все равно можете сделать скрипт полезным, записывая уведомления в файл:
echo "Disk usage alert: $PART at $USAGE%" >> /var/log/disk_alert.log
Таким образом, вы можете позже проверить журнал или использовать следующую команду для просмотра уведомлений в реальном времени.
tail -f /var/log/disk_alert.log
Шаг 7: Когда стоит использовать не только shell-скрипты
Скрипты на Shell отлично подходят для обучения и часто достаточно для одного сервера или небольшого проекта, но если вы управляете несколькими серверами или вам нужен более детальный мониторинг, скорее всего, вам захочется перейти на специализированные инструменты мониторинга.
- Nagios → Одна из старейших и наиболее надёжных систем мониторинга.
- Zabbix → Хорошо, если вам нужны панели мониторинга, графики и централизованное место для наблюдения за многими серверами.
- Prometheus + Grafana → Современная настройка, где Prometheus собирает метрики, а Grafana создаёт красивые панели для их визуализации.
Завершение
Всего несколькими строками shell-скрипта вы создали облегчённую систему мониторинга диска, которая следит за вашими разделами и предупреждает вас, прежде чем ситуация станет критической.
Установив пороговое значение, добавив немного логики и запланировав это с помощью cron, вы автоматизировали задачу, которая в противном случае требовала бы постоянной ручной проверки, что означает меньше неожиданных ситуаций, меньше простоев и больше спокойствия.
Если вы хотите продвинуться в автоматизации Linux, ознакомьтесь с нашим соответствующим руководством: «Как автоматизировать ежедневные проверки состояния Linux с помощью Bash-скрипта и Cron».


Добавить комментарий