Введение / Зачем это нужно
Регулярный мониторинг системных ресурсов в Linux позволяет вовремя заметить перегрузки процессора, утечки памяти, переполненные диски и сетевые пики. Это сокращает простой сервисов, помогает править конфигурации и дает фактическую базу для планирования масштабирования. В этом гайде вы научитесь собирать ключевые метрики консольными командами и утилитами, а также настроите простой сбор данных для долгосрочного анализа.
Требования / Подготовка
- Сервер или ПК с Linux (рекомендуем Ubuntu 22.04/24.04, Debian 11/12, CentOS Stream 9, RHEL 9).
- Пользователь с правами
sudoдля установки пакетов. - SSH-доступ или локальный терминал.
- Базовое понимание работы в командной строке.
Пошаговая инструкция
Шаг 1: Обзор CPU и памяти через top и vmstat
Запустите интерактивный монитор:
htop
Если htop не установлен, используйте top. В top нажмите Shift+P для сортировки по CPU и Shift+M — по памяти. Для быстрой сводки без интерактива выполните:
vmstat 2 5
Команда выводит средние значения за интервалы по 2 секунды (5 раз): столбцы us, sy, id, wa покажут загрузку процессора и время ожидания диска.
Проверьте память и swap:
free -h
Обращайте внимание на столбцы available (реально свободно для новых процессов) и использование swap.
Шаг 2: Анализ дисковой подсистемы
Установите sysstat, если еще не установлен:
sudo apt install sysstat # Debian/Ubuntu
sudo dnf install sysstat # RHEL/CentOS/Fedora
Включите сбор (если требуется) и запустите детальную статистику дисков:
sudo iostat -xz 2
Ключевые столбцы: %util (загрузка устройства), await (среднее время обслуживания) и svctm. Высокий %util и растущий await часто указывают на перегрузку дисков.
Оцените занятость файловых систем и рост каталогов:
df -h
du -sh /var/log/* 2>/dev/null | sort -h
Шаг 3: Проверка сети и соединений
Посмотрите краткую статистику интерфейсов:
sar -n DEV 2
Утилита sar из пакета sysstat покажет rxkB/s и txkB/s, ошибки и дропы. Если нужен живой трафик по соединениям, используйте:
sudo iftop -i <интерфейс>
Например:
sudo iftop -i eth0
Для TCP-статистики и числа соединений:
ss -s
Высокие retransmit, растущие очереди (txqueuelen) или стабильно высокий трафик на одном интерфейсе — сигнал проверить приложения и, возможно, оптимизировать конфигурацию сети.
Шаг 4: Настройка легковесного сбора метрик с sar
Настройте sysstat на регулярный сбор. В Debian/Ubuntu включите сбор в конфиге:
sudo sed -i 's/ENABLED="false"/ENABLED="true"/' /etc/default/sysstat
sudo systemctl enable --now sysstat
Основной конфиг — /etc/sysstat/sysstat. Интервалы и периодичность можно менять по потребностям. После включения sar будет сохранять дневные логи в /var/log/sysstat/, и вы сможете анализировать историю:
sar -u -f /var/log/sysstat/sa$(date +%d)
Шаг 5: Сборка метрик в простые скрипты (по желанию)
Для периодических проверок создайте скрипт, например /usr/local/bin/check-resources.sh:
#!/bin/bash
# Простая проверка ресурсов с записью в лог
LOG="/var/log/resources-check.log"
DATE=$(date +"%Y-%m-%d %H:%M:%S")
CPU_IDLE=$(vmstat 1 2 | tail -1 | awk '{print $15}')
CPU_USAGE=$((100 - CPU_IDLE))
MEM_AVAIL=$(free -m | awk '/Mem:/ {print $7}')
DISK_USAGE=$(df -h / | awk 'NR==2 {print $5}' | tr -d '%')
echo "$DATE CPU=${CPU_USAGE}% MEM_AVAIL=${MEM_AVAIL}M DISK=${DISK_USAGE}%" >> "$LOG"
Сделайте исполняемым и добавьте в cron для регулярного запуска:
sudo chmod +x /usr/local/bin/check-resources.sh
sudo crontab -e
Добавьте строку (например, каждые 5 минут):
*/5 * * * * /usr/local/bin/check-resources.sh
Проверка результата
Убедитесь, что метрики собираются и читаются:
top/htopотображают текущую загрузку CPU и потребление памяти без аномальных пиков.iostat -xz 2показывает%utilиawaitв пределах нормы для вашего диска (обычно <70–80% для latency-чувствительных нагрузок).sar -n DEV 2выдает стабильные значения трафика без резких дропов и ошибок.- Логи
/var/log/sysstat/и ваш кастомный лог растут и содержат ожидаемые интервалы.
Возможные проблемы
iostatвыдает высокийawaitи растущую очередь — проверьте тип диска (HDD/SSD), планировщик и наличие фоновых задач (бэкапы, индексация).- Высокий
stealв виртуализации — узел перегружен; обратитесь к хостеру или распределите нагрузку. freeпоказывает малоavailableпри высокомbuff/cache— это норма для Linux; сбрасывать кэт не требуется, если нет OOM.- В
sarилиiftopмного дропов — проверьте драйверы, прерывания и размер буферов сетевого стека (sysctl net.core.rmem_max).
⚠️ Важно: Не используйте агрессивный сброс кэшей (
echo 3 > /proc/sys/vm/drop_caches) на проде без необходимости — это может временно ухудшить производительность.
💡 Совет: Для долгосрочного мониторинга и алертов добавьте Prometheus Node Exporter или аналогичное решение, используя этот гайд как базу для понимания метрик.