A previous version of this article was written by Toli.
Introducción
Elasticsearch es una plataforma para la búsqueda y análisis distribuido de datos en tiempo real. Es una elección popular debido a su facilidad de uso, características poderosas y escalabilidad.
Este artículo le guiará a través de la instalación de Elasticsearch, la configuración para su caso de uso, asegurando su instalación y comenzando a trabajar con su servidor Elasticsearch.
Prerrequisitos
Antes de seguir este tutorial, necesitará:
- Un servidor Ubuntu 22.04 con 2GB de RAM y 2 CPUs configurado con un usuario sudo que no sea root. Puede lograr esto siguiendo el Configuración Inicial del Servidor con Ubuntu 22.04
Para este tutorial, trabajaremos con la cantidad mínima de CPU y RAM requerida para ejecutar Elasticsearch. Tenga en cuenta que la cantidad de CPU, RAM y almacenamiento que necesitará su servidor Elasticsearch depende del volumen de registros que espere.
Paso 1 — Instalación y Configuración de Elasticsearch
Los componentes de Elasticsearch no están disponibles en los repositorios de paquetes predeterminados de Ubuntu. Sin embargo, se pueden instalar con APT después de agregar la lista de fuentes de paquetes de Elastic.
Todos los paquetes están firmados con la clave de firma de Elasticsearch para proteger su sistema contra la suplantación de paquetes. Los paquetes autenticados con la clave serán considerados como confiables por su administrador de paquetes. En este paso, importará la clave pública de GPG de Elasticsearch y agregará la lista de fuentes de paquetes de Elastic para instalar Elasticsearch.
Para empezar, use cURL, la herramienta de línea de comandos para transferir datos con URLs, para importar la clave pública de GPG de Elasticsearch en APT. Tenga en cuenta que estamos usando los argumentos -fsSL para silenciar todo el progreso y posibles errores (excepto en caso de fallo del servidor) y para permitir que cURL realice una solicitud en una nueva ubicación si es redirigido. Envíe la salida al comando gpg --dearmor
, que convierte la clave en un formato que apt puede usar para verificar los paquetes descargados.
A continuación, agregue la lista de fuentes de Elastic al directorio sources.list.d
, donde apt
buscará nuevas fuentes:
La parte [signed-by=/usr/share/keyrings/elastic.gpg]
del archivo instruye a apt para usar la clave que descargó para verificar la información del repositorio y de los archivos de los paquetes de Elasticsearch.
A continuación, actualiza tus listas de paquetes para que APT lea la nueva fuente de Elastic:
Luego instala Elasticsearch con este comando:
Pulsa Y
cuando se te solicite para confirmar la instalación. Si se te pide reiniciar algún servicio, pulsa ENTER
para aceptar los valores predeterminados y continuar. Elasticsearch ya está instalado y listo para ser configurado.
Paso 2 — Configurando Elasticsearch
Para configurar Elasticsearch, editaremos su archivo de configuración principal elasticsearch.yml
donde se almacenan la mayoría de sus opciones de configuración. Este archivo se encuentra en el directorio /etc/elasticsearch
.
Utiliza tu editor de texto preferido para editar el archivo de configuración de Elasticsearch. Aquí, usaremos nano
:
Nota: El archivo de configuración de Elasticsearch está en formato YAML, lo que significa que necesitamos mantener el formato de indentación. Asegúrate de no agregar espacios adicionales mientras editas este archivo.
El archivo elasticsearch.yml
proporciona opciones de configuración para tu clúster, nodo, rutas, memoria, red, descubrimiento y puerta de enlace. La mayoría de estas opciones están preconfiguradas en el archivo, pero puedes cambiarlas según tus necesidades. Para los propósitos de nuestra demostración de una configuración de un solo servidor, solo ajustaremos los ajustes para el host de red.
Elasticsearch escucha el tráfico desde cualquier lugar en el puerto 9200
. Querrás restringir el acceso externo a tu instancia de Elasticsearch para evitar que los extraños lean tus datos o cierren tu clúster de Elasticsearch a través de su [API REST] (https://es.wikipedia.org/wiki/Transferencia_de_Estado_Representacional). Para restringir el acceso y, por lo tanto, aumentar la seguridad, encuentra la línea que especifica network.host
, descoméntala y reemplaza su valor con localhost
para que quede así:
. . .
# ---------------------------------- Red -----------------------------------
#
# Establece la dirección de enlace a una IP específica (IPv4 o IPv6):
#
network.host: localhost
. . .
Hemos especificado localhost
para que Elasticsearch escuche en todas las interfaces e IPs vinculadas. Si deseas que escuche solo en una interfaz específica, puedes especificar su IP en lugar de localhost
. Guarda y cierra elasticsearch.yml
. Si estás usando nano
, puedes hacerlo presionando CTRL+X
, seguido de Y
y luego ENTER
.
Estas son las configuraciones mínimas con las que puedes comenzar a usar Elasticsearch. Ahora puedes iniciar Elasticsearch por primera vez.
Inicia el servicio de Elasticsearch con systemctl
. Dale unos momentos a Elasticsearch para que se inicie. De lo contrario, podrías recibir errores sobre la imposibilidad de conectarte.
A continuación, ejecuta el siguiente comando para habilitar que Elasticsearch se inicie cada vez que se reinicie tu servidor:
Con Elasticsearch habilitado al inicio, pasemos al siguiente paso para discutir la seguridad.
Paso 3 — Asegurar Elasticsearch
Por defecto, Elasticsearch puede ser controlado por cualquier persona que pueda acceder a la API HTTP. Esto no siempre es un riesgo de seguridad porque Elasticsearch escucha solo en la interfaz de bucle local (es decir, 127.0.0.1
), la cual solo puede ser accedida localmente. Por lo tanto, no es posible el acceso público y siempre y cuando todos los usuarios del servidor sean de confianza, la seguridad puede no ser una preocupación importante.
Si necesitas permitir el acceso remoto a la API HTTP, puedes limitar la exposición a la red con el firewall por defecto de Ubuntu, UFW. Este firewall debería estar habilitado si seguiste los pasos en el tutorial de prerequisitos Configuración Inicial del Servidor con Ubuntu 22.04.
Ahora configuraremos el firewall para permitir el acceso al puerto predeterminado de la API HTTP de Elasticsearch (TCP 9200) para el host remoto de confianza, generalmente el servidor que estás utilizando en una configuración de servidor único, como198.51.100.0
. Para permitir el acceso, escribe el siguiente comando:
Una vez completado eso, puedes habilitar UFW con el siguiente comando:
Finalmente, verifica el estado de UFW con el siguiente comando:
Si has especificado las reglas correctamente, deberías recibir una salida como esta:
OutputStatus: active
To Action From
-- ------ ----
9200 ALLOW 198.51.100.0
22 ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)
UFW debería estar ahora habilitado y configurado para proteger el puerto 9200 de Elasticsearch.
Si desea invertir en protección adicional, Elasticsearch ofrece el complemento comercial Shield para su compra.
Paso 4 — Probando Elasticsearch
En este punto, Elasticsearch debería estar en funcionamiento en el puerto 9200. Puede probarlo con cURL y una solicitud GET.
Debería recibir la siguiente respuesta:
Output{
"name" : "elastic-22",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "DEKKt_95QL6HLaqS9OkPdQ",
"version" : {
"number" : "7.17.1",
"build_flavor" : "default",
"build_type" : "deb",
"build_hash" : "e5acb99f822233d62d6444ce45a4543dc1c8059a",
"build_date" : "2022-02-23T22:20:54.153567231Z",
"build_snapshot" : false,
"lucene_version" : "8.11.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
Si recibe una respuesta similar a la mencionada anteriormente, Elasticsearch está funcionando correctamente. Si no es así, asegúrese de haber seguido las instrucciones de instalación correctamente y de haber permitido un tiempo suficiente para que Elasticsearch se inicie completamente.
Para realizar una verificación más exhaustiva de Elasticsearch, ejecute el siguiente comando:
En la salida del comando anterior, puede verificar todas las configuraciones actuales para el nodo, el clúster, las rutas de aplicación, los módulos y más.
Paso 5 — Usando Elasticsearch
Para comenzar a usar Elasticsearch, primero agreguemos algunos datos. Elasticsearch utiliza una API RESTful, que responde a los comandos CRUD habituales: crear, recuperar, uactualizar y eliminar. Para trabajar con ello, usaremos nuevamente el comando cURL.
Puede agregar su primera entrada de la siguiente manera:
Debería recibir la siguiente respuesta:
Output{"_index":"tutorial","_type":"helloworld","_id":"1","_version":2,"result":"updated","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":1,"_primary_term":1}
Con cURL, hemos enviado una solicitud HTTP POST al servidor Elasticsearch. El URI de la solicitud fue /tutorial/helloworld/1
con varios parámetros:
tutorial
es el índice de los datos en Elasticsearch.helloworld
es el tipo.1
es el ID de nuestra entrada en el índice y tipo mencionados anteriormente.
Puede recuperar esta primera entrada con una solicitud HTTP GET.
Este debería ser el resultado resultante:
Output{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"found":true,"_source":{ "message": "Hello, World!" }}
Para modificar una entrada existente, puede utilizar una solicitud HTTP PUT.
Elasticsearch debería confirmar la modificación exitosa de esta manera:
Output{
"_index" : "tutorial",
"_type" : "helloworld",
"_id" : "1",
"_version" : 2,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 1,
"_primary_term" : 1
}
En el ejemplo anterior, hemos modificado el mensaje
de la primera entrada a “¡Hola, gente!”. Con eso, el número de versión se ha incrementado automáticamente a 2
.
Puede haber notado el argumento adicional pretty
en la solicitud anterior. Habilita el formato legible para humanos para que pueda escribir cada campo de datos en una nueva fila. También puede “embellecer” sus resultados al recuperar datos para obtener una salida más legible ingresando el siguiente comando:
Ahora la respuesta estará formateada para que un humano pueda analizarla:
Output{
"_index" : "tutorial",
"_type" : "helloworld",
"_id" : "1",
"_version" : 2,
"_seq_no" : 1,
"_primary_term" : 1,
"found" : true,
"_source" : {
"message" : "Hello, People!"
}
}
}
Ahora hemos agregado y consultado datos en Elasticsearch. Para aprender sobre las otras operaciones, consulte la documentación de la API.
Conclusión
Ha instalado, configurado y comenzado a utilizar Elasticsearch. Para explorar más a fondo la funcionalidad de Elasticsearch, consulte la documentación oficial de Elasticsearch.