Я пытаюсь диагностировать причудливую проблему сбоев сервера ( сервер отвечает на эхо-запросы, но не принимает соединения SSH до перезагрузки. 0% ЦП ), где перезагрузка сервера возвращает все в нормальное состояние. Я хотел бы, чтобы мои журналы доступа Apache (или некоторые другие журналы) включали все запросы, которые были сделаны правильно, когда произошел сбой, но, к сожалению, Apache не регистрирует запросы до тех пор, пока они не завершатся. Это означает, что если запрос приводит к сбою сервера, этот запрос никогда не завершается и, следовательно, не отображается в журналах.
Есть ли способ настроить Apache для создания файла журнала, в который записываются по мере поступления запросов?
apache-2.2
logging
Бен Дилтс
источник
источник
Ответы:
Я думаю, что вам нужно судебно-медицинской регистрации, см. Эту ссылку: http://httpd.apache.org/docs/current/mod/mod_log_forensic.html
фрагмент кода:
Формат журнала судебной экспертизы:
Каждый запрос регистрируется два раза. Первый раз - до дальнейшей обработки (то есть после получения заголовков). Вторая запись журнала записывается после обработки запроса в то же время, когда происходит нормальное ведение журнала.
Для идентификации каждого запроса присваивается уникальный идентификатор запроса. Этот криминалистический идентификатор может быть зарегистрирован в журнале обычной передачи с использованием строки формата% {forensic-id} n. Если вы используете mod_unique_id, будет использоваться его сгенерированный идентификатор.
Первая строка записывает криминалистический идентификатор, строку запроса и все полученные заголовки, разделенные символами канала (|). Пример строки выглядит следующим образом (все на одной строке):
+ yQtJf8CoAB4AAFNXBIEAAAAA | GET /manual/de/images/down.gif HTTP / 1.1 | Хост: localhost% 3a8080 | Пользователь-агент: Mozilla / 5.0 (X11; U; Linux i686; en-US; rv% 3a1.6) Gecko / 20040216 Firefox / 0.8 | Принять: image / png и т. Д.
Символ «плюс» в начале означает, что это первая строка журнала этого запроса. Вторая строка просто содержит символ минус и идентификатор снова:
-yQtJf8CoAB4AAFNXBIEAAAAA
Сценарий check_forensic принимает в качестве аргумента имя файла журнала. Он ищет эти пары +/- ID и жалуется, если запрос не был выполнен.
источник
Ответ Sandroid подходит для вашего вопроса, но вы также должны рассмотреть возможность захвата сетевых пакетов. Если у вас есть ресурсы, зеркалирование порта внутри коммутатора и использование второй машины с WireShark для записи всего IP-трафика может действительно помочь. Если что-то выводит сервер в точку, где не-HTTP-сервисы не отвечают, то это может быть удаление стека IP, прежде чем плохие данные попадут в Apache.
Если вы можете убедиться, что машина, на которой выполняется захват, имеет другое сетевое оборудование и / или драйверы, чем у другого. Будет сосать, чтобы разбить два по цене одного. ;-)
источник