Как настроить самодиагностику серверов без сторонних сервисов и не пропускать сбои
СОДЕРЖАНИЕ
Почему самодиагностика серверов выгоднее готовых сервисов
Что обязательно контролировать в сервере
Как настроить базовую проверку состояния сервера
Как понять, что система реально работает
Логирование серверов без перегрузки системы
Какие ошибки в логировании убивают сервер
Как настроить мониторинг серверов глубже (без сложных систем)
Почему самодиагностика серверов выгоднее готовых сервисов
Когда ты используешь внешний мониторинг, ты платишь не за “наблюдение”, а за удобство. На практике 70% задач решаются обычными системными утилитами. Например, на проекте с 12 VPS удалось сократить расходы с $120/мес до $0, просто настроив проверку состояния сервера через cron и bash-скрипты.
Главная проблема SaaS — задержка реакции. Пока алерт дойдет, сервер уже “лежит” 5–10 минут. В локальной системе ты получаешь реакцию за 10–30 секунд. Вопрос: тебе важнее красивые графики или чтобы сайт не падал ночью?
Что обязательно контролировать в сервере
Если ты не знаешь, что мониторить — система будет бесполезной. Минимальный набор:
- CPU (нагрузка выше 80% более 5 минут — тревога)
- RAM (свободно меньше 10% — тревога)
- Диск (занято >85% — тревога)
- Load Average (если выше количества ядер — проблема)
- Доступность сервиса (HTTP 500 или timeout)
На практике: если не отслеживать диск, логирование серверов может “съесть” все место за сутки. Это реальный кейс — лог nginx вырос до 18 ГБ за 1 день из-за цикла ошибок.
Как настроить базовую проверку состояния сервера
Начни с простого: bash + cron. Это дает 80% пользы за 20 минут.
Создай файл:
nano /opt/server_check.sh
Добавь:
#!/bin/bash
CPU=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')
RAM=$(free | grep Mem | awk '{print $3/$2 * 100.0}')
DISK=$(df / | tail -1 | awk '{print $5}' | sed 's/%//')
if (( $(echo "$CPU > 80" | bc -l) )); then
echo "CPU load high: $CPU%" >> /var/log/server_alert.log
fi
if (( $(echo "$RAM > 90" | bc -l) )); then
echo "RAM usage high: $RAM%" >> /var/log/server_alert.log
fi
if [ "$DISK" -gt 85 ]; then
echo "Disk usage high: $DISK%" >> /var/log/server_alert.log
fi
Дай права:
chmod +x /opt/server_check.sh
Добавь в cron:
crontab -e
*/5 * * * * /opt/server_check.sh
Теперь проверка состояния сервера выполняется каждые 5 минут.
Как понять, что система реально работает
Ошибка новичков — “скрипт есть, но никто не смотрит лог”.
Решение: добавь авто-уведомление.
Простой вариант — отправка в Telegram через curl.
Пример:
curl -s -X POST https://api.telegram.org/botTOKEN/sendMessage \ -d chat_id=CHAT_ID \ -d text="High CPU detected"
На практике: после внедрения уведомлений время реакции падает с 15 минут до 1–2 минут.
Спроси себя: если сервер упадет ночью — ты узнаешь об этом через 5 минут или утром?
Логирование серверов без перегрузки системы
Логирование серверов часто превращается в мусор. Если писать все подряд — диск забьется за дни.
Решение — ротация логов.
Установи logrotate:
apt install logrotate
Создай конфиг:
nano /etc/logrotate.d/custom_logs
Пример:
/var/log/server_alert.log {
daily
rotate 7
compress
missingok
notifempty
}
Что это дает:
- хранится 7 дней логов
- старые файлы сжимаются
- диск не переполняется
Реальный эффект: экономия до 90% дискового пространства.
Какие ошибки в логировании убивают сервер
- Первая — писать лог при каждом запросе без фильтра.
- Вторая — не ограничивать размер файлов.
- Третья — хранить debug-логи в продакшене.
Пример: на одном проекте включен debug увеличил нагрузку на диск на 40% и убил SSD за 3 месяца.
Как настроить мониторинг серверов глубже (без сложных систем)
Если базового уровня мало — добавь проверку сервисов.
Пример проверки сайта:
STATUS=$(curl -o /dev/null -s -w "%{http_code}" http://localhost)
if [ "$STATUS" != "200" ]; then
echo "Site down: $STATUS" >> /var/log/server_alert.log
fi
Проверка порта:
nc -z localhost 3306
if [ $? -ne 0 ]; then
echo "MySQL down" >> /var/log/server_alert.log
fi
Это уже полноценный мониторинг серверов без сторонних сервисов.
Как масштабировать систему на несколько серверов
Когда серверов больше 5 — ручная проверка не работает.
Решение:
- один “главный” сервер
- сбор логов через rsync или ssh
- централизованный файл alert.log
Пример:
rsync -avz server1:/var/log/server_alert.log /central/logs/
На практике: так можно контролировать до 50 серверов без платных решений.
Финальная схема, которая реально работает
Минимальный стек:
- bash-скрипты (проверка состояния сервера)
- cron (автоматизация)
- logrotate (логирование серверов без перегрузки)
- curl + Telegram (уведомления)
- Время настройки: 1–2 часа
- Экономия: от $50 до $500 в месяц
- Скорость реакции: до 1 минуты
Главный вопрос: ты хочешь “мониторинг ради галочки” или систему, которая реально спасает серверы от падений?
Если второе — у тебя уже есть все инструменты.