Tutoriales

Configuración avanzada de Elasticsearch

Elasticsearch es un motor de búsqueda y análisis que permite almacenar documentos (estructurados o no) e indexar todos los campos de estos documentos en casi tiempo real. Es distribuible y fácilmente escalable, enfocado sobre todo al mundo empresarial y científico. Es accesible a través de una extensa y elaborada API. Con esta herramienta podemos impulsar búsquedas extremadamente rápidas que respalden nuestras aplicaciones de descubrimientos de datos. 

Su principal uso reside dentro de la monitorización de los logs distribuidos, formando parte del stack EFG (Elasticsearch, Fluentd y Grafana). 

El principal objeto que se puede definir y manipular en Elasticsearch son los índices. Estos índices son colecciones optimizadas de documentos JSON, los cuales, cada uno, son una colección de campos clave-valor que contienen los datos. 

Dentro de los índices nos encontramos los documentos. Estos documentos, como su propio nombre indica, son documentos JSON que se almacenan en Elasticsearch dentro de un índice, con un id y un tipo concretos. Pueden contener de 0 a n campos clave-valor. 

Para poder gestionar tanto los índices como los documentos de la instancia de Elasticsearch, se puede hacer uso dela imagen de Gestión de Índices en Elastic (API). 

Configuración de Elasticsearch

La configuración de Elasticsearch viene dada, bajo la ruta «/usr/share/elasticsearch/config» donde nos encontraremos los siguientes ficheros: 

  • elasticsearch.keystore 
  • elasticsearch.yml 
  • jvm.options 
  • jvm.options.d 
  • log4j2.properties 
  • role_mapping.yml 
  • roles.yml 
  • users 
  • users_roles 

Configuración en Openshift

Dentro de Openshift, para poder realizar cambios en estos ficheros y que se nos guarden para futuros cambios y/o reinicios del pod, es necesario crear un PVC: 

elastic-config.yaml 
 
kind: PersistentVolumeClaim 
apiVersion: v1 
metadata: 
  name: elastic-config 
  namespace: <namespace> 
spec: 
  accessModes: 
    - ReadWriteOnce 
  resources: 
    requests: 
      storage: 100Mi  

Y dentro del deployment del Elastic, asignarle los siguientes campos:

elasticsearch-deployment.yaml  

... 
spec: 
template: 
spec: 
      		volumes: 
        		- name: elasticdb-config 
        		  persistentVolumeClaim: 
         		  	claimName: elastic-config 
      		containers: 
        		- resources: 
volumeMounts: 
            			- name: elasticdb-config 
              			  mountPath: /usr/share/elasticsearch/config 

Modificación de los recursos asignados a la JVM

Por necesidades del proyecto, es posible que la carga que reciba Elasticsearch sea superior a la esperada por defecto por el programa. En estos casos, una de las posibles soluciones puede ser el aumento de la memoria asignada a la máquina virtual de Java sobre la que está montada Elasticsearch. 

Para ello, accederemos al fichero «jvm.options» mencionado anteriormente y modificaremos los siguientes parámetros: 

/usr/share/elasticsearch/config/jvm.options  

-Xms3g 

-Xmx3g 

  • -Xms → Indica el tamaño mínimo de la JVM. 
  • -Xmx → Indica el tamaño máximo de la JVM. 

Por defecto, ambos parámetros vienen con el valor de 1g. 

Valor -Xms y -Xmx 

Como recomendación, el valor de ambas variables debería ser el mismo y no mayor que el 50% de tu RAM. Para más información, consultar la documentación oficial

Modificación de los buckets

Hay situaciones en las que a Elastic se le realizan peticiones las cuales tienen que devolver un número demasiado grande de datos que contengan agregaciones (p.e: Desde Grafana se realiza una query de datos de las ultimas dos semanas en las cuales ha habido un gran número de inserciones de índices en Elastic). En estos casos, existe una variable dentro del fichero elasticsearch.yml la cual sirve para modificar este parámetro: 

/usr/share/elasticsearch/config/elasticsearch.yml  

search.max_buckets: 20000

Por defecto, el valor es de 10000. 

✍🏻 Author(s)

Deja una respuesta