Wazuh - Problema Elasticsearch: "Cannot connect to the Elasticsearch cluster - See the Kibana logs for details and try reloading the page"
Introducción
En el presente blog se demuestra como se resolvió el error "Cannot connect to the Elasticsearch cluster - See the Kibana logs for details and try reloading the page". Esto se debe a que Kibana no se puede conectar con el servidor Elasticsearch . Como consecuencia, al momento de acceder a la interfaz de Kibana , aparecerá la siguiente leyenda:
Este error se presenta cuando existe un inconveniente en el funcionamiento de Kibana y Elasticsearch, pero no en Wazuh . Básicamente, es Kibana quien no se puede conectar a Elasticsearch, dado que su servicio no se encuentra operativo.
Solución
El objetivo es aumentar la cantidad de memoria que tiene permitido usar Elasticsearch, obviamente se debe disponer de este recurso (memoria RAM) en el server donde esta montado Wazuh.
El primer paso es editar el archivo /etc/elasticsearch/elasticsearch.yml , para ello se abre con algun editor de texto:
Luego debemos ubicar las líneas donde se declara la variable "bootstrap.memory_lock". Notar que se puede buscar esta cadena de caracteres con el buscador de cualquier editor de texto. En principio esta variable se encuentra comentada, por tanto no tiene efecto su valor ni declaración. Como se ve a continuación:
Se debe descomentar la línea donde se define la variable "bootstrap.memory_lock", mediante, borrar el carácter numeral al principio de la línea. Quedando asi:
Como segundo paso, se va a configurar la memoria en uso. Para esto, se debe abrir el archivo /etc/default/elesticsearch con cualquier editor de texto, nano en mi caso:
Luego nos dirigimos a la línea donde se declaran las varaibles: "MAX_OPEN_FILES" y "MAX_LOCKED_MEMORY", y procedemos a descomentar amabas líneas.
Luego agregamos una nueva variable, la cual es: "ES_HEAP_SIZE", de la siguiente manera:
El tercer paso es modificar el archivo "/etc/security/limits.conf" ,para ello abrimos este archivo con algún editor de texto y agregamos las variables: "elasticsearch - nofile" y "elasticsearch - memlock" de la siguiente manera:
El cuarto paso es modificar la variable: "ES_HEAP_SIZE", la cual se encuentra en el archivo: "etc/default/elasticsearch". Se debe asignar un valor de 8g, para poder contar con esta cantidad de memoria disponible, como se puede ver a continuación:
El quinto paso es editar la variable "Environment=ES_HEAP_SIZE=8G", la cual se debe encontrar en el archivo: "/usr/lib/systemd/system/elasticsearch.service". Quedando como se ve a continuación:
Por ultimo es necesario reiniciar el servidor, o bien reiniciar los servicios involucrados. En este caso, se reiniciará el servidor.
Causa
El principal problema que representa este error, es que el motor de Elasticsearch no dispone de la suficiente memoria RAM para poder poder trabajar correctamente, gracias a que la consulta que se le esta haciendo requiere de una mayor cantidad de memoria siendo imposible de responder con los recursos actuales.