Alternativas a Splunk: Logstash

Hoy vamos a hablar de una herramienta gratuita que puede servirnos de alternativa al conocido Splunk para realizar análisis de logs de forma rápida y sencilla.

Logstash es una aplicación de Java que podemos lanzar en cualquier equipo con una versión actual de Java, y que gracias al servidor de búsqueda ElasticSearch que incorpora, puede ampliarse y desplegarse en infraestructuras complejas con múltiples nodos trabajando en paralelo.

Para mostrar su funcionamiento no necesitamos hacer un despliegue tan complejo, y vamos a aprovechar la funcionalidad autocontenida en el paquete descargable, para analizar un conjunto de ficheros de Apache en busca de patrones sospechosos.

Tras descargar la aplicación de la página oficial, debemos empezar por crear un fichero de configuración para indicar a la aplicación qué debemos leer y de donde.

El fichero de configuración que vamos a utilizar tiene este formato:

input {
  file {
	type => "apache-combined"
	start_position => "beginning"
	path => [ "/home/jvila/GdI/server.access.log*" ]
  }
  file {
	type => "apache-common"
	start_position => "beginning"
	path => [ "/home/jvila/GdI/server.access.log*" ]
  }
}

filter {
  if [type] == "apache-combined" { grok { match => { "message" => "%{COMBINEDAPACHELOG}" } } }
  if [type] == "apache-common" { grok { match => { "message" => "%{COMMONAPACHELOG}" } } }
  # More info on patterns: https://github.com/logstash/logstash/tree/master/patterns

  date {
  	match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
  	locale => "en"
	# Apache2 time format: "16/Jan/2014:13:30:08 +0100"
       # locale is important to correct month and timezone parsing
  }
}

output {
  elasticsearch { embedded => true }
}

Como podemos ver, tiene 3 partes principales. En la primera se definen las entradas que tendrá la aplicación, y del tipo que serán. A continuación se aplican filtros para identificar los campos que se van a leer, y finalmente se indica donde se envía la salida de la aplicación.

En la documentación oficial podemos ver de forma detallada qué hace cada una de las opciones disponibles, pero vamos a mencionar las que aparecen en el fichero de configuración mostrado para comprender qué va a hacer la aplicación:

En el apartado input, indicamos que vamos a procesar un fichero o conjunto de ficheros(file), ubicado en la ruta absoluta definida por path. Se va a empezar a procesar por el principio de los ficheros (start_position), y clasifican los logs leídos de dichos ficheros como de tipo apache-combined (type).

Por lo que respecta al apartado filter, definimos que si el tipo de logs es apache-combined, se procese cada entrada de log siguiendo el formato “%{COMBINEDAPACHELOG}”. Este formato está definido con el lenguaje Grok (más información y ejemplos de filtros disponibles).

Además, se especifica que la fecha está definida, en idioma inglés (locale), en el campo timestamp de la línea procesada y que va a tener el formato indicado (o formatos, si añadimos más parámetros).

Finalmente, en el apartado output, le indicamos donde queremos que vuelque la información. En nuestro caso, vamos a utilizar el servidor elasticsearch embebido en el propio logstash.

Tras esto, ya estamos preparados para lanzar la aplicación, con una línea como la siguiente:

java -jar logstash-1.3.3-flatjar.jar agent -f logstash.conf -- web

Con el parámetro “-f” indicamos el fichero de configuración que vamos a utilizar, mientras que el último parámetro indica a la aplicación que levante el frontend kibana, que nos mostrará la información de los logs.

ACTUALIZACIÓN:

Recientemente se ha publicado una nueva versión de logstash, la 1.4.0, que trae muchas mejoras, entre ellas un cambio en la forma de lanzar la aplicación.

Ahora se descarga un fichero tar.gz, que debemos descomprimir, y acceder a la carpeta que genera. Desde ahí, primero lanzamos el proceso del agente:

$ bin/logstash -f logstash.conf

Y a continuación el proceso que ejecuta la web:

$ bin/logstash web

Una vez iniciada la aplicación, y tras unos segundos (o minutos, dependiendo de la velocidad del equipo), podremos acceder con el navegador web al puerto 9292 de nuestra interfaz local, y aparecerá una ventana similar a la siguiente:

Al pulsar en el enlace “(Logstash Dashboard)” en la parte inferior del panel derecho, accedemos a la interfaz donde se muestra toda la información recopilada en los logs:

Se aprecia en primer lugar la caja de búsqueda. A continuación quedan el conjunto de filtros que están aplicados, y un gráfico con la distribución temporal de los eventos (que permite seleccionar un área para hacer zoom en ella), y finalmente el detalle de todos los eventos que cumplen los criterios elegidos.

En este último panel diferenciamos dos columnas. La de la izquierda, con un listado de los campos que tienen nuestros eventos, que cumple dos funciones principales: podemos activar la casilla al lado de cada campo para que los eventos de la parte derecha se ordenen por dicho(s) campo(s), y podemos ver los valores más comunes que toma un campo y filtrar por cada uno de estos valores pulsando sobre ellos.

La columna de la derecha contiene el listado detallado de todos los eventos detectados y los campos que los componen. Además de poder ordenarlos según los valores de la columna izquierda, podemos también pulsar los botones que tiene cada campo para filtrar por los eventos con un valor igual (o diferente) al seleccionado en un determinado campo.

Esperamos que os haya gustado la herramienta y os animéis a usarla y contarnos si os gusta o no, y alternativas que conozcáis.

Comments

  1. Buen aporte. Por el momento no me planteo utilizarla, pero me ha gustado la interfaz y posibilidades que ofrece. Saludos.