2011-11-17 11 views
13

Necesito analizar el archivo de registro de Apache para buscar patrones sospechosos específicos (como inyecciones de SQL).Apache grep archivo de registro grande

Por ejemplo, yo estoy buscando id='%20or%201=1;

estoy usando grep para comprobar el archivo de registro para este patrón (y otros) y debido a que estos registros son enormes se necesita mucho tiempo

Aquí mi mando:

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

¿hay una mejor o un método más rápido o comandos que necesito utilizar para hacer la búsqueda más rápida?

Respuesta

22

Para empezar, no necesita conectar la salida grep a egrep. egrep proporciona un superconjunto de expresión regular grep 's de análisis, por lo que sólo puede hacer esto:

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

Calling egrep es idéntica a llamar grep -E.

Eso puede aumentar un poco el rendimiento. Si puede buscar cadenas fijas en lugar de expresiones regulares, eso también podría ayudar. Se puede decir grep para buscar una cadena fija con la opción -F:

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

pero utilizando cadenas fijas se pierde una gran cantidad de flexibilidad.

+0

déjame probar esto – aki

+0

gracias tomó 21 minutos menos que mi código – aki

0

Supongo que dedicará la mayor parte de su tiempo a obtener los datos del disco (el uso de la CPU no está al máximo). Entonces no puedes optimizar una consulta. Puede tratar de solo registrar las líneas interesantes en un archivo separado ...

0

¿Está buscando grep -E "id=(' or|'%20)" apache.log?

Cuestiones relacionadas