Introducción a Kibana

3
40020

En este tutorial veremos una pequeña introducción a Kibana, una herramienta para visualizar y explorar los datos que se encuentran indexados en ElasticSearch.

Índice de contenidos

1. Introducción

¿Qué es kibana?

Kibana es una herramienta open-source perteneciente a Elastic, que nos permite visualizar y explorar datos que se encuentran indexados en ElasticSearch, es decir, un plugin de ElasticSearch. Kibana también es conocido por el stack ELK:

  • Elasticsearch
  • Logstash
  • Kibana

Antes de seguir con el tutorial os recomendo que veáis primero los tutoriales de Elasticsearch y Logstash realizados por Daniel Díaz Suárez y Rodrigo de Blas García.

2. Motivación

El stack ELK (Elasticsearch , Logstash y Kibana) es una herramienta ideal para la agregación de logs, visualización y análisis, aunque no está diseñado específicamente para este propósito.

Individualmente, la instalación de Elasticsearch, Logstash y Kibana y configurarlos para que se comuniquen entre sí, no es una tarea fácil.

Afortunadamente, con Docker y Docker Compose podemos crear nuestros contenedores con el stack ELK de forma fácil

3. Entorno

El tutorial está escrito usando el siguiente entorno:

  • Hardware: MacBook Pro 15′ (2.5 GHz Intel Core i7, 16GB DDR3 SDRAM)
  • Sistema Operativo: Mac OS X Yosomite 10.10.5
  • NVIDIA GeForce GT 750M 2048 MB
  • Docker 1.9.0
  • Docker Compose 1.5.0
  • Kibana 4.1.2
  • Logstash 2.0.0
  • Elasticsearch 1.7.3
  • curl 7.43.0

4. Creación del entorno

Como se ha comentado anteriomente vamos a crear nuestro entorno con Docker, para ello vamos a crear nuestro docker-compose.yml donde iremos creando y configurando las distintas herramientas que forman el stack ELK.

Todas la imagenes que vamos usar son las oficiales que nos proporciona Docker Hub

docker-compose.yml
elasticsearch:
  image: elasticsearch:1.7.3
  command: elasticsearch  -Des.network.host=0.0.0.0
  ports:
    - "9200:9200"

logstash:
  image: logstash:2.0.0
  volumes:
    - ./logstash/conf:/conf
  links:
    - elasticsearch:elasticsearch
  command: logstash -f /conf/logspout.conf
	expose:
		- "5000"
		- "5000/udp"

kibana:
  image: kibana:4.1.2
  links:
    - elasticsearch
	command: kibana -q
  ports:
    - "5601:5601"

logspout.conf
input {
  udp {
    port  => 5000
  }
}

output {
	elasticsearch {
    hosts => "elasticsearch:9200"
    ssl => false
  }
}

Vamos analizar este docker-compose.yml para entender la configuración de las distintas herramientas (ELK)

Elasticsearch

  • Arrancamos elasticsearch con la opción de aceptar peticiones desde cualquier IP.
  • Exponemos el puerto 9200 para recibir registros desde logstash y enviar registros a kibana.

Logstash

  • Creamos una unidad para poner nuestra configuración.
  • Creamos un link para poder ver el contenedor de elasticsearch.
  • Arracamos logstash con la configuración del fichero logspout.conf.
  • Exponemos el puerto 5000 tanto tcp y udp, para recibir los registro.

kibana

  • Creamos un link para poder ver el contenedor de elasticsearch.
  • Arracamos kibana en modo logging off.
  • Exponemos el puerto 5601 para visualizar la herramienta por vía web.

La configuración de kibana es muy simple, solo indicamos donde se encuentra elasticsearch, donde tiene más configuración logstash y donde tenemos que definir los inputs y filters. Para este ejemplo vamos a escuchar todas las peticiones por el puerto 5000 por UDP.

Para poder ver las funcionalidades de Kibana tenemos que alimentar nuestro elasticsearch. Para ello vamos a usar los logs que genera Docker cuando arrancamos un contenedor, es decir, coger todo lo que se escribe en stdout y stderr y se lo enviamos a logstash.

Click en la imagen para ampliar:

Ciclo de vida ELK

