J'essaie de diagnostiquer un problème de plantage de serveur bizarre (le serveur répond aux pings, mais n'acceptera pas les connexions SSH avant le redémarrage. 0% CPU ) où le redémarrage du serveur ramène tout à la normale. J'aimerais que mes journaux d'accès Apache (ou un autre journal) incluent toutes les demandes qui ont été faites juste après le crash, mais malheureusement Apache n'enregistre pas les demandes avant qu'elles ne soient terminées. Cela signifie que si une requête plante le serveur, cette requête ne se termine jamais et n'apparaît donc pas dans les journaux.
Existe-t-il un moyen de configurer Apache pour créer un fichier journal qui est écrit à mesure que les demandes arrivent?
apache-2.2
logging
Ben Dilts
la source
la source
Réponses:
Je pense que vous avez besoin de la journalisation judiciaire, consultez ce lien: http://httpd.apache.org/docs/current/mod/mod_log_forensic.html
fragment:
Format du journal médico-légal:
Chaque demande est enregistrée deux fois. La première fois, c'est avant de poursuivre le traitement (c'est-à-dire après avoir reçu les en-têtes). La deuxième entrée de journal est écrite après le traitement de la demande en même temps que la journalisation normale se produit.
Afin d'identifier chaque demande, un ID de demande unique est attribué. Cet ID médico-légal peut être croisé dans le journal de transfert normal en utilisant la chaîne de format% {forensic-id} n. Si vous utilisez mod_unique_id, son ID généré sera utilisé.
La première ligne enregistre l'ID judiciaire, la ligne de demande et tous les en-têtes reçus, séparés par des caractères de canal (|). Un exemple de ligne ressemble à ceci (le tout sur une seule ligne):
+ yQtJf8CoAB4AAFNXBIEAAAAA | GET /manual/de/images/down.gif HTTP / 1.1 | Hôte: localhost% 3a8080 | User-Agent: Mozilla / 5.0 (X11; U; Linux i686; en-US; rv% 3a1.6) Gecko / 20040216 Firefox / 0.8 | Accepter: image / png, etc ...
Le caractère plus au début indique qu'il s'agit de la première ligne de journal de cette demande. La deuxième ligne contient juste un caractère moins et l'ID à nouveau:
-yQtJf8CoAB4AAFNXBIEAAAAA
Le script check_forensic prend comme argument le nom du fichier journal. Il recherche ces paires +/- ID et se plaint si une demande n'a pas été traitée.
la source
La réponse de Sandroid convient à votre question, mais vous devriez également envisager de lancer une capture de paquets réseau. Si vous avez les ressources, la mise en miroir du port dans le commutateur et l'utilisation d'une deuxième machine exécutant WireShark pour enregistrer tout le trafic IP peuvent vraiment aider. Si quelque chose supprime le serveur au point où les services non HTTP ne répondent pas, il se peut qu'il supprime la pile IP avant que les mauvaises données ne parviennent à Apache.
Si vous pouvez vous assurer que la machine exécutant la capture possède un matériel réseau et / ou des pilotes différents les uns des autres. Serait nul pour planter deux pour le prix d'un. ;-)
la source