Próbuję zdiagnozować dziwny problem z awarią serwera ( serwer reaguje na polecenia ping, ale nie przyjmuje połączeń SSH do momentu ponownego uruchomienia. 0% procesora ), gdy ponowne uruchomienie serwera przywraca wszystko do normy. Chciałbym, aby moje dzienniki dostępu Apache (lub jakiś inny dziennik) zawierały wszystkie żądania, które zostały wykonane poprawnie w momencie awarii, ale niestety Apache nie rejestruje żądań, dopóki nie zostaną ukończone. Oznacza to, że jeśli żądanie powoduje awarię serwera, to żądanie nigdy się nie kończy i dlatego nie pojawia się w logach.
Czy jest jakiś sposób, aby skonfigurować Apache, aby tworzył plik dziennika, do którego zapisywane są przy nadejściu żądań?
apache-2.2
logging
Ben Dilts
źródło
źródło
Odpowiedzi:
Myślę, że potrzebujesz rejestrowania kryminalistycznego, zobacz ten link: http://httpd.apache.org/docs/current/mod/mod_log_forensic.html
skrawek:
Format dziennika kryminalistycznego:
Każde żądanie jest rejestrowane dwa razy. Pierwszy raz jest zanim zostanie przetworzony dalej (to znaczy po otrzymaniu nagłówków). Drugi wpis dziennika jest zapisywany po przetworzeniu żądania w tym samym czasie, w którym następuje normalne rejestrowanie.
Aby zidentyfikować każde żądanie, przypisywany jest unikalny identyfikator żądania. Ten identyfikator sądowy może być rejestrowany krzyżowo w normalnym dzienniku transferu przy użyciu ciągu formatu% {forensic-id} n. Jeśli używasz mod_unique_id, zostanie użyty wygenerowany identyfikator.
Pierwszy wiersz rejestruje identyfikator sądowy, wiersz żądania i wszystkie odebrane nagłówki, oddzielone znakami potoku (|). Przykładowa linia wygląda następująco (wszystkie w jednym wierszu):
+ yQtJf8CoAB4AAFNXBIEAAAAA | GET /manual/de/images/down.gif HTTP / 1.1 | Host: localhost% 3a8080 | Agent użytkownika: Mozilla / 5.0 (X11; U; Linux i686; en-US; rv% 3a1.6) Gecko / 20040216 Firefox / 0.8 | Akceptuj: obraz / png itp.
Znak plus na początku wskazuje, że jest to pierwszy wiersz dziennika tego żądania. Drugi wiersz zawiera tylko znak minus i identyfikator:
-yQtJf8CoAB4AAFNXBIEAAAAA
Skrypt check_forensic przyjmuje jako argument nazwę pliku dziennika. Szuka tych par +/- ID i narzeka, jeśli prośba nie została zakończona.
źródło
Odpowiedź Sandroida jest odpowiednia na twoje pytanie, ale powinieneś naprawdę rozważyć uruchomienie przechwytywania pakietów sieciowych. Jeśli masz zasoby, wykonanie kopii lustrzanej portu w przełączniku i użycie drugiego komputera z systemem WireShark do zarejestrowania całego ruchu IP może naprawdę pomóc. Jeśli coś zabiera serwer do punktu, w którym usługi inne niż HTTP nie odpowiadają, może to oznaczać usunięcie stosu IP, zanim złe dane dotrą do Apache.
Jeśli możesz się upewnić, że komputer z przechwytywaniem ma inny sprzęt sieciowy i / lub sterowniki niż inny. Ssałbym rozbijać dwa za cenę jednego. ;-)
źródło