Para poder enviar todo lo que se escriba por stdout y stderr de los contenedores de Docker tenemos que añadir a nuestro docker-compose el contenedor de Logspout que pertenece gliderlabs, en concreto el módulo logspout-logstash que, de forma automática, se encargará de enviar todo lo que ocurre en los contenedores a logstash.

docker-compose.yml
logspout:
  build: logspout/
  links:
    - logstash
  volumes:
   - /var/run/docker.sock:/tmp/docker.sock
  environment:
    - ROUTE_URIS=logstash://logstash:5000

Con esta configuración ya tenemos el stack ELK configurado, lo siguiente es alimentar elasticsearch para poder usar Kibana y ver las principales funcionalidades que nos ofrece.

Arrancamos nuestro stack (ELK) con el siguiente comando.

docker-compose up

Click en la imagen para ampliar:

Docker Compose ELK

Abrimos otro terminal para crear contenedores para que escriba registros en elasticsearch. Con el siguiente comando ejecutamos un contenedor que pinta por consola hello world!

docker run  --rm  --name test --hostname=test debian:jessie  bash -c 'for i in {0..5}; do echo $i hello world!; done'

Volvemos a ejecutar el anterior comando cambiando el name, hostname y el mensaje.

docker run  --rm  --name prueba --hostname=prueba debian:jessie  bash -c 'for i in {0..5}; do echo $i Hola nundo!; done'

Con esto ya estemos un conjunto de datos para poder analizarlo y visualizarlo con Kibana

open http://`docker-machine ip dev`:5601

Donde «dev» es el nombre de la máquina virtual donde se está ejecutando Docker.

5. Ejemplo práctico

Antes de empezar a usar la herramienta vamos a describir las distintas secciones que forman la interfaz:

  • Discover: Pantalla que nos permite filtrar y buscar registros en un intervalo específico.
  • Visualize: Pantalla donde se pueden crear, modificar y ver sus propias visualizaciones personalizadas(Gráficos, tablas, …).
  • Dashboard: Pantalla donde se pueden crear, modificar y ver sus propios cuadros de mando personalizados .
  • Settings: Pantalla que permite cambiar la configuración por defecto o patrones de índice.

Lo primero que tenemos que hacer cuando entramos en Kibana es definir el índice que vamos a usar para visualizar los datos. En este caso solo tenemos el índice logstash y solo tenemos un campo que es timestamp. Click en la imagen para ampliar

Definición de índice

Lo siguiente es visitar la pantalla de Discover para ver los registro que tenemos guardados en elasticsearch. Click en la imagen para ampliar:

Discover

La pantalla Discover esta compuesta por:

  • Search Bar: Utilice esta opción para buscar campos específicos y/o los mensajes completos.
  • Time Filter: Arriba a la derecha (icono del reloj). Utilice esta opción para filtrar registros en base a varios intervalos de tiempo relativos y absolutos.
  • Field Selector: Izquierda, bajo la barra de búsqueda. Seleccione los campos a modificar que se mostrarán en la vista Anotaciones.
  • Date Histogram: Gráfico de barra debajo de la barra de búsqueda. Por defecto, muestra el recuento de todos los registros, en función del tiempo (eje x), acompañado por el filtro de búsqueda y el tiempo. Puede hacer clic en las barras, o hacer clic y arrastrar para reducir el filtro de tiempo.
  • Log View: Parte inferior derecha. Utilice esta opción para ver los mensajes de registro individuales, y mostrar los datos de registro filtrados por los campos. Si no se seleccionan los campos, se muestran los mensajes de registro enteras.

Vamos a buscar los registros que en el campo message tengan parte el texto ‘hola mundo’ con la siguiente expresión:

message: "Hola"

Click en la imagen para ampliar:

Búsqueda

El número de registros que han encontrado son 6, que concide con el script que hemos ejecutado anteriormente.

En las otras 2 pantallas (Visualize y Dashboard) os animo a que creéis vustras propias gráficas y cuadros de mandos.

6. Conclusiones

Como hemos visto utilizando el stack ELK, tenemos una manera de recoger (Logstash), guardar y de buscar (Elasticsearch), y visualizar y analizar (Kibana).

Un caso muy útil sería en la explotación de los logs de nuestras aplicaciones.

Espero que el tutorial os haya animado a usar (o al menos probar) este stack de tecnologías.

Puedes descargar el ejemplo de este tutorial desde aquí

7. Referencias

3 COMENTARIOS

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad