Primeros pasos con Elasticsearch

Después de saber de manera somera qué es Elasticsearch, hay que instalarlo para jugar un poco con ello y ver qué se puede hacer. Lo he instalado en una Raspberri Pi 4 de 8 GB de memoria con S. O. de 64 bits, de modo que para jugar está bien, pero para algo más serio, hay que instarlo en un servidor más potente o en varios nodos. Seguí las instrucciones de https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html y no resultó complicado ponerlo en marcha aunque tuve un problemilla con los conectores que ya comentaré más adelante. Ya tenía docker instalado, así que ese paso lo omito.

Lo primero es crear una red con la que se comunicarán los distintos contenedores.

$ sudo docker network create elastic

Si se ha creado correctamente nos dará un identificador de la red creada que es el típico hash de 64 caracteres.

22c122db20db5ff5d3f3bf5fd0c2a5017b7df4b72e6143b4831d16325dbb0aa0

Se puede ver el contenido de la red creada con el comando:

$ sudo docker network inspect elastic

Entre otras cosas el ID, el nombre y las direcciones de esa red

...
"Id": "22c122db20db5ff5d3f3bf5fd0c2a5017b7df4b72e6143b4831d16325dbb0aa0",
"Name": "elastic",
...
"Subnet": "172.21.0.0/16",
"Gateway": "172.21.0.1",
...

El siguiente paso es bajarse las imágenes. Una es la de la aplicación en sí y la otra imagen es la de kibana que servirá para acceder vía web a elasticsearch.

$ sudo docker pull docker.elastic.co/elasticsearch/elasticsearch:8.16.1
$ sudo docker pull docker.elastic.co/kibana/kibana:8.16.1

Se pueden verificar la firma de las imágenes bajadas con una utilidad llamada cosign. En el repositorio de Raspberry OS no existe ese paquete, así que se omitirá este paso y no se verificarán las imágenes. De todos modos, existen formas de instalaar ese paquete. Por ejemplo se puede bajar en formato rpm y convertirlo a formato deb con alien y luego instalar el paquete Debian. Es una idea.

Se arranca el contenedor de elasticsearch:

$ sudo docker run --name es01 --net elastic -p 9200:9200 -it -m 1GB docker.elastic.co/elasticsearch/elasticsearch:8.16.1

Al arrancar salen un montón de mensajes y si ha funcionado correctamente saldrá un mensaje de que se ha configurado automáticamente:

✅ Elasticsearch security features have been automatically configured!
✅ Authentication is enabled and cluster connections are encrypted. 

Además proporcionará un contraseña para el usuario elastic que nos servirá, entre otras cosas, para entrar vía web posteriormente y también deberíamos ver un «enrollment token» que se utilizará para configurar elasticsearch y kibana. Ese token es un churro de 224 caracteres de números y letras combinando las mayúsculas y minúsculas. En el ejemplo se obtendrá:

eyJ2ZXIiOiI4LjE0LjAiLCJhZHIiOlsiMTcyLjIzLjAuMjo5MjAwIl0sImZnciI6IjE3ZGM2Y2EwMzA3OThkYzgwYmM3MDNiOTVhYjlhM2YxZmU0NGEzNTcyZWRkZTJlOTllZjI4YTgyNjhkZjE0OTIiLCJrZXkiOiJKcHdXVlpNQi1qcTNwazhqTVVrRDpuOWJLLW45LVRSZVBnTVVxbFo0YURRIn0=

Si ha arrancado correctamente tiene que estar escuchando en el puerto 9200

$ ss -ltn|grep 9200
LISTEN 0      4096         0.0.0.0:9200       0.0.0.0:*
LISTEN 0      4096            [::]:9200          [::]:*

Para comprobar si está funcionando Elasticsearch se pueden realizar consultas utilizando curl. Para ello se necesitará la contraseña que nos indicó. Con ella creamos una variable llamada ELASTIC_PASSWORD y la exportamos:

export ELASTIC_PASSWORD="la contraseña"

Se ejecuta el comando:

$ curl --insecure -u elastic:$ELASTIC_PASSWORD "https://localhost:9200/"

