lnav: vea y analice los registros de Apache desde una terminal de Linux


Hace menos de dos semanas, el ataque de ransomware Wannacry comprometió miles de computadoras, causando pérdidas considerables tanto a las grandes empresas como a las personas. Eso, junto con otras vulnerabilidades generalizadas encontradas en los últimos años (como el error Shellshock), resalta la importancia de mantenerse al tanto de sus sistemas de misión crítica.

Aunque las vulnerabilidades a menudo se dirigen a un sistema operativo o componente de software específico, examinar el tráfico que entra y sale de su red puede ser de gran ayuda para proteger los activos de los que es responsable.

Como estoy seguro de que ya sabe, los registros del sistema son el primer lugar donde debemos buscar esta información. Para facilitar esta tarea, en este artículo explicaremos cómo instalar y usar lnav, un visor avanzado de archivos de registro. Con lnav, podrá ver varios tipos de registros simultáneamente, navegar por el archivo usando teclas de acceso rápido y generar un histograma resumido de accesos y errores. ¡Así que sigue leyendo!

Instalación y ejecución de lnav en Linux

Para instalar lnav, use el sistema de administración de paquetes de su distribución.

# aptitude install lnav          [Debian and derivatives]
# yum install epel-release lnav  [CentOS 7 and similar]

Una vez que se complete la instalación, inicie lnav seguido de la ruta absoluta al directorio donde se encuentran los registros que se examinarán. Dado que normalmente será /var/log , hagamos lo siguiente:

# lnav /var/log/httpd

para inspeccionar los registros del servidor web Apache en CentOS 7:

Examinemos brevemente el resultado que se muestra en la imagen anterior:

  • La esquina superior derecha muestra los archivos que se están inspeccionando actualmente (access_log-20170519 y access_log). A medida que se desplaza hacia abajo o hacia arriba, notará que los nombres de los archivos pueden cambiar a medida que avanza de uno a otro.
  • Las respuestas HTTP 40x (por ejemplo, No encontrado o Prohibido) se muestran en negrita, mientras que las respuestas 20x se muestran en texto normal.
  • Las direcciones IP aparecen en negrita verde.

Eso ciertamente se ve bien, ¿no? Pero profundicemos un poco más ahora, y veremos que lnav proporciona mucho más que una salida de colores bonitos.

Si tiene curiosidad por saber por qué no se muestran los registros de errores, encontrará la respuesta más adelante en este artículo. ¡Así que sigue leyendo!

Modificar la salida con opciones y teclas de acceso rápido

Antes de continuar, enumeremos algunas teclas de acceso rápido que nos permitirán movernos a través de la salida de lnav y las vistas disponibles más fácilmente:

  • e o E para saltar al mensaje de error siguiente/anterior.
  • w o W para saltar al mensaje de advertencia siguiente/anterior.
  • b o Retroceso para ir a la página anterior.
  • Espacio para pasar a la página siguiente.
  • g o G para ir a la parte superior/inferior de la vista actual.

Cuando se rotan los registros, los archivos antiguos pueden comprimirse (o no) según la configuración especificada en los archivos de configuración de logrotate. Para incluir archivos comprimidos en la salida, inicie lnav de la siguiente manera:

# lnav -r /var/log/httpd

Si desea ver más de cerca la forma en que opera lnav, puede iniciar el programa con la opción -d seguida de un nombre de archivo donde se escribirá la información de depuración, así:

# lnav /var/log/httpd -d lnav.txt

En este ejemplo, la información de depuración que se genera cuando se inicia lnav se escribirá en un archivo llamado lnav.txt dentro del directorio de trabajo actual.

Las primeras líneas de ese archivo se muestran en la siguiente imagen:

El texto resaltado indica que lnav cargó el archivo de formatos predeterminados y, más específicamente, el formato access_log para analizar el registro de acceso de Apache. Además, lnav permite analizar cada línea de salida para que la salida sea más fácil de visualizar y comprender.

Para utilizar esta función, inicie el programa y elija la línea que desea analizar. La línea seleccionada es siempre la que está en la parte superior de la ventana. Luego presione p y debería ver el siguiente resultado:

Para volver al modo normal, presione p nuevamente.

Ahora, si desea ver un resumen de los registros por fecha y hora, presione i . Por ejemplo, el texto resaltado indica que el lunes 10 de abril, entre las 10 y las 11 p. M., Hubo 37 solicitudes HTTP y 14 generaron errores.

Una vez que haya identificado un problema potencial basado en el histograma como se muestra arriba, puede presionar i para salir de la vista y examinarlo con más detalle usando el analizador como se explicó anteriormente. O también puede utilizar las capacidades integradas de SQL escribiendo un punto y coma y escribiendo una consulta estándar. Por ejemplo, haz lo siguiente:

;.schema

para ver las tablas disponibles en el esquema de la base de datos. Después de identificar la tabla correcta (access_log en nuestro caso), presionemos q y luego usemos la siguiente consulta para devolver toda la información disponible sobre las solicitudes provenientes de 195.154.230.31:

;SELECT * FROM access_log WHERE c_ip='195.154.230.31'

Tenga en cuenta que también podríamos haber filtrado los resultados por log_time. El punto es, agregue un poco de SQL y el cielo es el límite en cuanto a lo que puede hacer con lnav.

Formatos de registro predeterminados de Apache

Muchos formatos de registro se cargan de forma predeterminada con lnav y, por lo tanto, se analizan sin nuestra intervención. Puede ver la lista en la sección Formatos de registro en la documentación oficial.

Los formatos predeterminados se especifican en ~/.lnav/format/default/default-formats.json.sample, y se pueden agregar otros formatos ~/.lnav/utilizando la extensión .json .

Sin embargo, la edición de estos archivos requiere cierto grado de familiaridad con JSON (Javascript Object Notation) y con la biblioteca PCRE (Perl-Compatible Regular Expressions).

Entonces, ¿por qué lnav no mostró los archivos de registro de errores de Apache? La razón es que esos registros no coinciden con ninguna expresión regular en los archivos de formato existentes y, por lo tanto, se tratan como archivos de texto normales (es decir, archivos sin un formato de registro determinado).

Como se mencionó anteriormente, puede crear sus propios formatos una vez que esté al menos algo familiarizado con JSON y PCRE. Esto puede resultar útil, por ejemplo, si ha definido registros de Apache personalizados.

Aunque usamos el registro de acceso de Apache para demostrar cómo usar lnav, tenga en cuenta que hay varios otros tipos de registros que se pueden ver y analizar con esta herramienta. Si la herramienta no reconoce un registro específico, puede crear formatos adicionales e instalarlos siguiendo las indicaciones proporcionadas aquí.

¿Tiene alguna pregunta o comentario sobre este artículo? Como siempre, no dude en hacérnoslo saber mediante el formulario a continuación. ¡Esperamos con interés escuchar de usted!