Как настроить самодиагностику серверов без сторонних сервисов и не пропускать сбои

Разработка ПО
Блог
Как настроить самодиагностику серверов без сторонних сервисов и не пропускать сбои
Поделиться:


                

Почему самодиагностика серверов выгоднее готовых сервисов

Когда ты используешь внешний мониторинг, ты платишь не за “наблюдение”, а за удобство. На практике 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 минуты

Главный вопрос: ты хочешь “мониторинг ради галочки” или систему, которая реально спасает серверы от падений?

Если второе — у тебя уже есть все инструменты.

Хочешь работать с нами? Отправь свое резюме

Нажимая на кнопку, вы соглашаетесь с Политикой конфиденциальности персональных данных

Файлы cookie обеспечивают работу наших сервисов. Используя наш сайт, вы соглашаетесь с нашими правилами в отношении этих файлов.