Montar un laboratorio de pruebas on-premise (en local) con Elastic Search y Kibana, para tratamiento de datos de todo tipo (geoespaciales, log, syslog, eventos, …). Realizaremos el despliegue usando Docker. Realizamos el despliegue tanto en Linux como en Windows con Docker Desktop. Cargamos algunos datos de prueba para hacer filtros.
- Requisitos para desplegar laboratorio de pruebas on-premise de Elastick Search y Kibana con Docker.
- Descargar repositorio GitHub de elastic-workshop e iniciar docker.
- Iniciando Elasticksearch y Kibana desde Docker Desktop de Windows.
Requisitos para desplegar laboratorio de pruebas on-premise de Elastick Search y Kibana con Docker
En primer lugar necesitaremos disponer de un equipo con Docker instalado, en el siguiente artículo explicamos cómo instalar Docker en Linux Ubuntu:
Necesitaremos Docker Compose, que podremos instalar con:
1 |
sudo apt-get install docker-compose |
Desplegaremos el laboratorio Elastic Workshop en una máquina con Linux Ubuntu, sin modo gráfico. Por supuesto, puede desplegarse en casi cualquier distribución de Linux y de Windows.
Descargar repositorio GitHub de elastic-workshop e iniciar docker
El repositorio de Elastic Workshop se encuentra en:
Desde la consola de Linux, descargaremos el repositorio de Elastic Workshop de GitHub, primero accederemos a la carpeta /opt:
1 |
mkdir /opt |
Y descargaremos (clonaremos) el repositorio de GitHub, con el comando:
1 |
sudo git clone https://github.com/jsanz/elastic-workshop |
Si no tenemos el comando git lo instalaremos con: apt install git
Accederemos a la carpeta de elastic-workshop:
1 |
cd /opt/elastic-workshop |
Y entraremos en la subcarpeta lab:
1 |
cd lab |
Ejecutaremos el siguiente comando para desplegar el Docker:
1 |
sudo docker-compose build |
Lanzaremos los servicios con el comando:
1 |
sudo docker-compose up -d |
Establecemos los logs de Kibana con:
1 |
docker-compose logs -f kibana |
Lamentablemente, tanto en equipo Linux como en equipo Windows con Docker Desktop, nos devuelve un error con los certificados y no inicia Elastic Search ni Kibana, por lo que este repositorio no es funcional:
Starting lab_setup_1 … error
ERROR: for lab_setup_1 Cannot start service setup: error while creating mount source path ‘/opt/elastic-workshop/lab/certs’: mkdir /opt/elastic-workshop: read-only file system
ERROR: for setup Cannot start service setup: error while creating mount source path ‘/opt/elastic-workshop/lab/certs’: mkdir /opt/elastic-workshop: read-only file system
ERROR: Encountered errors while bringing up the project.
Iniciando Elasticksearch y Kibana desde Docker Desktop de Windows
Tras el fracaso con el intento de despliegue del docker de Elastic Search + Kibana + BD de aeropuertos del repositorio anterior, desplegamos el docker oficial de Elastic Search desde Docker Desktop de Windows:
En este caso se despliega perfectamente, nos indicará la URL y puerto de despliegue, en nuestro caso en:
http://localhost:49153
Si accedemos desde el navegador a la URL indicada, nos mostrará un fichero JSON de Elastic Search, con información del docker desplegado:
En el estado del contenedor, en «Containers» de Docker Desktop, nos indica también el comando para desplegar Kibana:
1 |
docker run -p 5601:5601 -e 'ELASTICSEARCH_HOSTS=["http://host.docker.internal:49153"]' kibana:8.2.0 |
Con este comando, desafortunadamente, tampoco se ha podido iniciar Kibana, nos devuelve el error:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
Unable to find image 'kibana:8.2.0' locally 8.2.0: Pulling from library/kibana e0b25ef51634: Already exists 16168a059524: Pull complete a7c5b97fb1b3: Pull complete b4997d90f2a3: Pull complete 08edfcb77367: Pull complete 162b89073472: Pull complete c27ed485e628: Pull complete c8ec5118d07e: Pull complete 3098c58d1611: Pull complete f0cd89b25439: Pull complete 90247f6ea1db: Pull complete 3bdda07522a2: Pull complete 36a9ec86c178: Pull complete Digest: sha256:0ba5d3d3ddab3212eadd15bcc701c24a2baafe2f8bd7ced9d2a750cf227b8a06 Status: Downloaded newer image for kibana:8.2.0 [2022-06-10T08:34:05.133+00:00][INFO ][plugins-service] Plugin "cloudSecurityPosture" is disabled. [2022-06-10T08:34:05.154+00:00][INFO ][plugins-service] Plugin "metricsEntities" is disabled. [2022-06-10T08:34:05.179+00:00][FATAL][root] Error: [config validation of [elasticsearch].hosts]: types that failed validation: - [config validation of [elasticsearch].hosts.0]: expected URI with scheme [http|https]. - [config validation of [elasticsearch].hosts.1]: could not parse array value from json input at ensureValidConfiguration (/usr/share/kibana/src/core/server/config/ensure_valid_configuration.js:25:11) at Server.preboot (/usr/share/kibana/src/core/server/server.js:164:5) at Root.preboot (/usr/share/kibana/src/core/server/root/index.js:48:14) at bootstrap (/usr/share/kibana/src/core/server/bootstrap.js:99:9) at Command.<anonymous> (/usr/share/kibana/src/cli/serve/serve.js:216:5) FATAL Error: [config validation of [elasticsearch].hosts]: types that failed validation: - [config validation of [elasticsearch].hosts.0]: expected URI with scheme [http|https]. - [config validation of [elasticsearch].hosts.1]: could not parse array value from json input |
Finalmente, hemos podido desplegar el docker de Elastic Search y Kibana, con estos comandos, ejecutados desde una ventana de PowerShell de Windows, con Docker Desktop iniciado:
1 2 3 |
docker network create elastic docker pull docker.elastic.co/elasticsearch/elasticsearch:8.2.2 docker run --name es-node01 --net elastic -p 9200:9200 -p 9300:9300 -t docker.elastic.co/elasticsearch/elasticsearch:8.2.2 |
Con los comandos anteriores se despliega e inicia el docker de Elastic Search (versión 8.2.2):
En este caso, se inicia y se detiene, dando un error:
bootstrap check failure [1] of [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
Que se soluciona ejecutando desde PowerShell los siguientes comandos:
1 2 |
wsl -d docker-desktop sysctl -w vm.max_map_count=262144 |
Y reiniciando Docker Desktop para que se aplique el cambio de configuración.
Ahora volveremos a iniciar el docker Elasticsearch, desde PowerShell, con el comando:
1 |
docker run --name es-node01 --net elastic -p 9200:9200 -p 9300:9300 -t docker.elastic.co/elasticsearch/elasticsearch:8.2.2 |
Se iniciará y permanecerá a la escucha. También nos mostrará el token y contraseña de acceso para Kibana (que anotaremos porque la necesitaremos más adelante):
Mostrándonos el texto:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
--------------------------- -> Elasticsearch security features have been automatically configured! -> Authentication is enabled and cluster connections are encrypted. -> Password for the elastic user (reset with `bin/elasticsearch-reset-password -u elastic`): WysD60+5P9BhCES0tfKe -> HTTP CA certificate SHA-256 fingerprint: 64d320e46cc3e86c72646be83e33bbb5fd1d8e6e -> Configure Kibana to use this cluster: * Run Kibana and click the configuration link in the terminal when Kibana starts. * Copy the following enrollment token and paste it into Kibana in your browser (valid for the next 30 minutes): eyJ2ZXIiOiI4LjIuMiIsImJCOmRvT2diOWZyU3ZHU19WX2pDSG1rTmcifQ== -> Configure other nodes to join this cluster: * Copy the following enrollment token and start new Elasticsearch nodes with `bin/elasticsearch --enrollment-token <token>` (valid for the next 30 minutes): eyJ2ZXIiOiI4N1MVVrRWhrQjNxc2cifQ== If you're running in Docker, copy the enrollment token and run: `docker run -e "ENROLLMENT_TOKEN=<token>" docker.elastic.co/elasticsearch/elasticsearch:8.2.2` |
Y con estos otros dos comandos, desplegamos e iniciamos el docker de Kibana:
1 2 |
docker pull docker.elastic.co/kibana/kibana:8.2.2 docker run --name kib-01 --net elastic -p 5601:5601 docker.elastic.co/kibana/kibana:8.2.2 |
Como muestra en la línea de comandos, Kibana queda iniciado y a la escucha en el puerto 5601. Si abrimos un navegador y accedemos a la URL:
http://localhost:5601
Nos mostrará la ventana de primer inicio, que nos solicitará el token de acceso. Copiaremos el token generado en la ventana de PowerShell al iniciar Elasticsearch y pulsaremos en «Configure Elastic»:
Ahora nos solicitará un código de verificación, que obtendremos abriendo una consola de terminal en el docker de kibana:
Dentro de la ventana de terminal, accederemos a la carpeta /usr/share/kibana/bin:
1 |
cd /usr/share/kibana/bin |
Y ejecutaremos el fichero kibana-verification-code:
1 |
kibana-verification-code |
Nos generará un código de verificación de 6 números:
Volveremos a la ventana del navegador e introdcuiremos el código de verificación generado. Pulsaremos en «Verify»:
Se iniciará el configurador de Elastic para el primer inicio:
Nos solicitará usuario y contraseña (el usuario es «elastic», la contraseña se generó al iniciar el docker de Elasticsearch en la ventana de PowerShell, en el mismo sitio donde se generó el token):
Introduciremos usuario y contraseña y pulsaremos «Log in»:
Y ahora sí, por fin, accedemos a Elasticsearch y Kibana. Pulsaremos en «Explore on my own»:
Podremos, por ejemplo, cargar datos de prueba de ejemplo, pulsando o bien en «Try sample data» o bien si tenemos ficheros CSV/JSON en el equipo local pulsando en «Upload a file»:
Por ejemplo, para cargar los aeropuertos del repositorio con el que intentamos trabajar inicialmente:
Seleccionaremos el fichero json, ldjson o bien CSV que contiene los datos y que estará en nuestro equipo local:
Iniciará la validación del fichero seleccionado. Si tiene la estructura correcta nos dejará importarlo con «Import»:
Introduciremos un nombre para «index» y pulsaremos «Import»:
Y así tendremos disponibles los datos del fichero importado en Kibana:
Pulsando en el menú y en «Discover»:
Eligiendo «Vuelos» o el nombre del index subido:
Nos mostrará los datos cargados y podremos trabajar con ellos: hacer búsquedas, filtros y un sin fin de opciones para análisis: