Для моего текущего проекта веб-разработки я внедряю серверную систему, которая будет отмечать ошибки и автоматически отправлять электронное письмо администратору с подробностями о том, что произошло. Отслеживание ошибки и создание электронного письма с соответствующей информацией об ошибке довольно просто; но проблема возникает, когда рассматриваются определенные группы типов ошибок, особенно если сайт часто посещают.
Рассмотрим пару примеров:
- Внеплановое отключение базы данных, которое препятствует подключению всех сценариев на веб-сервере. Если для возврата сервера базы данных в оперативный режим требуется, скажем, 2 минуты (120 секунд), а веб-сервер получает уникальных запросов со скоростью 10 в секунду, то время, затрачиваемое сервером базы данных на вернитесь в онлайн, электронная почта администратора будет заполнена 1200 идентичными электронными письмами, все кричащими о невозможности подключения к базе данных.
- Ошибка в сценарии, где-то удалось скрыться при тестировании, и имеет разновидность, которая полностью нарушает генерацию контента и возникает только при определенных обстоятельствах (скажем, один раз каждые 100 запросов). Повторное использование уникальной скорости запроса 10 в секунду означает, что администратор будет каждые 10 секунд получать одно и то же сообщение об одной и той же ошибке до тех пор, пока она не будет исправлена.
Какие подходы / стратегии я могу использовать, чтобы предотвратить возникновение этого сценария? (Меня интересует только мониторинг ошибок, генерируемых скриптом, проблемы инфраструктуры выходят за рамки этого решения)
Я собираюсь предположить, что почти всегда могу однозначно идентифицировать ошибки, используя дайджест некоторых значений, переданных обратному вызову обработчика ошибок, установленному set_error_handler .
Первое и, вероятно, наиболее очевидное решение - запись в базу данных и отправка электронного письма только в том случае, если с момента его последнего прохождения прошел разумный минимальный период времени. Это не идеальный подход, особенно если проблема связана с базой данных. Другое решение - записать файлы на диск при возникновении ошибок и проверить, прошел ли разумный минимальный период времени с момента последнего изменения файла. Существует ли какой-либо механизм для решения этой проблемы, помимо двух описанных мною методов?