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.