Ошибка регистрации / обработки на основе приложения? - PullRequest
3 голосов
/ 31 мая 2010

У нас есть веб-сервер, на котором мы собираемся запустить ряд приложений. На уровне сервера нам удалось выработать обработку ошибок с помощью Hyperic, чтобы уведомить ответственное лицо в случае сбоя базы данных / сервера memcached.

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

Итак, что же тогда является хорошим решением для этого?
Использование PHP: собственный журнал ошибок быстро забился бы, если бы мы одновременно запускали большое количество приложений. Возможно, это не лучший вариант, если вам нравится структура.

Одной из идей является создание легкого внешнего приложения для обработки ошибок, которое имеет API REST / JSON, которое получает зашифрованные и сериализованные массивы сообщений об ошибках и сохраняет их в базе данных. Возможно, в зависимости от серьезности ошибки это может быть также непосредственно введено в наш баг-трекер.
Это может быть несколько хорошо проведенных часов, но это кажется довольно хрупким решением, и я уверен, что уже есть более надежные альтернативы.

Спасибо

Ответы [ 4 ]

4 голосов
/ 31 мая 2010

Почему использование собственного error_log в PHP быстро стало "забитым"? Если все пойдет хорошо, вы не увидите много ошибок, верно?

Создание отдельного приложения, особенно приложения, использующего API, только для сообщений об ошибках, добавляет много возможных точек отказа для регистрации ошибок, если вы спросите меня. Возможно, вы могли бы создать приложение, которое проверяет существующие журналы ошибок на разных серверах / для разных приложений, чтобы иметь возможность отображать их в виде панели мониторинга ошибок, чтобы вы могли видеть, когда что-то действительно происходит неправильно.

Но мне интересно посмотреть, что могут предложить и другие, я пока об этом особо не задумывался.

2 голосов
/ 31 мая 2010

Мы на самом деле tail -f регистрируем журнал ошибок php сервера для различных выходных данных, но также вылавливаем много исключений, которые мы выбрасываем сами. Вызывая пользовательское исключение, вы можете сделать так, чтобы (в зависимости от приоритета, конечно) он записывал в вашу базу данных, поток журналов, отслеживание ошибок и / или отправлял сообщения тем, кто отвечает за этот модуль. Конечно, вы должны регистрировать, почему возникло исключение (например, var_export() / serialize() func_get_args() метода, в который вы сгенерировали исключение. Сделайте сообщение об исключении огромный , так как оно сохранит вы.

В дополнение к этому, мы используем Zend_Log, где исключения являются немного избыточными (например, если аргумент, данный методу, должен быть признан устаревшим, мы могли бы записать в бит debug_backtrace(), чтобы увидеть откуда поступил этот вызов. Это может быть распространено на программы, создающие графики дорогостоящих вызовов и т. д., но это sidenote:)

Мой лучший совет: знаю, где может произойти сбой вашего приложения, а где нет , гораздо проще найти эту ошибку. Убедитесь, что ошибки, возникающие на основе внешних служб, интерпретируются как таковые.

... и, честно говоря, я думаю, что такое мышление (Error-API / -Service на уровне приложения) немного странно: как можно предотвратить ошибку, если вы точно знаете, как с ней справиться? Разве вы не избежите / не автоматизируете это?

1 голос
/ 01 июня 2010

То, что вы ищете, это функции обработки ошибок PHP: http://de.php.net/manual/en/ref.errorfunc.php

Особенно интересным будет set_error_handler (), который позволяет полностью переопределить обработчик внутренних ошибок PHP.

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

Возвращая true или false, вы также можете контролировать, должен ли внутренний обработчик ошибок PHP запускаться после вашей функции.

1 голос
/ 31 мая 2010

Вы можете использовать set_exception_handler и set_error_handler, чтобы собрать более конкретную информацию и сообщить о ней таким образом, чтобы облегчить «засорение». Вы можете создавать разные файлы для каждого клиента или приложения, вводить свои собственные коды, которые упрощают обработку скриптом синтаксического анализа ошибок и т. Д.

Буду осторожен с введением дополнительного кода или инфраструктуры в процесс обработки ошибок. Он должен быть очень твердым, чтобы вы могли доверять получаемой информации. Сообщать об ошибках непосредственно в базу данных? Как насчет ошибок подключения к базе данных? (и так далее)

...