Мониторинг простого PHP-сайта: что контролировать без сложной инфраструктуры
Небольшой PHP-сайт часто живёт без мониторинга: пока клиент сам не написал, что форма не работает или сайт не открывается. Это плохой режим поддержки. Даже без сложной инфраструктуры можно контролировать базовые вещи: доступность сайта, SSL, место на диске, ошибки PHP, cron, базу, очередь и отправку заявок.
Мониторинг должен отвечать на вопрос: сайт работает для пользователя и выполняет свои ключевые функции?
Доступность сайта
Самая простая проверка — HTTP-код главной и важных страниц.
curl -I https://example.ru/
curl -I https://example.ru/contacts/
curl -I https://example.ru/catalog/
Для автоматического контроля можно использовать внешний uptime-сервис. Важно проверять не только главную, потому что она может открываться из кэша, а форма или каталог уже сломаны.
SSL-сертификат
Просроченный SSL сразу бьёт по доверию и заявкам. Нужно контролировать срок действия сертификата.
echo | openssl s_client -servername example.ru -connect example.ru:443 2>/dev/null \
| openssl x509 -noout -dates
Если используется автоматическое обновление, всё равно нужно проверять, что оно реально срабатывает.
Свободное место
Заполненный диск ломает сессии, кэш, логи, загрузки и базу.
df -h
Желательно получать предупреждение заранее, например при заполнении 80-85%, а не когда осталось 0 байт.
Ошибки PHP и nginx
Если error.log быстро растёт, сайт может формально открываться, но внутри уже есть проблема.
tail -n 50 /var/log/nginx/error.log
tail -n 50 /var/log/php-fpm/error.log
tail -n 50 /var/www/site.ru/runtime/logs/app.log
Для простого контроля можно считать количество свежих error-записей за период и отправлять уведомление при росте.
MySQL
Нужно проверять, что база доступна и на ней нет очевидных проблем с подключениями или местом.
mysqladmin ping
mysql -e "SHOW FULL PROCESSLIST;"
Если сайт зависит от MySQL, падение базы должно обнаруживаться раньше, чем пользователь отправит жалобу.
Cron и фоновые задачи
Cron может перестать выполняться молча. Каждая важная задача должна писать лог старта и завершения.
tail -n 100 /var/www/site.ru/runtime/logs/cron.log
Полезно хранить timestamp последнего успешного запуска в файле или таблице. Тогда можно проверять, что задача не молчит слишком долго.
last_success_at = 2026-06-18 09:00:00
Очереди
Если проект использует queue, нужно следить за размером очереди и failed jobs. Очередь может расти, даже если сайт открывается нормально.
SELECT COUNT(*) FROM queue WHERE status = 'waiting';
SELECT COUNT(*) FROM queue WHERE status = 'failed';
Названия таблиц и статусов зависят от реализации, но смысл один: очередь должна обрабатываться.
Формы и почта
Для бизнеса важнее не просто открытие сайта, а получение заявок. Поэтому периодически нужно проверять полный путь формы: отправка, запись, письмо или CRM.
- Открыть страницу формы.
- Отправить тестовую заявку.
- Проверить запись в базе или CRM.
- Проверить письмо менеджеру.
- Проверить лог ошибок.
Уведомления
Мониторинг без уведомления бесполезен. Сообщение должно приходить туда, где его увидят: email, Telegram, Slack, SMS или система задач.
Не нужно уведомлять о каждом warning. Иначе уведомления начнут игнорировать. Лучше выделить критичные события: сайт недоступен, SSL скоро истечёт, диск заполнен, cron не запускался, очередь растёт.
Чек-лист
- Проверять главную и важные внутренние страницы.
- Контролировать срок SSL.
- Контролировать свободное место на диске.
- Следить за PHP и nginx error logs.
- Проверять доступность MySQL.
- Контролировать последний успешный запуск cron.
- Следить за очередью и failed jobs.
- Проверять полный путь заявки.
- Настроить понятные уведомления.
Базовый мониторинг не обязан быть сложным. Даже несколько простых проверок уже переводят поддержку из режима “клиент сообщил о поломке” в режим раннего обнаружения проблем.
Комментарии (0)
Пока нет комментариев. Будьте первым!