(+34) 673 566 782 - (+34) 960 653 052 formacion@imaginagroup.com

Aprende ELK, Elasticsearch, Logstash y Kibana – Tutorial de Primeros Pasos

¿Qué es ELK?

Cuando estás desarrollando en un servidor puedes tener una gran cantidad de logs, y un problema al que estos pueden ser muy diferentes entre sí, ya que cada servicio puede tener su propio formato de log. Para solucionar esto se utilizan los tres componentes, al tener todos los logs de una forma unificada y fácil de manipular.

Cada componente se encarga de una actividad:

  • Elasticsearch: Es una base de datos para almacenar los logs que queremos revisar, permitiendo una gran variedad de consultas diferentes. Está construida en Java lo que permite que se utilice en diferentes plataformas.
  • Losgstash: Es procesador de datos de código abierto que procesa los logs, los transforma al formato que queramos y se los envía a Elasticsearch para que podamos visualizarlos.
  • Kibana: Genera un interfaz web para buscar y visualizar los logs, generando las búsquedas y visualizaciones a través de los datos de Elasticsearch

Instalación

Antes de nada debemos tener el JDK de Java, que descargamos de aquí, una vez lo hayamos instalado comprobamos que todo haya ido bien en la instalación, utilizaremos el comando:

java -version

Que nos devolverá algo como esto:

java version "1.8.0_201"

Java(TM) SE Runtime Environment (build 1.8.0_201-b09)

Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)

Ahora ya podemos descargamos de aquí los archivos Elasticsearch, Kibana y Logstash. Luego los descomprimimos donde queramos.

También nos vamos a descargar un servidor apache del cual recibir los logs, en nuestro caso será Xampp. Esto es tan fácil como descargarlo y utilizar el instalador.

Para iniciar Elasticsearch tenemos que iniciar la consola en el directorio en el que lo hayamos descomprimido y utilizar el comando:

bin\elasticsearch

Y para iniciar Kibana hay que realizar el mismo procedimiento, abrir otra consola en el directorio en el que fue descomprimido y ejecutar el comando:

bin\kibana

Ahora podemos acceder a http://localhost:5601 para ver Kibana, pero nos dirá que no tiene ningún dato, así que ahora es turno de configurar Logstash.

Configurar Logstash

Logstash necesita que configuremos que tipo de datos, así como las direcciones de entrada y salida.

Para esto crearemos un archivo llamado logstash.conf dentro del directorio descomprimido de Logstash.

En este archivo añadimos el siguiente código:

input {

file {

  path => "/xampp/apache/logs/access.log"

  type => "apache_access"

  start_position => "beginning"

}

file {

  path => "/xampp/apache/logs/error.log"

  type => "apache_error"

  start_position => "beginning"

}

}

filter {

  if [type] in [ "apache" , "apache_access" , "apache-access" ]  {

     grok {

        match => [

        "message" , "%{COMBINEDAPACHELOG}+%{GREEDYDATA:extra_fields}",

        "message" , "%{COMMONAPACHELOG}+%{GREEDYDATA:extra_fields}"

        ]

        overwrite => [ "message" ]

     }

     mutate {

        convert => ["response", "integer"]

        convert => ["bytes", "integer"]

        convert => ["responsetime", "float"]

     }

     geoip {

        source => "clientip"

        target => "geoip"

        add_tag => [ "apache-geoip" ]

     }

     date {

        match => [ "timestamp" , "dd/MMM/YYYY:HH:mm:ss Z" ]

        remove_field => [ "timestamp" ]

     }

     useragent {

        source => "agent"

     }

  }

  if [type] in ["apache_error","apache-error"] {

     grok {

        match => ["message", "\[%{WORD:dayname} %{WORD:month} %{DATA:day} %{DATA:hour}:%{DATA:minute}:%{DATA:second} %{YEAR:year}\] \[%{NOTSPACE:loglevel}\] (?:\[client %{IPORHOST:clientip}\] ){0,1}%{GREEDYDATA:message}"]

        overwrite => [ "message" ]

     }

     mutate

     {

        add_field =>

        {

           "time_stamp" => "%{day}/%{month}/%{year}:%{hour}:%{minute}:%{second}"

        }

     }

     date {

        match => ["time_stamp", "dd/MMM/YYYY:HH:mm:ss"]

        remove_field => [ "time_stamp","day","dayname","month","hour","minute","second","year"]

     }

  }

}

output {

 elasticsearch {

   hosts => "localhost:9200"

   index => "apache"

 }

 stdout{codec => rubydebug}

}


Este código está dividido en tres partes, la ruta de entrada de los archivos, que es el apartado input, con las rutas de los logs de petición y error de Apache en Xampp.

La segunda parte consiste en el filtrado por tipo de archivo y el formateo de datos para poderlos leer fácilmente.

Y la última corresponde a la salida de los datos, que en este caso es Elasticsearch, pasandole el puerto en el que se ejecuta y el nombre de los datos que le pasamos.

Una vez hecho esto ya podemos abrir otra consola en la carpeta en la que descomprimimos Logstash y utilizamos el comando:

bin\logstash -f logstash.conf -t

Con este comando comprobamos que la configuración que hemos realizado no contenga ningún fallo sintáctico, si es así nos devolverá un mensaje como este indicando que todo está bien:

[2019-05-02T13:18:31,637][INFO ][logstash.runner          ] Using config.test_and_exit mode. Config Validation Result: OK. Exiting Logstash

Ahora que hemos comprobado que la configuración no tiene ningún fallo ya solo nos queda iniciar Logstash con el comando:

bin\logstash -f logstash.conf

Interfaz Kibana

A continuación, con todo preparado ya volvemos a la url de Kibana, http://localhost:5601, y nos preguntara qué datos queremos filtrar, dándole como valor el index que le pasamos en la configuración de Logstash, en nuestro caso apache:

Kibana nos pregunta qué datos queremos filtrar

 

Después elegimos el filtro de tiempo por el que queremos que se ordenen y ya tendríamos acceso a nuestros logs en Kibana:

Elegimos el filtro de tiempo por el que queremos que se ordenen nuestros logs en Kibana

 

Ahora nos aparecerán todos los datos a los que podríamos acceder en nuestros logs. Así que le daremos al botón Discover para ver el aspecto de nuestros logs:

Si pulsamos el botón Discover podemos ver el aspecto de nuestros logs

 

Ahora intentaremos realizar una gráfica según si son error o petición, por lo que le daremos al botón Visualice:

Si pulsamos el botón Visualice podemos ver una gráfica de errores o peticiones

 

Aquí, elegimos que tipo de visualización queremos que sea, eligiendo una de Barras Verticales:

Elegimos en las barras verticales el tipo de visualización

 

Después  le indicamos que el eje X tiene que ser type.keyword y añadimos una separación por tiempo:

Indicamos que el eje X tiene que ser type.keyword y añadimos una separación por tiempo

 

Ahora tenemos que hacer que los cambios se trasladen al gráfico y después guardarlo con Save:

Los cambios se trasladan al gráfico y guardamos con pulsando el botón Save

 

Ya tenemos nuestro primer gráfico realizado utilizando Elasticsearch, Logstash y Kibana. Para acabar lo importamos a una herramienta para poder todos nuestros gráficos en conjunto. Para esto utilizamos Dashboard:

Nuestro primer gráfico realizado utilizando Elasticsearch, Logstash y Kibana

Le indicamos Create a new Dashboard y luego pulsamos add para indicarle el gráfico que hemos creado. Después de configurarlo tenemos que guardas el nuevo Dashboard.

Con esto hemos conseguido crear nuestra primera interacción con ELK, Elasticsearch, Logstash y Kibana.

Uso de cookies: Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies

ACEPTAR
Aviso de cookies
CREATED