2011-11-17 16 views
13

Ho bisogno di analizzare il file di log di Apache per cercare specifici pattern sospetti (come iniezioni SQL).Apache grep big log file

Per esempio sto cercando id='%20or%201=1;

Sto usando grep per controllare il file di log per questo modello (e altri) e perché questi registri sono enormi ci vuole un lungo periodo di tempo

Qui il mio comando:

grep 'id=' Apache.log | egrep "' or|'%20" 

Esiste un metodo o un comando migliore o più veloce che è necessario utilizzare per rendere la ricerca più veloce?

risposta

22

Per i principianti, non è necessario collegare l'uscita grep a egrep. egrep fornisce un superset di un'espressione regolare grep s' analisi, in modo da poter solo fare questo:

egrep "id='(or|%20)'" apache.log 

Calling egrep è identico a chiamare grep -E.

Ciò potrebbe farti aumentare leggermente le prestazioni. Se è possibile cercare stringhe fisse anziché espressioni regolari, ciò potrebbe anche aiutare. Si può dire grep per cercare una stringa fissa con l'opzione -F:

grep -F "id='%20or" apache.log 

ma utilizzando corde fisse si perde un sacco di flessibilità.

+0

fammi provare questo – aki

+0

grazie ci sono voluti 21 minuti in meno del mio codice – aki

0

Suppongo che la maggior parte del tempo venga speso durante il recupero dei dati dal disco (l'utilizzo della CPU non è al massimo). Quindi non è possibile ottimizzare una query. Si potrebbe provare a registrare solo le linee interessanti in un file separato però ....

0

Stai cercando grep -E "id=(' or|'%20)" apache.log?