Методы предотвращения возможного потока автоматически сгенерированной электронной почты, когда веб-сайт сталкивается с ошибками - PullRequest
2 голосов
/ 11 февраля 2009

Для моего текущего проекта веб-разработки я внедряю серверную систему, которая будет отмечать ошибки и автоматически отправлять электронное письмо администратору с подробностями о том, что произошло. Отслеживание ошибки и создание электронного письма с соответствующей информацией об ошибке довольно просто; но проблема возникает, когда рассматриваются определенные группы типов ошибок, особенно если сайт часто посещают.

Рассмотрим пару примеров:

  1. Внеплановое отключение базы данных, которое препятствует подключению всех сценариев на веб-сервере. Если для возврата сервера базы данных в оперативный режим требуется, скажем, 2 минуты (120 секунд), а веб-сервер получает уникальных запросов со скоростью 10 в секунду, то время, затрачиваемое сервером базы данных на вернитесь в онлайн, электронная почта администратора будет заполнена 1200 идентичными электронными письмами, все кричащими о невозможности подключения к базе данных.
  2. Ошибка в сценарии, где-то удалось скрыться при тестировании, и имеет разновидность, которая полностью нарушает генерацию контента и возникает только при определенных обстоятельствах (скажем, один раз каждые 100 запросов). Повторное использование уникальной скорости запроса 10 в секунду означает, что администратор будет каждые 10 секунд получать одно и то же сообщение об одной и той же ошибке до тех пор, пока она не будет исправлена.

Какие подходы / стратегии я могу использовать, чтобы предотвратить возникновение этого сценария? (Меня интересует только мониторинг ошибок, генерируемых скриптом, проблемы инфраструктуры выходят за рамки этого решения)

Я собираюсь предположить, что почти всегда могу однозначно идентифицировать ошибки, используя дайджест некоторых значений, переданных обратному вызову обработчика ошибок, установленному set_error_handler .

Первое и, вероятно, наиболее очевидное решение - запись в базу данных и отправка электронного письма только в том случае, если с момента его последнего прохождения прошел разумный минимальный период времени. Это не идеальный подход, особенно если проблема связана с базой данных. Другое решение - записать файлы на диск при возникновении ошибок и проверить, прошел ли разумный минимальный период времени с момента последнего изменения файла. Существует ли какой-либо механизм для решения этой проблемы, помимо двух описанных мною методов?

Ответы [ 4 ]

2 голосов
/ 11 февраля 2009

Почему бы просто не разрешить их отправку, а затем собрать и сохранить их в базе данных на стороне получателя. Таким образом вы обойдете возможность проблемы с базой данных на сервере.

Кроме того, на мой взгляд, большим преимуществом является то, что вы не выбрасываете произвольно важные данные судебной экспертизы. Последующий анализ очень важен, и любой вид фильтрации может сделать его невероятно трудным или невозможным.

1 голос
/ 11 февраля 2009

Я занимался мониторингом журнала ошибок и отправкой дайджеста каждые 5 минут. Я хотел бы думать, что это из-за моего высококачественного кода (по сравнению с непопулярным приложением!), Но я не слишком беспокоюсь: PI в основном читает файл журнала от начала до конца, анализирует сообщения об ошибках и останавливается, когда отметка времени <последний раз, когда я запускал задание, а затем отправил простое электронное письмо. </p>

Это работает достаточно хорошо. Однако, если вы используете много POST, существует ограниченное количество информации, которую вы можете получить, сопоставив журнал доступа apache с вашим журналом ошибок php. Я помню, как читал о модуле для записи POST-файлов в файл из apache, но не помню особенностей.

Однако, если вы хотите использовать обработчик ошибок для записи куда-либо, это может быть лучше, если у вас есть доступ к гораздо большей информации. IP, идентификатор сеанса (и любая пользовательская информация, которая может повлиять на настройки, такие как разбиение на страницы или что-то еще), аргументы функции (debug_backtrace или что-то еще) ... Пишите каждую ошибку, просто отправляйте сообщения, когда возникают новые ошибки или после ошибки было подтверждено (если вы хотите написать такую ​​систему).

1 голос
/ 11 февраля 2009

Вы пробовали смотреть на такие программы для мониторинга, как SiteScope?

0 голосов
/ 11 февраля 2009

Вы должны пойти дальше и генерировать любые файлы журнала, которые вы хотите. Но вместо того, чтобы отправлять электронные письма самостоятельно, подключите журналы к системе мониторинга, такой как Nagios . Пусть решение для мониторинга решит, когда и как часто оповещать администраторов.

...