Как мониторить свободное место на диске VDS скриптом просто

calendar_month 16 ноября 2025 schedule 10 мин. чтения visibility 240 просмотров
person
Valebyte Team
Как мониторить свободное место на диске VDS скриптом просто

Как мониторить свободное место на диске VDS скриптом?

Поддержание достаточного свободного места на диске вашего VDS – критически важная задача для обеспечения стабильной работы сервисов и предотвращения сбоев. В этой статье мы рассмотрим, как создать и настроить скрипты для мониторинга свободного места на диске вашего VDS, чтобы вы могли оперативно реагировать на возникающие проблемы. Мы охватим различные подходы, от простых bash-скриптов до более сложных решений с использованием Python и отправкой уведомлений.

Содержание:

Мониторинг с помощью Bash и команды df

A server rack with green lights and a 'df' command icon, representing VDS disk space monitoring.

Самый простой и быстрый способ мониторинга свободного места на диске – использование команды 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Процент использования диска.

Настройка отправки уведомлений по электронной почте

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

Пример 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 для визуализации этих данных.

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

Максимальная производительность и контроль для ваших проектов?

Для критически важных проектов, требующих полной свободы и мощности, выделенные серверы — идеальный выбор. Получите полный контроль.

Найти свой сервер →

Share this post:

support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.