Avere richieste di log di Apache quando arrivano, piuttosto che quando finiscono


9

Sto cercando di diagnosticare un bizzarro problema di arresto anomalo del server (il server risponde ai ping, ma non accetta connessioni SSH fino al riavvio. CPU 0% ) in cui il riavvio del server riporta tutto alla normalità. Vorrei che i miei registri di accesso di Apache (o qualche altro registro) includessero tutte le richieste che erano state fatte nel momento in cui si era verificato l'incidente, ma sfortunatamente Apache non registra le richieste fino a quando non sono state completate. Ciò significa che se una richiesta provoca l'arresto anomalo del server, tale richiesta non termina mai e pertanto non viene visualizzata nei registri.

Esiste un modo per configurare Apache per creare un file di registro in cui scrivere quando arrivano le richieste?


Dai un'occhiata anche alla tua configurazione DNS, un server DNS rotto o sospeso può causare tutti i tipi di problemi con SSH e non essere in grado di accedere. [Chissà cosa può fare per apache - assicurati che le ricerche dei nomi host siano disattivate.]
Sean Kimball,

Risposte:


15

Penso a ciò che ti serve la registrazione forense, vedi questo link: http://httpd.apache.org/docs/current/mod/mod_log_forensic.html

frammento:

Formato registro legale:

Ogni richiesta viene registrata due volte. La prima volta è prima che venga ulteriormente elaborato (ovvero dopo aver ricevuto le intestazioni). La seconda voce di registro viene scritta dopo l'elaborazione della richiesta nello stesso momento in cui si verifica la registrazione normale.

Per identificare ogni richiesta, viene assegnato un ID richiesta univoco. Questo ID forense può essere registrato nel registro di trasferimento normale usando la stringa di formato% {forensic-id} n. Se si utilizza mod_unique_id, verrà utilizzato l'ID generato.

La prima riga registra l'ID forense, la riga della richiesta e tutte le intestazioni ricevute, separate da caratteri pipe (|). Una riga di esempio è simile alla seguente (tutta su una riga):

+ yQtJf8CoAB4AAFNXBIEAAAAA | GET /manual/de/images/down.gif HTTP / 1.1 | Host: localhost% 3a8080 | User-Agent: Mozilla / 5.0 (X11; U; Linux i686; en-US; rv% 3a1.6) Gecko / 20040216 Firefox / 0.8 | Accetta: image / png, ecc ...

Il carattere più all'inizio indica che questa è la prima riga di registro di questa richiesta. La seconda riga contiene solo un carattere meno e l'ID di nuovo:

-yQtJf8CoAB4AAFNXBIEAAAAA

Lo script check_forensic assume come argomento il nome del file di registro. Cerca quelle coppie +/- ID e si lamenta se una richiesta non è stata completata.


Questo è quello che stavo cercando, ma sembra che non riesca a cancellare periodicamente questo registro (rm /var/log/apache2/forensic.log ogni ora) o la registrazione forense si interrompe fino a quando non riavvio apache. Idee?
Ben Dilts,

certamente se hai qualche registro apache, ciò accadrà. Prova a utilizzare logrotate o qualsiasi altro equivalente esistente nel tuo ambiente per eseguire periodicamente il roll log (in termini di tempo o dimensioni). In caso contrario, anziché eliminarlo, prova a spostare il file, quindi tocca /var/log/apache2/forensic.log (controlla i permessi però)
sandroid,

2

La risposta di Sandroid è giusta per la tua domanda, ma dovresti anche considerare di eseguire anche un'acquisizione di pacchetti di rete. Se si dispone delle risorse, il mirroring della porta all'interno dello switch e l'utilizzo di un secondo computer che esegue WireShark per registrare tutto il traffico IP potrebbe davvero aiutare. Se qualcosa sta eliminando il server al punto in cui i servizi non HTTP non rispondono, è possibile che stia eliminando lo stack IP prima che i dati errati arrivino ad Apache.

Se puoi assicurarti che la macchina che esegue l'acquisizione abbia hardware e / o driver di rete diversi rispetto agli altri. Farebbe schifo a schiantarsi due al prezzo di uno. ;-)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.