Búsqueda elástica es un motor de análisis y búsqueda de texto completo de código abierto altamente escalable . El software admite operaciones RESTful que le permiten almacenar, buscar y analizar grandes volúmenes de datos rápidamente y casi en tiempo real. Elasticsearch es apreciado y popular entre los administradores de sistemas y los desarrolladores, ya que es un poderoso motor de búsqueda basado en la biblioteca Lucene. Por lo general, se utiliza como motor/tecnología subyacente que potencia las aplicaciones con características y requisitos de búsqueda complejos.
En el siguiente tutorial, aprenderá cómo instalar Elastic Search en Debian 11 Bullseye .
Requisitos
- SO recomendado: Diana de Debian 11
- Cuenta de usuario: Una cuenta de usuario con sudo o acceso root.
- Paquetes requeridos: Curl y Java
Instalando Curl
Rizos es necesario para algunas partes de esta guía. Para instalar este paquete, escriba el siguiente comando:
sudo apt install curl -y
Instalación de Java
Para instalar correctamente y, lo que es más importante, utilizar Elasticsearch , necesitas instalar Java . El proceso es bastante fácil.
Escriba el siguiente comando para instalar OpenJDK paquete:
sudo apt install default-jdk
Ejemplo de salida con paquetes a instalar:
Para continuar con la instalación, escriba (Y) luego presione el (ENTRAR) clave.
A continuación, verifique la versión de Java instalada y la compilación con el siguiente comando:
java -version
Ejemplo de salida a continuación:
Instalación de Elasticsearch
Elasticsearch no está disponible en los repositorios estándar de Debian 11, por lo que deberá instalarlo desde el repositorio APT de Elasticsearch.
Antes de agregar el repositorio, importa la clave GPG con el siguiente comando:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
Ejemplo de salida con (Ok) confirmando que fue exitoso:
Ahora que ha agregado la clave GPG, ahora se confiará en los repositorios de Elasticsearch. Proceda a instalar el repositorio oficial con el siguiente comando de terminal:
sudo sh -c 'echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" > /etc/apt/sources.list.d/elastic-7.x.list'
En el momento de crear el tutorial, Elasticsearch 7.13.4 es la versión más reciente, pero cambiará con el tiempo, y el repositorio que agregó funcionará para cualquier versión 7.x.x en el futuro.
A continuación, actualice su lista de repositorios e instale Elasticsearch de la siguiente manera:
sudo apt update && sudo apt install elasticsearch
De manera predeterminada, el servicio de Elasticsearch está deshabilitado en el arranque y no está activo. Para iniciar el servicio y habilitarlo en el arranque del sistema, escriba lo siguiente (systemctl) comando:
sudo systemctl enable elasticsearch.service --now
A continuación, para verificar que Elasticsearch se está ejecutando correctamente, utilizará el curl comando para enviar una solicitud HTTP al puerto 9200 en localhost de la siguiente manera:
curl -X GET "localhost:9200/"
Ejemplo de salida para verificar que Elasticsearch funcione correctamente:
Para ver el mensaje del sistema que Elasticsearch registra en su sistema, escriba el siguiente comando:
sudo journalctl -u elasticsearch
Ejemplo de registro de salida:
Configuración de Elasticsearch
Los datos de Elasticsearch se almacenan en la ubicación del directorio predeterminado (/var/lib/elasticsearch) . Para ver o editar los archivos de configuración, puede encontrarlos en la ubicación del directorio (/etc/elasticsearch) y las opciones de inicio de Java se pueden configurar en (/etc/default/elasticsearch) archivo de configuración.
La configuración predeterminada está generalmente bien para servidores operativos únicos, ya que Elasticsearch se ejecuta en localhost solamente. Sin embargo, si va a configurar un clúster, deberá modificar el archivo de configuración para permitir conexiones remotas.
Configurar el acceso remoto (opcional)
De forma predeterminada, Elasticsearch solo escucha localhost. Para cambiar esto, abra el archivo de configuración de la siguiente manera:
sudo nano /etc/elasticsearch/elasticsearch.yml
A continuación, desplácese hacia abajo y busque la sección Red y elimine el comentario (#) la siguiente línea y reemplácela con la dirección IP privada interna o la dirección IP externa de la siguiente manera:
En el ejemplo, descomentamos (#) el (red.host) y la cambió a una dirección IP privada interna.
Por motivos de seguridad, es ideal para especificar direcciones; sin embargo, si tiene varias direcciones IP internas o externas que acceden al servidor, cambie la interfaz de red para escuchar todas ingresando (0.0.0.0) de la siguiente manera:
A continuación, guarde el archivo de configuración (CTRL+O) luego salga (CLTR+X) .
Deberá reiniciar el servicio Elasticsearch con el siguiente comando para que los cambios surtan efecto:
sudo systemctl restart elasticsearch
Configurar UFW Firewall para permitir conexiones remotas
Si permite conexiones remotas, deberá permitir que su firewall permita que esas direcciones IP se conecten. Esto se puede hacer con el siguiente comando:
sudo ufw allow from <IP Address> to any port 9200
Puede encontrar más información sobre Debian y el cortafuegos UFW para configurar el cortafuegos UFW en Debian.
Cómo usar Elasticsearch
Para usar Elasticsearch usando el comando curl es un proceso sencillo. A continuación se muestran algunos de los más utilizados:
Borrar índice
Debajo del índice se denomina muestras .
curl -X DELETE 'http://localhost:9200/samples'
Lista de todos los índices
curl -X GET 'http://localhost:9200/_cat/indices?v'
Lista de todos los documentos en el índice
curl -X GET 'http://localhost:9200/sample/_search'
Consulta usando parámetros de URL
Aquí usamos el formato de consulta de Lucene para escribir q=escuela:Harvard.
curl -X GET http://localhost:9200/samples/_search?q=school:Harvard
Consulta con JSON, también conocido como Elasticsearch Query DSL
Puede consultar usando parámetros en la URL. Pero también puede usar JSON, como se muestra en el siguiente ejemplo. JSON sería más fácil de leer y depurar cuando tiene una consulta compleja que una cadena gigante de parámetros de URL.
curl -XGET --header 'Content-Type: application/json' http://localhost:9200/samples/_search -d '{
"query" : {
"match" : { "school": "Harvard" }
}
}'
Asignación de índice de lista
Todos los campos de Elasticsearch son índices. Esto enumera todos los campos y sus tipos en un índice.
curl -X GET http://localhost:9200/samples
Añadir datos
curl -XPUT --header 'Content-Type: application/json' http://localhost:9200/samples/_doc/1 -d '{
"school" : "Harvard"
}'
Actualizar documento
Aquí se explica cómo agregar campos a un documento existente. Primero, creamos uno nuevo. Luego lo actualizamos.
curl -XPUT --header 'Content-Type: application/json' http://localhost:9200/samples/_doc/2 -d '
{
"school": "Clemson"
}'
curl -XPOST --header 'Content-Type: application/json' http://localhost:9200/samples/_doc/2/_update -d '{
"doc" : {
"students": 50000}
}'
Índice de copia de seguridad
curl -XPOST --header 'Content-Type: application/json' http://localhost:9200/_reindex -d '{
"source": {
"index": "samples"
},
"dest": {
"index": "samples_backup"
}
}'
Carga masiva de datos en formato JSON
export pwd="elastic:"
curl --user $pwd -H 'Content-Type: application/x-ndjson' -XPOST 'https://58571402f5464923883e7be42a037917.eu-central-1.aws.cloud.es.io:9243/0/_bulk?pretty' --data-binary @<file>
Mostrar estado del clúster
curl --user $pwd -H 'Content-Type: application/json' -XGET https://58571402f5464923883e7be42a037917.eu-central-1.aws.cloud.es.io:9243/_cluster/health?pretty
Agregación y Agregación de cubos
Para un servidor web Nginx, esto produce recuentos de visitas web por ciudad de usuario:
curl -XGET --user $pwd --header 'Content-Type: application/json' https://58571402f5464923883e7be42a037917.eu-central-1.aws.cloud.es.io:9243/logstash/_search?pretty -d '{
"aggs": {
"cityName": {
"terms": {
"field": "geoip.city_name.keyword",
"size": 50
}
}
}
}
'
Esto lo amplía al recuento de códigos de respuesta del producto por ciudad en un registro del servidor web Nginx
curl -XGET --user $pwd --header 'Content-Type: application/json' https://58571402f5464923883e7be42a037917.eu-central-1.aws.cloud.es.io:9243/logstash/_search?pretty -d '{
"aggs": {
"city": {
"terms": {
"field": "geoip.city_name.keyword"
},
"aggs": {
"responses": {
"terms": {
"field": "response"
}
}
}
},
"responses": {
"terms": {
"field": "response"
}
}
}
}'
Uso de ElasticSearch con autenticación básica
Si ha activado la seguridad con ElasticSearch, debe proporcionar el usuario y la contraseña como se muestra a continuación para cada comando curl:
curl -X GET 'http://localhost:9200/_cat/indices?v' -u elastic:(password)
Impresión bonita
Agregue ?pretty=true a cualquier búsqueda para imprimir bastante el JSON. Así:
curl -X GET 'http://localhost:9200/(index)/_search'?pretty=true
Para consultar y devolver solo ciertos campos
Para devolver solo ciertos campos, colóquelos en la matriz _source:
GET filebeat-7.6.2-2020.05.05-000001/_search
{
"_source": ["suricata.eve.timestamp","source.geo.region_name","event.created"],
"query": {
"match" : { "source.geo.country_iso_code": "GR" }
}
}
Para consultar por fecha
Cuando el campo es de tipo fecha, puede usar matemáticas de fecha, así:
GET filebeat-7.6.2-2020.05.05-000001/_search
{
"query": {
"range" : {
"event.created": {
"gte" : "now-7d/d"
}
}
}
}
Desinstalación de Elasticsearch
Si ya no necesita Elasticsearch, puede eliminar el software con el siguiente comando:
sudo apt remove elasticsearch
Elimine el repositorio apt de la siguiente manera:
sudo rm /etc/apt/sources.list.d/elastic-7.x.list
Luego actualice su lista de repositorios para reflejar los cambios:
sudo apt update