Ich versuche, ein bizarres Problem mit einem Serverabsturz zu diagnostizieren ( Server reagiert auf Pings, akzeptiert jedoch keine SSH-Verbindungen bis zum Neustart. 0% CPU ), bei dem beim Neustart des Servers alles wieder normal wird. Ich möchte, dass meine Apache-Zugriffsprotokolle (oder ein anderes Protokoll) alle Anforderungen enthalten, die beim Absturz richtig gestellt wurden, aber leider protokolliert Apache Anforderungen erst nach Abschluss. Das heißt, wenn eine Anforderung den Server zum Absturz bringt, wird diese Anforderung nie beendet und daher nicht in den Protokollen angezeigt.
Gibt es eine Möglichkeit, Apache so zu konfigurieren, dass eine Protokolldatei erstellt wird, in die beim Eintreffen der Anforderungen geschrieben wird?
quelle
Antworten:
Ich denke, was Sie für die forensische Protokollierung benötigen, finden Sie unter folgendem Link: http://httpd.apache.org/docs/current/mod/mod_log_forensic.html
Ausschnitt:
Forensisches Protokollformat:
Jede Anfrage wird zweimal protokolliert. Das erste Mal ist, bevor es weiter verarbeitet wird (dh nach dem Empfang der Header). Der zweite Protokolleintrag wird nach der Anforderungsverarbeitung gleichzeitig mit der normalen Protokollierung geschrieben.
Um jede Anforderung zu identifizieren, wird eine eindeutige Anforderungs-ID zugewiesen. Diese forensische ID kann im normalen Übertragungsprotokoll mit der Zeichenfolge% {forensic-id} n formatiert werden. Wenn Sie mod_unique_id verwenden, wird die generierte ID verwendet.
In der ersten Zeile werden die forensische ID, die Anforderungszeile und alle empfangenen Header protokolliert, getrennt durch Pipe-Zeichen (|). Eine Beispielzeile sieht wie folgt aus (alle in einer Zeile):
+ yQtJf8CoAB4AAFNXBIEAAAAA | GET /manual/de/images/down.gif HTTP / 1.1 | Host: localhost% 3a8080 | Benutzeragent: Mozilla / 5.0 (X11; U; Linux i686; en-US; rv% 3a1.6) Gecko / 20040216 Firefox / 0.8 | Akzeptieren: image / png, etc ...
Das Pluszeichen am Anfang zeigt an, dass dies die erste Protokollzeile dieser Anforderung ist. Die zweite Zeile enthält nur ein Minuszeichen und die ID erneut:
-yQtJf8CoAB4AAFNXBIEAAAAA
Das Skript check_forensic verwendet als Argument den Namen der Protokolldatei. Es sucht nach diesen +/- ID-Paaren und beschwert sich, wenn eine Anfrage nicht abgeschlossen wurde.
quelle
Die Antwort von Sandroid ist richtig für Ihre Frage, aber Sie sollten auch in Betracht ziehen, eine Netzwerkpaketerfassung durchzuführen. Wenn Sie über die Ressourcen verfügen, kann es sehr hilfreich sein, den Port innerhalb des Switch zu spiegeln und einen zweiten Computer zu verwenden, auf dem WireShark ausgeführt wird, um den gesamten IP-Verkehr aufzuzeichnen. Wenn der Server so weit entfernt wird, dass Nicht-HTTP-Dienste nicht mehr reagieren, wird möglicherweise der IP-Stack entfernt, bevor die fehlerhaften Daten zu Apache gelangen.
Wenn Sie sicherstellen können, dass der Computer, auf dem die Erfassung ausgeführt wird, über andere Netzwerkhardware und / oder Treiber als der andere verfügt. Würde saugen, um zwei zum Preis von einem zum Absturz zu bringen. ;-);
quelle