Búsqueda de sitios web

lnav: observe 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 grandes empresas como a individuos. Esto, junto con otras vulnerabilidades generalizadas encontradas en los últimos años (como el error Shellshock), resalta la importancia de estar al tanto de sus sistemas de misión crítica.

Aunque las vulnerabilidades suelen apuntar 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.

Lectura sugerida: 4 buenas herramientas de administración y monitoreo de registros de código abierto para Linux

Como seguro que ya sabes, 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 utilizar lnav, un visor avanzado de archivos de registro. Con lnav podrás 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, utilice el sistema de gestió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:

lnav /var/log/httpd

Para inspeccionar los registros del servidor web Apache en un 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, observará que los nombres de los archivos pueden cambiar a medida que pasa de uno a otro.
  • Las respuestas 40x HTTP (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 con bonitos colores.

Si tiene curiosidad sobre 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 por 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 anterior o siguiente.
  • b o Retroceso para pasar a la página anterior.
  • Espacio para pasar a la página siguiente.
  • g o G para moverse 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 observar 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 predeterminado 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.

Lectura sugerida: Analizador de registros del servidor web GoAccess (Apache y Nginx en tiempo real)

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 resultaron en errores.

Una vez que haya identificado un problema potencial según 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 SQL integradas escribiendo un punto y coma y escribiendo una consulta estándar. Por ejemplo, haga:

;.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/formats/default/default-formats.json.sample, y se pueden agregar otros ~/.lnav/formats usando el < extensión.json.

Sin embargo, editar 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 muestra 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).

Lectura sugerida: Cómo monitorear la carga del servidor web Apache y las estadísticas de la página

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.

Resumen

Aunque utilizamos el registro de acceso de Apache para demostrar cómo usar lnav, tenga en cuenta que existen 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 aquí proporcionadas.

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