2010-01-03 13 views
15

utilizo grep para analizar a través de mi comercio apps de registros, pero es limitado en el sentido de que necesito que arrastre visualmente a través de la salida para ver qué pasaba etc.¿Cuál es la mejor herramienta para analizar archivos de registro?

Me pregunto si Perl es una mejor opción? ¿Algún buen recurso para aprender el análisis de log y cadenas con Perl?

También creo que Python sería bueno para esto. Perl vs Python vs 'grep en Linux'?

+0

Gracias a todos por las respuestas. Creo que prácticamente tengo que seguir con perl o grep. En las cajas de producción, obtener permisos para ejecutar Python/Ruby, etc. se convertirá en un proyecto en sí mismo. Supongo que es hora de actualizar mi conocimiento de expresiones regulares para hacer las cosas en grep. – user242591

+2

@coderzambesi: ¿Por favor, defina "Mejor" y "Mejor" en comparación con qué? Más barato? ¿Más rápido? ¿Mejores herramientas de desarrollo de GUI? Más soporte para proveedores/¿A qué te refieres con mejor? –

Respuesta

9

Al final, realmente depende de la cantidad de semántica que desee identificar, si sus registros se ajustan a patrones comunes, y lo que quiere hacer con los datos analizados.

Si puede usar expresiones regulares para encontrar lo que necesita, tiene muchísimas opciones. Perl es un lenguaje popular y tiene instalaciones nativas de RE muy convenientes. Personalmente, me siento mucho más cómodo con Python y encuentro que la pequeña molestia añadida para hacer RE no es significativa.

Si desea hacer algo más inteligente que el emparejamiento de RE, o quiere tener mucha lógica, puede sentirse más cómodo con Python o incluso con Java/C++/etc. Por ejemplo, es fácil leer línea por línea en Python y luego aplicar varias funciones de predicados y reacciones a las coincidencias, lo cual es excelente si tiene un conjunto de reglas que le gustaría aplicar.

4

Todos los lenguajes de scripts son buenos candidatos: Perl, Python, Ruby, PHP y AWK están bien para esto. Usar cualquiera de estos idiomas es mejor que mirar los registros desde un tamaño (pequeño).

Wearing Ruby Slippers to Work es un ejemplo de esto en Ruby, escrito en el estilo inimitable de Why. Aquí hay un basic example in Perl. Te sugiero que elijas uno de estos idiomas y comiences a descifrar.

1

Encuentro este list invaluable cuando se trata de cualquier trabajo que requiera uno para analizar con python.

No utilizaría Perl para analizar registros grandes/complejos, solo por la legibilidad (la velocidad en Perl me falta (trabajos grandes), pero ese es probablemente mi código perl (debo mejorar)).

Sin embargo, si grep se adapta perfectamente a sus necesidades por el momento, no hay razón para empantanarse al escribir un analizador completo. La solución más simple suele ser la mejor, y grep es una buena herramienta.

2

Una gran ventaja que Perl tiene sobre Python es que cuando se analiza texto es la capacidad de usar regular expressions directamente como parte de la sintaxis del lenguaje. Por ejemplo:

if ($line =~ m/^Regex/) { 
    ... code goes here 
} 

Perl también asigna capture groups directamente a $ 1, $ 2, etc, por lo que es muy fácil de trabajar. Dependiendo del formato y la estructura de los archivos de registro que está tratando de analizar, esto podría resultar bastante útil (o, si puede analizarse como un archivo de ancho fijo o utilizar técnicas más simples, no es muy útil en absoluto).

Todo es simplemente azúcar sintáctico, en realidad, y otros idiomas también le permiten usar expresiones regulares y grupos de captura (de hecho, el artículo vinculado muestra cómo hacerlo en Python). Solo tienes que escribir un poco más de código y pasar objetos para hacerlo.

+1

la capacidad de usar expresiones regulares con Perl no es una gran ventaja sobre Python, porque en primer lugar, Python también tiene expresiones regulares, y en segundo lugar, expresiones regulares no siempre es la mejor solución. – ghostdog74

+1

Aún es más sencillo usar Regexes en Perl que en otro idioma, debido a la posibilidad de usarlos directamente. Y sí, a veces la expresión regular no es la solución correcta, por eso dije 'dependiendo del formato y la estructura de los archivos de registro que está tratando de analizar' –

+1

Vamos, no es tan difícil usar expresiones regulares en Python. Si estás discutiendo sobre mera sintaxis, entonces realmente no estás argumentando nada que valga la pena. Perl tiene algunas características regex que Python no admite, pero es poco probable que la mayoría de la gente las necesite. En cuanto a los búferes de captura, Python se adelantó al juego con capturas etiquetadas (que Perl ahora también tiene). –

2

Hay un programa de Perl llamado Log_Analysis que hace un montón de análisis y preprocesamiento para usted.

1

Otra interpretación posible de su pregunta es "¿Hay alguna herramienta que facilite la supervisión de registros?", Y para responder a esa yo sugeriría que echar un vistazo a Splunk o tal vez Log4view.

+0

Sprog es bastante ingenioso también: http://sprog.sourceforge.net/ – daotoad

+0

Octopussy es bueno también (descargo de responsabilidad: mi proyecto): http://www.8pussy.org – sebthebert

1

en Linux, puede utilizar sólo la cáscara (bash, ksh, etc.) para analizar los archivos de registro si no son demasiado grandes en tamaño Las otras herramientas son generalmente grep y awk. Sin embargo, para obtener más poder de programación, generalmente se utiliza awk. Si tiene archivos grandes para analizar, intente awk.

Por supuesto, Perl o Python o prácticamente cualquier otro También se pueden usar idiomas con capacidades de lectura de archivos y manipulación de cadenas.

2

Aprender un lenguaje de programación le permitirá llevar sus capacidades de análisis de registros a otro nivel.

Cualquier lenguaje dinámico o "scripting" como Perl, Ruby o Python hará el trabajo. Lo que debes usar realmente depende de factores externos. Entre las cosas que debe considerar:

  • hace el trabajo ya emplean una adecuada langauge?
  • ¿conoces a alguien que pueda asesorarlo en un idioma apropiado?
  • pruebe cada idioma un poco y vea qué idioma le queda mejor.

Personalmente, para la tarea anterior usaría Perl. YMMV.

Varias razones para como Perl:

de gran alcance de una sola línea - si usted tiene que hacer un muy rápido, de una sola vez trabajo, Perl ofrece algunas realmente grandes atajos. Ver perlrun -n para un ejemplo

Lenguaje multi-paradigma - Perl tiene soporte para metodologías de programación imperativas, funcionales y orientadas a objetos.

Sigils: los caracteres de puntuación principales en variables como $foo o @bar. Son un poco como la notación húngara sin ser tan molesto.

Moose: un nuevo e increíble sistema OOP que proporciona nuevas y poderosas técnicas OO para la composición y reutilización de códigos.

Strictures - use strict pragma atrapa muchos errores que otros lenguajes dinámicos pasan por alto en tiempo de compilación. Lo extraño terriblemente cuando uso Python o PHP.

Autodisciplina - Perl te da la libertad de escribir y hacer lo que quieras, cuando quieras. Esto significa que debes aprender a escribir código limpio o te dolerá. Afortunadamente, hay herramientas para ayudar a un principiante. Perl::Critic realiza un análisis de código similar a una pelusa para las mejores prácticas.

-2

tratar Nagios Log Monitoring

La razón de esta herramienta es la mejor para su finalidad es la siguiente:

que no requiere la instalación de paquetes extranjeros. Lo que significa que no es necesario instalar ninguna dependencia de Perl o paquetes tontos que puedan ponerlo nervioso.

Hay poca o ninguna curva de aprendizaje. No necesita aprender ningún lenguaje de programación para usarlo. Todo lo que necesita hacer es saber exactamente qué quiere hacer con los registros que tiene en mente y leer el pdf que viene con la herramienta.

Si el registro que desea analizar se encuentra en un formato syslog, puede utilizar un comando como este:

./NagiosLogMonitor 10.20.40.50:5444 logrobot autofig /opt/jboss/server.log 60m 'INFO' '.' 1 2 -demostrar

Incluso si su registro no está en un formato reconocido, todavía puede ser controlada de manera eficiente con el siguiente comando:

./NagiosLogMonitor 10.20.40.50:5444 logrobot autonda/opt/jboss /server.log 60m 'INFO' '.' 1 2 jbosslogs -how

Para analizar un registro de cadenas específicas, reemplace la cadena 'INFO' con los patrones que desea ver en el registro. Si desea buscar varios patrones, especifíquelos como este 'INFO | ERROR | fatal'.

Si la eficiencia y la simplicidad (y las instalaciones seguras) son importantes para usted, esta herramienta Nagios es el camino a seguir.

+0

Si bien este enlace puede responder a la pregunta, es mejor para incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. – Serlite

+0

publicación actualizada ... –

Cuestiones relacionadas