ELK – Parte 1 – Instalar ElasticSearch 8.5 en ubuntu

ElasticSearch es un motor de análisis y busqueda distribuida nos permitar almacenar datos estructurados o no estructurados, logs, metricas, eventos,…

En esta primera parte vamos a ver como instalar y configurar el cluster de elasticsearch.

[toc]

Arquitectura

ELK tiene una architectura en Cluster con distintos tipos de roles (master, data, ingest,…), se puedes instalar en un unico servidor con todos los roles e ir añadiendo nodos y configurando los distintos tipos de roles.

Según vayamos agregando nodos nuestro cluster se reorganizará automáticamente para repartir los datos.

Cluster-level shard allocation and routing settingsNode

Instalación ElasticSearch

Lo primero que haremos es instalar el servidor de ElasticSearch. Installing Elasticsearch | Elasticsearch Guide [8.5] | Elastic

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg

sudo apt-get install apt-transport-https

echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list

sudo apt-get update && sudo apt-get install elasticsearch

Una vez termine la instalación nos dira la contraseña del usuario por defecto “elastic” y nos indicara que configuremos los servicios para que arranque automáticamente.

Configuramos los servicios.

sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
sudo systemctl start elasticsearch.service

Verificar

Para verificar que ha arrancado correctamente, haremos una llamada web https al puerto 9200, indicando el certificado y usuario:password.

La instalación nos configurará el servidor por SSL y nos generará automáticamente los certificados en /etc/elasticsearch/certs/

curl -X GET --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic:password https://localhost:9200

Configuración

La configuració la podremos encontrar en el fichero “/etc/elasticsearch/elasticsearch.yml

#cluster.name: "Nombre_Cluster"
#node.name: "Nombre_Nodo"
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
#network.host: 192.168.0.1
#http.port: 9200
#discovery.seed_hosts: ["host1", "host2"]
#cluster.initial_master_nodes: ["node-1", "node-2"]
#CONFIGURACIÓN SEGURIDAD AUTOMÁTICA
xpack.security.enabled: true
xpack.security.enrollment.enabled: true
xpack.security.http.ssl:
  enabled: true
  keystore.path: certs/http.p12
xpack.security.transport.ssl:
  enabled: true
  verification_mode: certificate
  keystore.path: certs/transport.p12
  truststore.path: certs/transport.p12
cluster.initial_master_nodes: ["ELK-01"]
http.host: 0.0.0.0

Tambien podremos ver la configuración mediante API accediendo a la URL “_nodes/settings”

curl -X GET --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic:password https://localhost:9200/_nodes/settings?pretty

Agregar Nodos

Preparamos el primer nodo, editamos el fichero “/etc/elasticsearch/elasticsearch.yml”, agregamos:

  • cluster.name, nombre del cluster
  • node.name, Nombre del nodo
  • discovery.seed_hosts, servidores que compodran el cluster
  • transport.host, para que se comunique entre los nodos
cluster.name: Cluster-ELK
node.name: ELK-01
discovery.seed_hosts: ["192.168.6.101", "192.168.6.101"]
transport.host: 0.0.0.0

Generamos en el primer nodo un token

/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node

En el nuevo nodo, instalaremos elacticsearch igual que el primer nodo.

Antes de empezar con el nodo a agregar, realizamos una copia de la carpeta /etc/elasticsearch/ por si da error y tenemos que recuperarlo.

Ejecutaremos el siguiente nodo para reconfigurar y

/usr/share/elasticsearch/bin/elasticsearch-reconfigure-node --enrollment-token <Token>

Si tubieramos un error y no conseguimos seguir, desinstalar elastic “apt purge elasticsearch” y volver a instalar.

Configuramos los servicios.

sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
sudo systemctl start elasticsearch.service

Agregamos el nombre del cluster y del nodo en el fichero de configuración. Reiniciamos el servicio.

cluster.name: Cluster-ELK
node.name: ELK-0X

Verificamos que accedemos al nodo (la password es la misma que en el primer nodo)

curl -X GET --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic:passwd https://localhost:9200/?pretty

Para ver los nodos del cluster ejecutaremos.

curl -X GET --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic:password https://localhost:9200/_cluster/state/nodes?pretty

Tipos nodos

Podremos configurar los nodos de ElasticSearch de distintos tipos de nodos. Node | Elasticsearch Guide [8.5] | Elastic

Por defecto la opcion de roles no viene configurado en el fichero yml, con lo que los nodos tendra todos los tipos (master, data, data_content, data_hot, data_warm, data_cold, data_frozen, ingest, ml, remote_cluster_client, transform)

Un cluster requiere minimo nodo master y data_content, data hot o data

Configurar Tipo

Editamos el fichero “vi /etc/elasticsearch/elasticsearch.yml” agregarmos el parametro node.roles

# especificamos el tipo de rol
node.roles: data
node.roles: [data]
node.roles: [master, data]

Quitar nodo Datos

Antes de quitar un nodo de datos necesitaremos excluir dicho nodo para no perder datos que esten en dicho nodo. Cluster-level shard allocation and routing settings

curl -X PUT --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic:password https://localhost:9200/_cluster/settings?pretty -H 'Content-Type: application/json' -d'{
  "transient" : {
    "cluster.routing.allocation.exclude._ip" : "1.1.1.1"
  }
}'
settings cluster

Revisamos el estado de los indices que hayan terminado de replicar.

curl -X GET --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic:password 'https://localhost:9200/_cat/shards?v=true&pretty'
shards status

Ahora podremos retirar el nodo del cluster

Cambiar de role data a master

Si queremos cambiar un nodo a master ademas de realizar el paso anterior, cambiare el node.roles a master.

Al reiniciar el servicio, dara error que podemos ver en /var/log/elasticsearch/<NombreCluster>.log

Lanzamos el comando que nos indica el log para limpiar el nodo.

/usr/share/elasticsearch/bin/elasticsearch-node repurpose

Quitaremos la opción de exclusion del punto anterior.

curl -X PUT --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic:password https://localhost:9200/_cluster/settings?pretty -H 'Content-Type: application/json' -d'{
  "transient" : {
    "cluster.routing.allocation.exclude._ip" : null
  }
}'

Dejar un comentario

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