2010-10-28 14 views
8

Solución de problemas, analizando & filtrar archivos de registro es, con mucho, uno de los trabajos diarios más laboriosos. Mi problema es buscar a través de un archivo de registro, que podría tener más de 4 gigas de tamaño. Simplemente cargando el archivo toma hasta 15 minutos. Estoy ejecutando un procesador bastante rápido con 8 gigas de memoria. Después de cargar el archivo, literalmente solo puedo darme el lujo de grep y/o control + F para escanear el archivo. Esto empeora cuando trato de buscar archivos de múltiples sistemas, cada uno analizando un concierto. He intentado segregar los archivos según las marcas de tiempo para hacerlos más pequeños, pero realmente no hay alegría.Buscando archivos de registro enormes

¿Existe alguna herramienta o incluso un proceso que pueda utilizar para hacer que la resolución de problemas sea menos lenta (aparte de la habitual "simplemente corrija el error primero")?

Sus comentarios son apreciados.

+2

Echa un vistazo aquí http://www.baremetalsoft.com/index.php –

+0

¿En qué plataforma estás corriendo? – BobbyShaftoe

+1

¿Por qué los registros son tan grandes? ¿Se debe a que realmente se están produciendo muchas transacciones/eventos o se está registrando un nivel de detalle innecesario? ¿La aplicación tiene algún soporte para ajustar la verbosidad, y/o dirigir los datos de registro de diferentes componentes a diferentes archivos de registro? –

Respuesta

9

¿Qué la estás cargando? 4 gigas es un archivo bastante grande, pero eso no debería demorar tanto en cargarse en la memoria.

Para archivos tan grandes, recomendaría usar grep directamente, y si grep no lo está haciendo por usted, SED y AWK son sus amigos. Si desea hacerlo en tiempo real, obtenga información sobre el uso de esas herramientas junto con las tuberías y el tail -f.

Sí, lo sé, SED es muy intimidante al principio. También es ridículamente poderoso. Aprenderlo.

Si está en Windows, tiene mi simpatía. ¿Puedo recomendar un shell de Unix?

Si tiene miedo de las herramientas de línea de comandos, considere aprender Perl o Python. Ambos son bastante buenos para clasificar la señal del ruido en archivos de gran tamaño como este.

+1

yo lo secundo. por favor, aprende AWK y SED. ¡entonces puedes escribir un par de guiones y la vida será muy simple! :-) – zerodin

+0

lo siento amigo! se perdió eso. upvote es para ti! – zerodin

1

Baretail es una buena herramienta para tener. Darle una oportunidad. No lo he usado para archivos de 4 gigas, pero mis archivos de registro también son bastante grandes y funcionan muy bien. http://www.baremetalsoft.com/baretail/index.php

editar: No vi que alguien haya sugerido baretail.

1

Si desea excluir líneas de cosas que no desea ver, puede grep -v 'I dont wanna see this' > logWithExcludedLines.log. También puede usar expresiones regulares grep -vE 'asdf|fdsa' > logWithNoASDForFDSA.log

Este método funciona muy bien con los registros de acceso de apache grep -v 'HTTP/1.1 200' > no200s.log (o algo así, no recuerdo la cadena exacta).

0

Actualmente estoy haciendo este tipo de cosas utilizando el grep de Unix herramientas de línea de comandos (f), awk, cortar, unir, etc., que están disponibles también para las ventanas con cygwin o UnxUtils y así sucesivamente, y también se utilizan algunos guiones para Scala cosas que son más complicadas Puede escribir scripts para realizar búsquedas que abarquen entradas de archivos de registro en varios archivos. Pero también soy wondering if there is something better than that - tal vez importing them into a database (siendo ambas preguntas).

Por cierto: sustituya su disco duro por una unidad SSD. ¡Estos son manera más rápido! Además, me conviene dejar los registros comprimidos gzip en el disco, ya que al buscarlos el disco es el cuello de botella. Si usted está buscando para, por ejemplo, una expresión regular en los ficheros log y quiere tener 100 líneas de contexto para cada caso, que haría:

zcat *.log.gz | grep -100 '{regexp}' > {outputfile} 

y cargar el outputfile en su visor de archivo de texto favorito.Si está buscando cadenas fijas, use fgrep (igual que grep con la opción adicional -F) - eso es mucho más rápido.

Cuestiones relacionadas