Як моніторити вільне місце на диску VDS скриптом?
Підтримання достатнього вільного місця на диску вашого VDS – критично важлива задача для забезпечення стабільної роботи сервісів і запобігання збоям. У цій статті ми розглянемо, як створити та налаштувати скрипти для моніторингу вільного місця на диску вашого VDS, щоб ви могли оперативно реагувати на проблеми, що виникають. Ми охопимо різні підходи, від простих bash-скриптів до більш складних рішень з використанням Python і відправкою повідомлень.
Зміст:
Моніторинг за допомогою Bash і команди df
Найпростіший і найшвидший спосіб моніторингу вільного місця на диску – використання команди df в bash-скрипті. df (disk free) виводить інформацію про використання дискового простору файлових систем. Ми можемо використовувати її в поєднанні з іншими командами, щоб отримати конкретні дані та налаштувати оповіщення.
Приклад 1: Простий скрипт для перевірки вільного місця
#!/bin/bash
# Розділ диска для моніторингу
DISK="/"
# Порогове значення вільного місця у відсотках (наприклад, 10%)
THRESHOLD=10
# Отримуємо відсоток використання диска
USAGE=$(df -h "$DISK" | awk 'NR==2{print $5}' | tr -d '%')
# Перевіряємо, чи перевищено поріг
if [ "$USAGE" -gt $(expr 100 - $THRESHOLD) ]; then
echo "Увага! На диску $DISK залишилося менше $THRESHOLD% вільного місця."
fi
Цей скрипт виконує такі дії:
- Визначає розділ диска для моніторингу (
DISK="/"). - Встановлює порогове значення вільного місця у відсотках (
THRESHOLD=10). - Використовує
df -h "$DISK" для отримання інформації про використання диска в зручному для читання форматі. - За допомогою
awk 'NR==2{print $5}' витягує відсоток використання диска з другого рядка виводу df (де знаходиться інформація про розділ). tr -d '%' видаляє символ відсотка з отриманого рядка.- Порівнює відсоток використання з пороговим значенням. Якщо відсоток використання перевищує
100 - $THRESHOLD, виводить попередження.
Приклад 2: Більш детальний скрипт з виведенням інформації про вільне місце в гігабайтах
#!/bin/bash
# Розділ диска для моніторингу
DISK="/"
# Порогове значення вільного місця в гігабайтах
THRESHOLD=5
# Отримуємо вільне місце в гігабайтах
FREE_GB=$(df -h "$DISK" | awk 'NR==2{print $4}')
# Забираємо букву 'G' зі значення
FREE_GB_NUM=$(echo "$FREE_GB" | sed 's/G//')
# Перевіряємо, чи менше вільне місце порогового значення
if (( $(echo "$FREE_GB_NUM > $THRESHOLD" | bc -l) )); then
echo "Увага! На диску $DISK залишилося менше $THRESHOLD ГБ вільного місця. Зараз вільно: $FREE_GB"
fi
Цей скрипт робить те ж саме, але використовує гігабайти замість відсотків, що може бути більш наочним:
- Отримує вільне місце в гігабайтах за допомогою
df -h "$DISK" | awk 'NR==2{print $4}'. - Видаляє букву 'G' з отриманого значення за допомогою
sed 's/G//'. - Використовує
bc -l для порівняння чисел з плаваючою точкою, так як df -h може виводити значення з десятковою точкою. - Виводить попередження, якщо вільне місце менше порогового значення.
Приклад 3: Моніторинг декількох розділів диска
#!/bin/bash
# Розділи диска для моніторингу
DISKS=("/")
# Порогове значення вільного місця у відсотках
THRESHOLD=10
# Перебираємо розділи диска
for DISK in ${DISKS[@]}; do
# Отримуємо відсоток використання диска
USAGE=$(df -h "$DISK" | awk 'NR==2{print $5}' | tr -d '%')
# Перевіряємо, чи перевищенно поріг
if [ "$USAGE" -gt $(expr 100 - $THRESHOLD) ]; then
echo "Увага! На диску $DISK залишилося менше $THRESHOLD% вільного місця."
fi
done
У цьому прикладі скрипт перебирає декілька розділів диска, вказаних в масиві DISKS, і виконує перевірку для кожного з них.
Щоб автоматизувати виконання скрипта, додайте його в cron. Наприклад, для запуску скрипта кожні 5 хвилин, додайте наступний рядок в crontab:
*/5 * * * * /path/to/your/script.sh
Замініть /path/to/your/script.sh на фактичний шлях до вашого скрипта.
Порада експерта: Не забувайте додавати логування до ваших скриптів моніторингу. Це допоможе вам відстежувати історію змін і виявляти довгострокові тенденції у використанні дискового простору.
Іван Петров, Системний адміністратор
Моніторинг за допомогою Python і бібліотеки psutil
Python надає більш гнучкий і потужний підхід до моніторингу дискового простору, особливо з використанням бібліотеки psutil (process and system utilities). psutil дозволяє отримувати інформацію про систему, включаючи використання диска, в зручному для обробки форматі.
Приклад 1: Простий скрипт Python для перевірки вільного місця
import psutil
# Розділ диска для моніторингу
DISK="/"
# Порогове значення вільного місця у відсотках
THRESHOLD = 10
# Отримуємо інформацію про використання диска
disk_usage = psutil.disk_usage(DISK)
# Отримуємо відсоток використання диска
usage_percent = disk_usage.percent
# Перевіряємо, чи перевищено поріг
if usage_percent > (100 - THRESHOLD):
print(f"Увага! На диску {DISK} залишилося менше {THRESHOLD}% вільного місця. Іспользовано: {usage_percent}%")
Цей скрипт виконує такі дії:
- Імпортує бібліотеку
psutil. - Визначає розділ диска для моніторингу (
DISK="/"). - Встановлює порогове значення вільного місця у відсотках (
THRESHOLD = 10). - Використовує
psutil.disk_usage(DISK) для отримання інформації про використання диска. - Витягує відсоток використання диска з об'єкта
disk_usage. - Порівнює відсоток використання з пороговим значенням і виводить попередження, якщо поріг перевищено.
Приклад 2: Скрипт Python з виведенням інформації про вільне місце в гігабайтах
import psutil
# Розділ диска для моніторингу
DISK="/"
# Порогове значення вільного місця в гігабайтах
THRESHOLD = 5
# Отримуємо інформацію про використання диска
disk_usage = psutil.disk_usage(DISK)
# Отримуємо вільне місце в гігабайтах
free_gb = disk_usage.free / (2**30) # Convert bytes to GB
# Перевіряємо, чи менше вільне місце порогового значення
if free_gb < THRESHOLD:
print(f"Увага! На диску {DISK} залишилося менше {THRESHOLD} ГБ вільного місця. Свободно: {free_gb:.2f} ГБ")
Цей скрипт показує, як отримати та вивести вільне місце в гігабайтах. Зверніть увагу на перетворення байтів у гігабайти (free_gb = disk_usage.free / (2**30)) та форматування виводу для відображення двох знаків після коми ({free_gb:.2f}).
Приклад 3: Моніторинг декількох розділів диска за допомогою Python
import psutil
# Розділи диска для моніторингу
DISKS = ["/", "/home"]
# Порогове значення вільного місця у відсотках
THRESHOLD = 10
# Перебираємо розділи диска
for DISK in DISKS:
try:
# Отримуємо інформацію про використання диска
disk_usage = psutil.disk_usage(DISK)
# Отримуємо відсоток використання диска
usage_percent = disk_usage.percent
# Перевіряємо, чи перевищено поріг
if usage_percent > (100 - THRESHOLD):
print(f"Увага! На диску {DISK} залишилось менше {THRESHOLD}% вільного місця. Використано: {usage_percent}%")
except FileNotFoundError:
print(f"Розділ диска {DISK} не знайдено.")
У цьому прикладі скрипт перебирає список розділів диска і виконує перевірку для кожного з них. Зверніть увагу на блок try...except, який обробляє випадок, коли розділ диска не знайдено.
Для запуску Python-скрипта також можна використовувати cron. Наприклад, для запуску скрипта кожні 5 хвилин, додайте наступний рядок в crontab:
*/5 * * * * /usr/bin/python3 /path/to/your/script.py
Замініть /usr/bin/python3 на шлях до вашого інтерпретатора Python, а /path/to/your/script.py на фактичний шлях до вашого скрипту.
Потрібен надійний VDS з достатнім місцем на диску?
Перестаньте турбуватися про брак місця. Виберіть VDS-хостинг, який росте разом з вами, забезпечуючи стабільну роботу. — from €4.49/mo.
Вибрати VDS-хостинг →
| Функція | Опис |
|---|
psutil.disk_usage(path) | Повертає об'єкт з інформацією про використання диска для вказаного шляху. |
disk_usage.total | Загальний розмір розділу диска в байтах. |
disk_usage.used | Використаний простір на диску в байтах. |
disk_usage.free | Вільний простір на диску в байтах. |
disk_usage.percent | Відсоток використання диска. |
rocket_launch
Quick pick
Looking for a server that just works?
Valebyte VPS — NVMe, 24/7 support, deploy in 60 seconds.
View VPS plans
arrow_forward
Налаштування відправки сповіщень електронною поштою
Щоб оперативно реагувати на проблеми з дисковим простором, необхідно налаштувати відправку сповіщень електронною поштою. Ми можемо додати цю функціональність до наших скриптів, використовуючи різні інструменти та бібліотеки.
Приклад 1: Відправка сповіщень електронною поштою за допомогою команди mail (bash)
#!/bin/bash
# Розділ диска для моніторингу
DISK="/"
# Порогове значення вільного місця у відсотках
THRESHOLD=10
# Отримуємо відсоток використання диска
USAGE=$(df -h "$DISK" | awk 'NR==2{print $5}' | tr -d '%')
# Перевіряємо, чи перевищено поріг
if [ "$USAGE" -gt $(expr 100 - $THRESHOLD) ]; then
SUBJECT="Увага! Мало місця на диску $DISK"
BODY="На диску $DISK залишилось менше $THRESHOLD% вільного місця. Використано: $USAGE%"
echo "$BODY" | mail -s "$SUBJECT" [email protected]
fi
Цей скрипт відправляє електронний лист за допомогою команди mail, якщо поріг використання диска перевищено. Замініть [email protected] на вашу адресу електронної пошти.
Примітка: Для використання команди mail на вашому VDS може знадобитися встановлення та налаштування поштового сервера (наприклад, Postfix). Якщо поштовий сервер не налаштовано, відправка листів може не працювати.
Приклад 2: Відправка сповіщень електронною поштою за допомогою бібліотеки smtplib (Python)
import psutil
import smtplib
from email.mime.text import MIMEText
# Розділ диска для моніторингу
DISK="/"
# Порогове значення вільного місця у відсотках
THRESHOLD = 10
# Ваша адреса електронної пошти та пароль
SENDER_EMAIL = "[email protected]"
SENDER_PASSWORD = "your_password"
# Адреса електронної пошти отримувача
RECEIVER_EMAIL = "[email protected]"
# Отримуємо інформацію про використання диска
disk_usage = psutil.disk_usage(DISK)
# Отримуємо відсоток використання диска
usage_percent = disk_usage.percent
# Перевіряємо, чи перевищено поріг
if usage_percent > (100 - THRESHOLD):
SUBJECT = f"Увага! Мало місця на диску {DISK}"
BODY = f"На диску {DISK} залишилось менше {THRESHOLD}% вільного місця. Використано: {usage_percent}%"
# Створюємо MIME-об'єкт
msg = MIMEText(BODY)
msg['Subject'] = SUBJECT
msg['From'] = SENDER_EMAIL
msg['To'] = RECEIVER_EMAIL
# Відправляємо лист
try:
with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp:
smtp.login(SENDER_EMAIL, SENDER_PASSWORD)
smtp.send_message(msg)
print("Лист успішно відправлено!")
except Exception as e:
print(f"Помилка при відправленні листа: {e}")
Цей скрипт відправляє електронний лист за допомогою бібліотеки smtplib. Замініть [email protected], your_password та [email protected] на ваші облікові дані та адресу отримувача. У цьому прикладі використовується SMTP-сервер Gmail. Вам може знадобитися увімкнути "доступ для ненадійних додатків" у налаштуваннях вашого облікового запису Google.
Важливо: Зберігання паролів у скриптах небезпечно. Розгляньте використання змінних оточення або інших більш безпечних способів зберігання облікових даних.
Приклад 3: Відправка сповіщень через Telegram Bot (Python)
import psutil
import telegram
# Розділ диска для моніторингу
DISK="/"
# Порогове значення вільного місця у відсотках
THRESHOLD = 10
# Токен вашого Telegram бота
TELEGRAM_TOKEN = "YOUR_TELEGRAM_BOT_TOKEN"
# ID вашого Telegram чату
TELEGRAM_CHAT_ID = "YOUR_TELEGRAM_CHAT_ID"
# Отримуємо інформацію про використання диска
disk_usage = psutil.disk_usage(DISK)
# Отримуємо відсоток використання диска
usage_percent = disk_usage.percent
# Перевіряємо, чи перевищено поріг
if usage_percent > (100 - THRESHOLD):
MESSAGE = f"Увага! На диску {DISK} залишилось менше {THRESHOLD}% вільного місця. Використано: {usage_percent}%"
# Відправляємо повідомлення через Telegram bot
try:
bot = telegram.Bot(token=TELEGRAM_TOKEN)
bot.send_message(chat_id=TELEGRAM_CHAT_ID, text=MESSAGE)
print("Повідомлення успішно відправлено в Telegram!")
except Exception as e:
print(f"Помилка при відправленні повідомлення в Telegram: {e}")
Цей скрипт надсилає сповіщення через Telegram bot. Вам потрібно створити Telegram bot та отримати його токен, а також дізнатися ID вашого чату. Замініть YOUR_TELEGRAM_BOT_TOKEN та YOUR_TELEGRAM_CHAT_ID на ваші значення.
Розширені можливості моніторингу та логування
Для більш ефективного моніторингу дискового простору рекомендується використовувати розширені можливості, такі як логування, аналіз історичних даних та інтеграцію з системами моніторингу.
Приклад 1: Логування використання дискового простору (Python)
import psutil
import datetime
import logging
# Настройка логирования
logging.basicConfig(filename="/var/log/disk_space.log", level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s')
# Раздел диска для мониторинга
DISK="/"
# Получаем информацию об использовании диска
disk_usage = psutil.disk_usage(DISK)
# Получаем процент использования диска
usage_percent = disk_usage.percent
# Логируем информацию
logging.info(f"Использование диска {DISK}: {usage_percent}%")
# Проверяем, превышен ли порог (опционально, можно логировать только при превышении порога)
THRESHOLD = 90
if usage_percent > THRESHOLD:
logging.warning(f"Внимание! На диске {DISK} использовано более {THRESHOLD}% места: {usage_percent}%")
Цей скрипт додає логування використання дискового простору у файл /var/log/disk_space.log. Він записує інформацію про використання диска при кожному запуску. Також, якщо використання диска перевищує заданий поріг (в даному випадку 90%), записується попередження.
Приклад 2: Відправка даних в систему моніторингу (наприклад, Zabbix) (Python)
import psutil
import subprocess
# Раздел диска для мониторинга
DISK="/"
# Получаем информацию об использовании диска
disk_usage = psutil.disk_usage(DISK)
# Получаем процент использования диска
usage_percent = disk_usage.percent
# Отправляем данные в Zabbix с помощью zabbix_sender
zabbix_server = "your_zabbix_server"
zabbix_host = "your_zabbix_host"
zabbix_key = "disk.usage.percent"
command = f"zabbix_sender -z {zabbix_server} -s {zabbix_host} -k {zabbix_key} -o {usage_percent}"
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = process.communicate()
if process.returncode == 0:
print(f"Данные успешно отправлены в Zabbix: {stdout.decode()}")
else:
print(f"Ошибка при отправке данных в Zabbix: {stderr.decode()}")
Цей скрипт відправляє відсоток використання диска в систему моніторингу Zabbix за допомогою утиліти zabbix_sender. Замініть your_zabbix_server, your_zabbix_host та disk.usage.percent на відповідні значення для вашої системи Zabbix. Необхідно, щоб zabbix_sender був встановлений та налаштований на вашому VDS.
Приклад 3: Аналіз історичних даних за допомогою Grafana та InfluxDB
Для аналізу історичних даних про використання дискового простору можна використовувати комбінацію InfluxDB (для зберігання даних) та Grafana (для візуалізації). Спочатку необхідно налаштувати InfluxDB та Grafana. Потім можна змінити скрипт моніторингу, щоб записувати дані в InfluxDB. Приклад (Python):
import psutil
from influxdb import InfluxDBClient
# Раздел диска для мониторинга
DISK="/"
# Параметры InfluxDB
INFLUXDB_HOST = "your_influxdb_host"
INFLUXDB_PORT = 8086
INFLUXDB_DATABASE = "disk_monitoring"
# Получаем информацию об использовании диска
disk_usage = psutil.disk_usage(DISK)
# Получаем процент использования диска
usage_percent = disk_usage.percent
# Создаем клиент InfluxDB
client = InfluxDBClient(host=INFLUXDB_HOST, port=INFLUXDB_PORT, database=INFLUXDB_DATABASE)
# Формируем данные для записи
data = [
{
"measurement": "disk_usage",
"tags": {
"disk": DISK
},
"fields": {
"usage_percent": usage_percent
}
}
]
# Записываем данные в InfluxDB
try:
client.write_points(data)
print("Данные успешно записаны в InfluxDB")
except Exception as e:
print(f"Ошибка при записи данных в InfluxDB: {e}")
Цей скрипт записує відсоток використання диска в базу даних InfluxDB. Замініть your_influxdb_host та disk_monitoring на відповідні значення для вашої системи InfluxDB. Після цього ви можете створити дашборд в Grafana для візуалізації цих даних.
Ці приклади показують, як можна розширити базовий моніторинг дискового простору, щоб отримати більш повну картину та автоматизувати реагування на проблеми.
Максимальна продуктивність та контроль для ваших проєктів?
Для критично важливих проєктів, що вимагають повної свободи та потужності, виділені сервери — ідеальний вибір. Отримайте повний контроль.
Знайти свій сервер →