Майте запити журналу Apache, коли вони заходять, а не після їх закінчення


9

Я намагаюся діагностувати химерну проблему збою сервера ( Сервер відповідає на pings, але не прийме з'єднання SSH до перезавантаження. 0% CPU ), коли перезавантаження сервера поверне все до нормального. Я хотів би, щоб мої журнали доступу Apache (або якийсь інший журнал) включали всі запити, які були зроблені правильно, як сталася аварія, але, на жаль, Apache не записує запити, поки вони не завершаться. Це означає, що якщо запит виходить з ладу на сервері, він не закінчується і, таким чином, не відображається в журналах.

Чи є спосіб налаштувати Apache, щоб створити файл журналу, який записується після надходження запитів?


Ознайомтесь і з вашою DNS-конфігурацією, пошкоджений або висячий DNS-сервер може спричинити всілякі проблеми із SSH та не може ввійти. [Хто знає, що це може зробити для apache - переконайтеся, що пошук імені хоста вимкнено.]
Шон Кімбол

Відповіді:


15

Я думаю, що вам потрібно для судово-медичного журналу, дивіться за цим посиланням: 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 приймає за свій аргумент назву журналу. Він шукає ці +/- ідентифікаційні пари та скаржиться, якщо запит не був виконаний.


Це те, що я шукав, але не схоже, що я можу просто періодично видаляти цей журнал (rm /var/log/apache2/forensic.log щогодини) або криміналістичний журнал просто переривається, доки я не перезапущу апаш. Ідеї?
Бен Ділтс

звичайно, якщо ви будете мати будь-які журнали apache, це станеться. Спробуйте використовувати логротат або будь-який інший еквівалент у вашому середовищі, щоб періодично ротувати журнали (залежно від часу або розміру). Якщо ні, то замість того, щоб видалити його, спробуйте перемістити файл, потім торкніться /var/log/apache2/forensic.log (хоча перевірити дозволи)
sandroid

2

Відповідь Sandroid підходить для вашого запитання, але вам слід також розглянути можливість запуску мережевого пакету. Якщо у вас є ресурси, дзеркальне відображення порту в комутаторі та використання другої машини під управлінням WireShark для запису всього IP-трафіку можуть дійсно допомогти. Якщо щось виймає сервер до того моменту, коли не HTTP-сервіси не реагують, то, можливо, виймається стек IP, перш ніж погані дані перейдуть в Apache.

Якщо ви можете переконатися, що машина, на якій працює захоплення, має інше мережеве обладнання та / або драйвери, ніж інші. Буде смоктати, щоб розбити два за ціною одного. ;-)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.