Y debería obtenerse una salida en formato JSON similar a :

{
    "name" : "50e2c9b0a40e",
    "cluster_name" : "docker-cluster",
    "cluster_uuid" : "FOHlz_b7RZm0GnqB7uhTQg",
    "version" : {
        "number" : "8.16.1",
        "build_flavor" : "default",
        "build_type" : "docker",
        "build_hash" : "ffe992aa682c1968b5df375b5095b3a21f122bf3",
        "build_date" : "2024-11-19T16:00:31.793213192Z",
        "build_snapshot" : false,
        "lucene_version" : "9.12.0",
        "minimum_wire_compatibility_version" : "7.17.0",
        "minimum_index_compatibility_version" : "7.0.0"
    },
    "tagline" : "You Know, for Search"
}

Una vez comprobado que funciona Elasticsearch, se arrancará el contenedor de kibana:

$ sudo docker run --name kib01 --net elastic -p 5601:5601 docker.elastic.co/kibana/kibana:8.16.1

Si ha arrancado correctamente tiene que estar escuchando en el puerto 5601:

$ ss -ltn | grep 5601
LISTEN 0      4096         0.0.0.0:5601       0.0.0.0:*
LISTEN 0      4096            [::]:5601          [::]:*

Además dará un warning sobre OpenSSL y nos dirá que aún no se ha configurado. La configuración se hará vía web y para eso es importante el «enrollment token» que se obtuvo en la instalación de Elasticsearch. Acaba la instalación diciendo que nos conectemos a http://0.0.0.0:5601.

Kibana is currently running with legacy OpenSSL providers enabled! For details and instructions on how to disable see https://www.elastic.co/guide/en/kibana/8.1.5/production.html#openssl-legacy-provider
i Kibana has not been configured.
Go to http://0.0.0.0:5601/?code=987379 to get started.

Se puede comprobar que los contenedores se están ejecutando con el comando:

$ sudo docker container ls -f network=elastic

Y debería verse que hay dos contenedores que utilizan la red elastic que se creó en un principio:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b261db8dbbc4 docker.elastic.co/kibana/kibana:8.16.1 "/bin/tini -- /usr/l…" 3 hours ago Up 3 hours 0.0.0.0:5601->5601/tcp, :::5601->5601/tcp kib01
b3f26b127f9f docker.elastic.co/elasticsearch/elasticsearch:8.16.1 "/bin/tini -- /usr/l…" 3 hours ago Up 3 hours 0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 9300/tcp es01

Una vez comprobado que están funcionando los dos contenedores y que escuchan en los dos puertos, lanzaremos el navegador. Al instalar kibana dijo que había que conectarse a la URL http://0.0.0.0:5601/?code=987379 (el código cambia en cada instalación). Hay que sustituir el 0.0.0.0 por la IP del equipo donde se está haciendo la instalación. En el ejemplo la IP es la 192.168.1.215.

Al hacerlo nos saldrá una ventana solicitando el «enrollment token» que obtuvimos cuando se lanzó el contenedor elasticsearch.

Si da error al entrar vía web o ha pasado más de treinta minutos desde que se generó el token, se puede volver a generar con el comando:

$ sudo docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana

En la ventana donde nos pide que peguemos el enrollment token, pegaremos el token que ya obtuvimos, ese churro de 224 caracteres.

Después de pegar el token se hará clic en el botón «Configure Elastic» y saldrá una ventana indicando los pasos que va haciendo para configurar.

Una vez completado el setup saldrá un página de bienvenida solicitando usuario y contraseña. El usuario es elastic y la contraseña la que se obtuvo al lanzar el primer contenedor y que se exportó para realizar la prueba con curl.

Al hacer login, si la contraseña y el usuario son los correctos aparecerá una página que es una especie de dashboard con muchos colorines que permitirá configurar múltiples opciones.

En próximas entradas veremos cómo alimentar a ese motor de búsqueda y cómo realizar alguna búsqueda.

Para acabar, se pueden parar los contenedores:

$ sudo docker container stop es01 kib01

La salida de este comando es simplemente mostrar el nombre de los contenedores parados:

es01
kib01

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *