Búsqueda y ordenación básica en los logs de Linux / Unix

En este tutorial trataré la búsqueda y ordenación de los logs generados en Linux o Unix, lo que es muy útil para reunir información interesante sobre nuestro sistema. Empezaré mostrando algunos ejemplos del uso de grep.

Qué es Grep

Grep es una herramienta de línea de órdenes que permite buscar patrones en un flujo de texto dado y viene incluída en la mayoría de distribuciones de Unix o Linux. Por ejemplo, para buscar la cadena ‘hola’ en el fichero prueba.txt:

# cat prueba.txt | grep 'hola'

Las líneas que contengan el patrón buscado aparecerán como salida de la orden introducida.

Ejemplos de uso

Para usar grep para la búsqueda en los registros nos conviene ver antes con qué vamos a trabajar. Por ejemplo, el contenido del log referrer es algo como esto:

…..
http://www.improvedsource.com/view.php/GUI/1/ -> /search/images/search.gif
http://www.improvedsource.com/view.php/GUI/1/ -> /search/results.php
http://www.improvedsource.com/view.php/GUI/1/ -> /search/images/point.gif
http://www.improvedsource.com/view.php/GUI/1/ -> /search/images/seperator.gif
http://www.improvedsource.com/view.php/GUI/1/ -> /view.php/GUI/1/images/bg.jpg – -> /view.php/Software-Bugs/12/
http://www.improvedsource.com/view.php/GUI/1/ -> /view.php/GUI/1/images/bg.jpg
http://www.improvedsource.com/view.php/GUI/1/ -> /view.php/GUI/1/images/bg.jpg
http://www.improvedsource.com/view.php/GUI/1/ -> /view.php/GUI/1/images/bg.jpg
– -> /rss.php/latest.rdf
– -> /rss.php/latest.rdf
http://www.google.com/search?hl=en&q=web+form+services&btnG=Google+Search
-> /view.php/Web-Forms/10/
….

Como puede verse, las referencias relacionadas con Google incluyen una cadena de búsqueda. Esto nos puede interesar especialmente para ver qué busca la gente que llega a nuestra página. Cuando sólo hay unas pocas línas en el fichero, no tiene mucho sentido, pero con ficheros abarrotados de direcciones, podemos ver de inmediato la utilidad de grep; por ejemplo, seleccionando las cadenas que contengan “google.com”:

# cat referrer_log* | grep 'google.com'

Esto mostraría todas las entradas donde aparezca google.com. Con esta simple orden hemos quitado de nuestra vista un montón de líneas que no nos interesa para este ejemplo. Aún así, como lo que queremos saber es qué busca la gente, podemos acercarnos más a nuestro objetivo complicando algo más la orden. Podemos indicar que las líneas que se repitan aparezcan sólo una vez y ordenar por número de apariciones. Eso se puede hacer así:

# cat referrer_log* | grep 'google.com' | sort | uniq -ic | sort -n

Así, el conjunto de cadenas que contienen “google.com” se envían mediante tuberías a través de distintas herramientas. En primer lugar, a la orden sort (que ordena los resultados). Hecho esto, enviamos la salida a la orden uniq, que filtra buscando el número de ocurrencias de una misma entrada y muestra las líneas sin repetir (se muestra el número de veces que aparecen). Finalmente, se ordena en función de este número, usando sort -n. Esto funciona porque uniq añade el nº de ocurrencias al inicio de la línea en cuestión; sin embargo, para que uniq cuente fiablemente todas las líneas repetidas, éstas deben estar agrupadas, de ahí que se envíen a sort antes. Ahora podríamos querer extraer sólo una parte de la correspondiente línea (esto es un poco más adelantado y requiere algún conocimiento de expresiones regulares). En el ejemplo de Google podríamos ejecutar:

# cat referrer_log* | grep 'google.com' | grep -ohP 'q=(.+?)&' | sort | uniq -ic | sort -n

Fíjate en la orden grep -ohP que se ha añadido. La opción -o hace que sólo se muestre la parte de texto que coincide con la expresión regular en vez de toda la línea, así que en este ejemplo, la expresión regular ‘q=(.+?)&’ selecciona la cadena de búsqueda en Google. El resultado de ejecutar la línea anterior, será algo como esto:

….
3 q=linux+desktop+weather&
3 q=reduce+boottime+linux&
3 q=sysbotz&
4 q=coolest+linux+desktop&
4 q=debian+linux+boot+time+load+kernel&
4 q=ubuntu+php+5.2&
7 q=cool+linux+desktops&
……

Referencia: http://www.improvedsource.com/view.php/Linux-System/19/

También ha sido de utilidad bucear por forosweb, que tiene una cantidad ingente de información sobre todo tipo de asuntos relacionados con la informática.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: