Está en la página 1de 392

Herramientas de monitorización y

traceo de microservicios
ELK Stack
ELK Stack

Índice de contenidos
‣ Introducción a la gestión centralizada de logs.
‣ ¿Qué es el Stack ELK?
‣ Conceptos fundamentales de ElasticSearch.
‣ Búsquedas y analíticas con ElasticSearch.
‣ Analizando logs con Logstash.
‣ Visualizando datos con Kibana.

Preparado por Jesús Salinas Revelles 2


ELK Stack

Introducción a la gestión centralizada de logs


‣ Las aplicaciones monolíticas solo generan un archivo de trazas, es fácil de monitorizar, basta con
conectarse por SSH a la máquina de su entorno de ejecución y utilizar los comandos grep o tail o
descargarlo para examinarlo con otra herramienta de forma local.

‣ Pero aún siendo una aplicación monolítica, es raro que una organización tenga solo una aplicación
sino varias diferentes y las aplicaciones complejas se dividen en varias aún siendo parte de la
misma aplicación. Esto hace que haya múltiples aplicaciones en cuyo caso acceder por SSH a una
máquina diferente en cada caso no es cómodo.

‣ En el caso de múltiples aplicaciones o aplicaciones basadas en microservicios se opta por


centralizar las trazas provenientes de múltiples fuentes en una única herramienta, una de las
herramientas es la combinación de Elasticsearch, Logstash y Kibana que forma la pila ELK.

Preparado por Jesús Salinas Revelles 3


ELK Stack

¿Qué es el Stack ELK?


‣ Introducción.
‣ Arquitectura del ELK Stack.
‣ Administrar y gestionar los logs.
‣ ¿Qué es Elasticsearch?
‣ ¿Qué es Logstash?
‣ ¿Qué es Kibana?

Preparado por Jesús Salinas Revelles 4


ELK Stack

Introducción
‣ El ELK Stack, también conocido como Elastic Stack, es una colección de tres productos de código
abierto: Elasticsearch, Logstash y Kibana, desarrollados, administrados y mantenidos por la
compañía Elastic.

‣ Este grupo de herramientas, trabajando en conjunto, nos proporcionará un gestor de logs o registros
centralizado, su almacenamiento distribuido en forma de datos, su procesamiento y su posterior
visualización en dashboards.

‣ Esto nos permitirá realizar consultas en tiempo real para analizar, identi car y resolver posibles
problemas con sistemas o aplicaciones, como por ejemplo, el número de errores que se producen en
una aplicación web, o el uso de CPU y de memoria de un servidor.

Preparado por Jesús Salinas Revelles 5


fi
ELK Stack

Arquitectura del ELK Stack


‣ El Stack de Elastic contaría con los siguientes elementos:

Preparado por Jesús Salinas Revelles 6


ELK Stack

Arquitectura del ELK Stack


‣ Logs/Registros: nos aportarán aquellos datos que deben analizarse.
‣ ElasticSearch: Almacena, busca e indexa los datos transformados de Logstash.
‣ Logstash: Recopila los registros, los analiza y los transforma en datos.
‣ Kibana: Usa Elasticsearch para explorar, visualizar y compartir la información.

Preparado por Jesús Salinas Revelles 7

ELK Stack

Administrar y gestionar los logs


‣ Los logs o registros son datos en forma de texto que suelen guardarse en cheros, y que nos
explican el comportamiento de nuestros sistemas o programas.

‣ La gran cantidad de datos que se producen de esta manera hacen que el término Big Data también
sea aplicable a los logs.

‣ El principal problema con el que nos encontramos a la hora de dar uso a los logs, es que no suelen
estar diseñados siguiendo una metodología de trabajo estándar. Esto supone una descentralización
de la información y di cultades a la hora de visualizarla, lo que se traduce en un incremento en el
tiempo de respuesta ante posibles incidencias, así como en la posibilidad de que se hagan
interpretaciones erróneas.

‣ Podemos decir que una gestión estandarizada y correcta de nuestros logs, nos llevará a una mejora
en la gestión y el control de la información, y nos facilitará la detección de amenazas y la prevención
de fugas de información. También nos ofrecerá la posibilidad de ir más lejos con nuestros datos,
como puede ser la aplicación de técnicas de Machine Learning a la hora de detectar posibles
patrones en el comportamiento de nuestras aplicaciones y/o sistemas.

Preparado por Jesús Salinas Revelles 8


fi

fi
ELK Stack

¿Qué es Elasticsearch?
‣ Elasticsearch se trata básicamente de una versión escalable del motor de búsqueda Apache Lucene
y está construido con RESTful APIS.

‣ Ofrece una implementación simple, máxima con abilidad y fácil administración. También ofrece
consultas avanzadas para realizar análisis en detalle y almacena todos los datos de forma
descentralizada.

‣ Suele usarse para añadir funcionalidades de búsqueda a nuestras aplicaciones sobre diferentes
fuentes de datos. Entre estas funcionalidades se incluyen autocompletar, corrección de tipos,
resaltado de coincidencias, manejo de sinónimos, ajustes en la relevancia, etc.

‣ Básicamente, Elasticsearch tiene todo lo necesario para crear un motor de búsqueda potente.

Preparado por Jesús Salinas Revelles 9


fi

ELK Stack

¿Qué es Elasticsearch?
‣ Es una motor de analítica y análisis distribuido orientado a documentos JSON, por lo que, almacena
la información de forma desnormalizada.

‣ Se organiza mediante nodos, los cuales son alojados dentro de un cluster.


‣  Utiliza su propio Query Domain Speci c Language (DSL), mediante el cual permite realizar consultas
en JSON.

‣ La información se añade a Elasticsearch mediante un proceso “indexación”, ya que esta se inserta


en los índices de Apache Lucene.

‣ Al estar desarrollado en Java, es compatible en todas las plataformas donde Java lo sea.

Preparado por Jesús Salinas Revelles 10


fi

ELK Stack

¿Qué es Elasticsearch?
‣ Gracias a su distribución en nodos tiene una alta capacidad de respuesta y gran tolerancia a fallos.
‣ Su distribución en nodos también permite una escalabilidad horizontal y da la posibilidad de
almacenar grandes cantidades de información.

‣ Al utilizar objetos JSON como respuesta, es fácil de invocar desde varios lenguajes de
programación. Además cuenta con una gran cantidad librerías integradas para estos
lenguajes: Java, C#, Python, Javascript, PHP, Ruby,…

‣ Permite acceder a los datos en tiempo real. Para ello dispone del acceso a todas sus capacidades
mediante una API RESTful.

Preparado por Jesús Salinas Revelles 11


ELK Stack

¿Qué es Logstash?
‣ Logstash es una herramienta de recopilación y administración de datos en forma de logs. Puede
uni car datos de distintas fuentes y normalizarlos, preparándolos para su posterior análisis y
visualización.

‣ Los datos llegan a Logstash almacenados mediante eventos. A cada flujo de datos que procesa
cada uno de estos eventos  se le conoce como pipeline. Una pipeline es un proceso de ETL que
cuenta con tres elementos principales:

Preparado por Jesús Salinas Revelles 12


fi

ELK Stack

¿Qué es Logstash?
‣ Input: Primera parte del pipeline, que se encarga de recopilar los registros para su procesamiento.
‣ Filter: Etapa en la cual mediante expresiones regulares, se realizan las operaciones necesarias para
transformar y ltrar los datos, dividiéndolos según los distintos campos y criterios requeridos.

‣ Output: Última etapa del proceso de pipeline, en la que se puede dar formato a los datos para
adaptarse a la estructura requerida por los sistemas de destino. Estos pueden tratarse de bases de
datos, cheros, índices de Elasticsearch, etc.

Preparado por Jesús Salinas Revelles 13


fi
fi

ELK Stack

¿Qué es Logstash?
‣ Está basado en JRuby y requiere de Java Virtual Machine para ejecutarse.
‣ Es de código abierto y está disponible bajo la licencia Apache versión 2.0.
‣ Puede necesitar códecs para adaptar un formato de entrada a un formato aceptado por Logstash.
‣ Nos permite la centralización y estandarización de logs.
‣ Puede analizar una gran variedad de datos y eventos estructurados y no estructurados.
‣  Puede recopilar datos de diferentes fuentes y enviarlos a múltiples destinos.
‣ Proporciona una gran variedad de ltros, lo que da muchas posibilidades al usuario a la hora de
explotar de los datos.

Preparado por Jesús Salinas Revelles 14


fi

ELK Stack

¿Qué es Kibana?
‣ Kibana es el último elemento del ELK Stack.
‣ Se trata de un visualizador de datos que se conecta a un índice de Elasticsearch, y mediante una
interfaz web, permite realizar consultas, ltrando los datos para posteriormente representarlos, lo
que ayuda a los desarrolladores a tener una visión rápida de los mismos.

Preparado por Jesús Salinas Revelles 15


fi

ELK Stack

¿Qué es Kibana?
‣ Potente panel frontal, que es capaz de visualizar información indexada.
‣ Puede buscar, ver e interactuar en tiempo real con los datos almacenados en Elasticsearch.
‣ Ofrece una gran variedad de diagramas interactivos, tablas, grá cos y mapas para visualizar
requisitos complejos.

‣ Permite compartir instantáneas de los registros buscados.


‣ Permite guardar las tablas y administrarlas.

Preparado por Jesús Salinas Revelles 16


fi

ELK Stack

Conceptos fundamentales de ElasticSearch


‣ De un vistazo.
‣ Instalación.
‣ Arrancar Elasticsearch.
‣ Con guración de Elasticsearch.
‣ Instalación de plugins.
‣ Operaciones básicas.
‣ Indexando datos.
‣ Activando la seguridad mínima.

Preparado por Jesús Salinas Revelles 17


fi

ELK Stack

De un vistazo
‣ Introducción.
‣ Principales características.
‣ Casos de uso.
‣ Terminología.

Preparado por Jesús Salinas Revelles 18


ELK Stack

Introducción
‣ ElasticSearch es un motor de búsqueda y recuperación de documentos de tipo JSON basado en
Apache Lucene, que puede proveer a diferentes aplicaciones de capacidades de búsqueda a texto
completo a través de una API web RESTful.

‣ ElasticSearch está desarrollado en Java y está publicado como código abierto bajo las condiciones
de la licencia Apache.

‣ Podemos a rmar que Elasticsearch es un motor de búsqueda con capacidades analíticas.

Preparado por Jesús Salinas Revelles 19


fi

ELK Stack

Introducción
‣ https://www.elastic.co/es/elasticsearch/

Preparado por Jesús Salinas Revelles 20


ELK Stack

Principales características
‣ Acceso al dato:
‣ Elasticsearch provee un completo Query DSL (Domain Speci c Language) basado en JSON para
de nir las búsquedas.

‣ Podemos añadir y posteriormente buscar y analizar sobre grandes cantidades de datos en tiempo
real de forma distribuida. La con guración y el acceso a los datos podremos realizarlo mediante
su RESTful API. Así mismo también dispone de diversas librerías para clientes (Java, Ruby,
PHP, .NET, Python, etc).

‣ Escalabilidad:
‣ Permite una arquitectura distribuida, escalable horizontalmente y en alta disponibilidad.
‣ Rapidez:
‣ Diseñado para permitir búsquedas de texto completo (Full-Text) muy rápidas.

Preparado por Jesús Salinas Revelles 21


fi

fi
fi

ELK Stack

Principales características
‣ Orientado a documentos:
‣ Permite almacenar documentos JSON indexando todos sus campos (schemaless). Útil para
soluciones NoSQL.

Preparado por Jesús Salinas Revelles 22


ELK Stack

Casos de uso
‣ La capacidad que ofrece Elasticsearch a la hora de indexar contenido, así como su escalabilidad y su
gran velocidad ofrecen multitud de casos de uso de aplicación. A continuación indicamos los más
comunes en los que Elasticsearch será un gran aliado en nuestro proyecto:

‣ Buscador:
‣ Si vamos a necesitar realizar búsquedas de texto, una opción a valorar debería ser Elasticsearch.
Además de poder realizar búsquedas Full-Text, nos permite realizar búsquedas optimizadas por
idiomas sobre nuestros documentos. Podemos de nir búsquedas por palabras o frases,
obteniendo los documentos que aplican a nuestras condiciones de búsqueda.

‣ El uso de analizadores (analyzers) en Elasticsearch nos permite mediante el análisis del texto
poder realizar búsquedas full-text, donde las búsquedas nos devolverán todos los resultados
relevantes y no solo búsquedas exactas. El análisis hace posible búsquedas full-text gracias al
uso de tokens (tokenization), lo que supone partir el texto en pequeños trozos (tokens).

Preparado por Jesús Salinas Revelles 23


fi

ELK Stack

Casos de uso
‣ Análisis de Métricas:
‣ Otro caso de uso interesante es el análisis de métricas en tiempo real. En este caso nos
encontramos frente una gran cantidad de datos pequeños, agregados.

‣ Este tipo de información, de gran valor para el negocio, es posible uni carlo y posteriormente
visualizarlo o analizarlo con la potencia que nos ofrece Elasticsearch.

Preparado por Jesús Salinas Revelles 24


fi

ELK Stack

Casos de uso
‣ Analíticas de log:
‣ Al igual que en el caso de búsqueda de texto, en este caso Elasticsearch será un gran aliado.
Podremos centralizar la gestión completa de todo nuestro ecosistema (aplicaciones, servidores,
etc) en Elasticsearch, ofreciendo un gestor completo de logs en tiempo real sobre un gran
volumen de datos.

‣ Elastic, compañía detrás de Elasticsearch, ofrece otros productos como Beats, Logstash o Kibana
que, como veremos más adelante, se convierten en el equipo perfecto para nuestra analítica de
logs.

Preparado por Jesús Salinas Revelles 25


ELK Stack

Casos de uso
‣ Análisis de seguridad:
‣ Como hemos indicado anteriormente, si podemos utilizar Elasticsearch como un gestor
centralizado de logs, esta misma funcionalidad nos permitirá trabajar sobre datos de seguridad.
Así es muy común ver cómo equipos de seguridad disponen de sistemas SIEM junto a un cluster
de Elasticsearch, el cual almacena gran volumen de información a poder ser analizada a lo largo
del tiempo.

‣ Elastic, conocedor del uso de su aplicación en este ámbito, ofrece adicionalmente un módulo de
SIEM integrado en Kibana, mediante el cual es posible disponer de una consola centralizada
interactiva donde un equipo de análisis de seguridad puede trabajar inicialmente sobre ciertos
patrones e ir relacionando trazas en búsqueda de información relevante.

‣ Interesante comentar que Elastic ofrece un módulo de APM (Application Performance Management),
disponible en Kibana, para poder analizar el rendimiento de aplicaciones. Este módulo nos ofrece
una visión exacta de dónde se está utilizando el tiempo en la aplicación para poder así resolver
rápidamente los problemas identi cados.

Preparado por Jesús Salinas Revelles 26


fi

ELK Stack

Terminología
‣ Introducción.
‣ Cluster.
‣ Nodo.
‣ Índice e índice invertido.
‣ Documento y campo.
‣ Shard.
‣ Mapeo de campos.

Preparado por Jesús Salinas Revelles 27

ELK Stack

Introducción
‣ Para poder entender mínimamente el funcionamiento de Elasticsearch, debemos hacer mención de
la terminología más común que nos encontraremos al trabajar con él:

‣ Cluster.
‣ Nodo.
‣ Índice e índice invertido.
‣ Documento y campo.
‣ Shard.
‣ Mapeo de campos.

Preparado por Jesús Salinas Revelles 28

ELK Stack

Cluster
‣ Agrupación de nodos Elasticsearch que mantienen los datos distribuidos e indexados.
‣ Todos los nodos de un cluster conocen la existencia del resto, por lo que pueden así dirigir las
peticiones de los clientes al nodo apropiado.

Preparado por Jesús Salinas Revelles 29

ELK Stack

Nodo
‣ Cada instancia que se levanta de Elasticsearch es un nodo. Cada nodo por defecto maneja trá co
http y de transporte, permitiendo gestionar llamadas a la API REST y la comunicación con el resto de
nodos respectivamente.

‣ Un nodo puede tener varios roles, siendo importante conocer sus características. Por defecto a un
nodo se le aplican todos los roles existentes, pudiendo seleccionarse uno o varios según se
convenga.

Preparado por Jesús Salinas Revelles 30


fi
ELK Stack

Nodo
‣ Los roles son:
‣ Master-elegible: Indica que el nodo puede ser elegido como master. Como concepto general
debemos entender que en todo cluster ha de haber siempre un nodo master, el cual es el
encargado de gestionar el clúster.

‣ Machine Learning: El nodo realizará las tareas con guradas en el módulo de Machine Learning
que dispone la aplicación.

‣ Data Node: Almacena los datos y realiza las operaciones necesarias, búsquedas y agregaciones
sobre estos.

‣ Ingest Node: Es capaz de aplicar procesos de transformación y enriquecimiento a los datos


(mediante ingest pipeline) previamente a su indexación.

‣ Aclarar que si a un nodo se le desactivan todos los roles, este actuará como nodo de coordinación
(Coordinating node), ya que este rol es implícito y sirve para poder coordinar peticiones de clientes.

Preparado por Jesús Salinas Revelles 31


fi

ELK Stack

Índice e índice invertido


‣ El índice es la agrupación de documentos que comparten características similares, siendo
referenciado por un nombre el cual podremos utilizar para acceder a los datos.

‣ El índice invertido no debe confundirse con el índice.


‣ El índice invertido es la estructura de datos utilizada por Elasticsearch para poder realizar búsquedas
full-text de forma muy rápida. Este contiene una referencia única (token) de cada aparición en
documentos e identi ca cada documento que lo contiene.

Preparado por Jesús Salinas Revelles 32


fi

ELK Stack

Documento y campo
‣ El documento se de ne como el conjunto de campos, en formato JSON, que se almacenan en un
índice de Elasticsearch.

‣ El campo es un par clave:valor con el contenido de la información.

Preparado por Jesús Salinas Revelles 33


fi

ELK Stack

Shard
‣ La técnica de dividir el dato indexado en varias partes se llama sharding, lo cual permite un escalado
horizontal de este. Un shard es una parte de un índice, el cual contiene una parte de los datos de
este. En Elasticsearch un shard es una instancia de Lucene, por lo que, en sí mismo podemos ver que
será funcional e independiente en ciertos aspectos.

‣ Elasticsearch maneja dos tipos de shards. Los shards primarios son los shards propios que
contienen la información del índice. Adicionalmente podemos realizar copias de estos shards para
ofrecer tolerancia a fallo en el cluster, a estos shards se les llama shards de réplica.

‣ Es importante mencionar que el uso de shards primarios y réplicas no sólo permite una tolerancia a
fallo de los datos, sino que también proporciona la posibilidad de paralelizar tareas de ingesta y
consulta de datos.

‣ Elasticsearch mantiene siempre en instancias separadas shards primarios y sus réplicas, así si en
algún momento se identi ca la caída de algún nodo, Elasticsearch reorganizará los shards
necesarios para disponer en todo momento de alta disponibilidad. Esa misma operativa se realizará
cuando se detecte que los problemas del nodo han quedado solventados.

Preparado por Jesús Salinas Revelles 34


fi

ELK Stack

Mapeo de campos
‣ Es el proceso de de nir cómo un documento, y los campos que lo contienen, ha a ser almacenado e
indexado.

‣ Como se indicó anteriormente, Elasticsearch no requiere la declaración del esquema de datos a


utilizar, pero es recomendable de nir antes de la ingesta el tipo de datos a esperar. Esto permitirá
optimizar el tamaño de almacenamiento o realizar posteriormente operaciones sobre ciertos tipos
de datos entre otros aspectos.

‣ El uso de mappings normalmente vendrá asociado a la creación de templates, en los cuales se


de nirán para un patrón de índices (index pattern) tanto los mappings a aplicar en los campos como
la con guración (settings) a tener en cuenta, como el número de shards a aplicar, etc.

Preparado por Jesús Salinas Revelles 35


fi
fi

fi

fi
ELK Stack

Instalación
‣ Requisitos previos.
‣ Matriz de compatibilidad.
‣ Descarga.
‣ Descompresión.
‣ Instalación para windows.
‣ La estructura de directorios.

Preparado por Jesús Salinas Revelles 36


ELK Stack

Requisitos previos
‣ Elasticsearch está construido con Java e incluye una versión empaquetada de OpenJDK de los
mantenedores de JDK (GPLv2 + CE) dentro de cada distribución. La JVM incluida es la JVM
recomendada y se encuentra dentro del directorio jdk del directorio de inicio de Elasticsearch.

‣ Para usar su propia versión de Java, con gure la variable de entorno ES_JAVA_HOME.
‣ Por ejemplo, la versión 7.15.2 necesita como mínimo un JDK 8.
‣ Si debe utilizar una versión de Java que sea diferente de la JVM incluida, le recomendamos que
utilice una versión LTS compatible de Java. Elasticsearch se negará a iniciarse si se utiliza una
versión de Java defectuosa conocida.

‣ El directorio de JVM incluido puede eliminarse al utilizar su propia JVM.

Preparado por Jesús Salinas Revelles 37


fi

ELK Stack

Requisitos previos
‣ Para la versión 7.15.2 si arranca con JDK8 de nido en JAVA_HOME nos mostrará el siguiente
mensaje:

warning: usage of JAVA_HOME is deprecated, use ES_JAVA_HOME

‣ Resumiendo, debemos de nir la variable ES_JAVA_HOME y pensar en trabajar con una versión de
Java 11.

Preparado por Jesús Salinas Revelles 38


fi
fi
chero, éste se descomprime y nos encontramos con algo tal que así:

43
fi
ELK Stack

Instalación para windows


‣ Ir a https://www.elastic.co/guide/en/elasticsearch/reference/current/zip-windows.html

Preparado por Jesús Salinas Revelles 44


ELK Stack

La estructura de directorios
‣ Las distribuciones en formato archivos son completamente independientes. Todos los archivos y
directorios están contenidos, por defecto, en $ES_HOME, el directorio creado al descomprimir el
archivo.

‣ Esto es muy conveniente porque no tiene que crear ningún directorio para comenzar a usar
Elasticsearch, y desinstalar Elasticsearch es tan fácil como eliminar el directorio $ES_HOME.

‣ Sin embargo, es recomendable cambiar las ubicaciones, por defecto, del directorio de con guración,
el directorio de datos y el directorio de logs para no eliminar datos importantes más adelante.

Preparado por Jesús Salinas Revelles 45


fi

ELK Stack

La estructura de directorios
‣ home: Directorio de inicio de Elasticsearch o $ES_HOME. Directorio creado al descomprimir el
archivo.

‣ bin: Scripts binarios que incluyen elasticsearch para iniciar un nodo y elasticsearch-plugin para
instalar complementos. Su valor por defecto es $ES_HOME/bin.

‣ conf: Archivos de con guración que incluyen elasticsearch.yml. Su valor por defecto es $ES_HOME/
con g. Se puede con gurar con la variable ES_PATH_CONF.

‣ data: Directorio que almacena los cheros de datos de los índices/shards del nodo. Su valor por
defecto es $ES_HOME/data.

‣ logs: Directorio que almacena el log. Su valor por defecto es $ES_HOME/logs.


‣ plugins: Directorio que almacena los Plugins. Cada plugin estará contenido en un subdirectorio. Su
valor por defecto es $ES_HOME/plugins.

Preparado por Jesús Salinas Revelles 46


fi

fi
fi

fi

ELK Stack

Arrancar Elasticsearch
‣ Introducción.
‣ El comando elasticsearch.
‣ De niendo un servicio de windows.
‣ Veri cando la instalación.

Preparado por Jesús Salinas Revelles 47


fi
fi

ELK Stack

Introducción
‣ Elasticsearch se arranca mediante el comando elasticsearch/elasticsearch.bat.
‣ Por ejemplo, desde el directorio home de elasticsearch:
$ ./bin/elasticsearch

$ ./bin/elasticsearch.bat

Preparado por Jesús Salinas Revelles 48

ELK Stack

El comando elasticsearch
‣ Ejecutando el siguiente comando vemos todas sus opciones:
$ ./bin/elasticsearch -h

Preparado por Jesús Salinas Revelles 49


$ ./bin/elasticsearch -d -p pid

‣ Por defecto, el log se almacenará en $ES_HOME/logs/.


‣ Para cerrar Elasticsearch, elimine el ID de proceso registrado en el archivo pid:
$ pkill -F pid

50

ELK Stack

Definiendo un servicio de windows


‣ Entre otras cosas, se podrá de nir un servicio de windows para gestionarlo gracias al comando
elasticsearch-service.bat.
c:\elasticsearch-7.15.2\bin>elasticsearch-service.bat

‣ Una vez creado con la opción install se podrá controlar con las opciones start y stop.

Preparado por Jesús Salinas Revelles 51


fi
carlo enviando una petición HTTP de tipo GET al puerto en el que se
encuentre disponible.

‣ Cuando Elasticsearch se inicia uno de sus mensajes de estado incluye una dirección de transporte:
...

52

fi
‣ Los cheros de con guración.
‣ El chero elasticsearch.yml.
‣ Con guración de la máquina virtual.
‣ Con guración de log.

54
fi
fi
fi
fi

fi

ELK Stack

Introducción
‣ Elasticsearch incluye unos valores por defecto adecuados y requiere muy poca con guración.
‣ La mayoría de las con guraciones se pueden cambiar en un clúster en ejecución usando la API de
con guración de actualización de Cluster.

‣ Los archivos de con guración deben contener con guraciones que sean especí cas del nodo (como
node.name y rutas), o con guraciones que un nodo requiere para poder unirse a un clúster, como
cluster.name y network.host.

Preparado por Jesús Salinas Revelles 55


fi
fi
fi
fi

fi
fi
fi

ELK Stack

Los ficheros de configuración


‣ Elasticsearch tiene tres archivos de con guración:
‣ elasticsearch.yml para con gurar Elasticsearch.
‣ jvm.options para con gurar Elasticsearch JVM.
‣ log4j2.properties para con gurar el log de Elasticsearch.
‣ Estos archivos se encuentran en el directorio de con guración, cuya ubicación por defecto depende
de si la instalación es o no de una distribución de archivo (tar.gz o zip) o una distribución de paquete
(paquetes Debian o RPM).

‣ Para las distribuciones en formato archivos, la ubicación del directorio de con guración por defecto
es $ES_HOME/con g.

Preparado por Jesús Salinas Revelles 56


fi
fi

fi
fi
fi

fi

fi
ELK Stack

Los ficheros de configuración


‣ La ubicación del directorio de con guración se puede cambiar a través de la variable de entorno
ES_PATH_CONF cuando se arranca la aplicación de la siguiente manera:

$ ES_PATH_CONF=/path/to/my/con

‣ También puede exportar la variable de entorno ES_PATH_CONF a través de la línea de comando o


mediante su per l de shell.

Preparado por Jesús Salinas Revelles 57


fi
fi

chero de con guración elasticsearch.yml que se encuentra en la carpeta con g para


de nir el nombre del cluster sobre el que trabaja:

# ----------------------- Cluster -----------------------------

58
fi
fi
fi
fi
‣ El puerto para la comunicación entre nodos. Acepta un solo valor o un rango.
‣ Si se especi ca un rango, el nodo se vinculará al primer puerto disponible en el rango.
‣ Establezca esta con guración en un solo puerto, no en un rango, en cada nodo elegible como
maestro. Por ejemplo:

transport.port: 9200

‣ Valor por defecto: 9300-9400.

59
fi
fi

ELK Stack

El fichero elasticsearch.yml
‣ Atributo transport.port (cont.):
‣ Cuidado: cambios en el nombre de la propiedad.
‣ https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking-changes-7.1.html

Preparado por Jesús Salinas Revelles 60


ELK Stack

El fichero elasticsearch.yml
‣ El atributo discovery.type:
‣ Especi ca si Elasticsearch debe formar un clúster de varios nodos.
‣ Por defecto, Elasticsearch descubre otros nodos cuando forma un clúster y permite que otros
nodos se unan al clúster más adelante.

‣ Si discovery.type se establece a single-node, Elasticsearch forma un clúster de un solo nodo y


suprime el tiempo de espera establecido por cluster.publish.timeout.

discovery.type: single-node

Preparado por Jesús Salinas Revelles 61


fi

‣ Proporciona una lista de las direcciones de los nodos elegibles para maestros en el clúster.
‣ También puede ser una sola cadena que contenga las direcciones separadas por comas.
‣ Cada dirección tiene el formato host:port o host. El host es un nombre de host que debe resolver
el DNS, una dirección IPv4 o una dirección IPv6. Las direcciones IPv6 deben ir entre corchetes. Si
un nombre de host se resuelve a través de DNS en varias direcciones, Elasticsearch las usa todas.

discovery.seed_hosts:

62

‣ Si el puerto no aparece se determina mediante:


‣ transport.pro les.default.port.
‣ transport.port.

63
fi

ELK Stack

El fichero elasticsearch.yml
‣ Atributo http.port:
‣ El puerto para la comunicación HTTP.
‣ Acepta un solo valor o un rango.
‣ Si se especi ca un rango, el nodo se vinculará al primer puerto disponible en el rango.
http.port: 9200

‣ Valor por defecto: 9200-9300.

Preparado por Jesús Salinas Revelles 64


fi

ELK Stack

El fichero elasticsearch.yml
‣ Atributo network.host:
‣ Establece la dirección de este nodo para el trá co HTTP y de transporte. El nodo se vinculará a
esta dirección y también la utilizará como su dirección de publicación. Acepta una dirección IP, un
nombre de host o un valor especial. Por ejemplo:

network.host: es-node1

‣ Valor por defecto: _local_.


‣ Nota: valores especiales:
‣ https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-
network.html#network-interface-values

Preparado por Jesús Salinas Revelles 65


fi

‣ Elasticsearch usa node.name como un identi cador legible para una instancia particular de
Elasticsearch.

‣ Este nombre se incluye en la respuesta de muchas APIs. Por ejemplo:

network.host: es-node1

‣ El nombre de nodo por defecto es el nombre de host de la máquina cuando se inicia Elasticsearch.

66

fi

‣ Ruta donde se almacena el log generado.


‣ Atributo path.data:
‣ Ruta donde se almacena la información que guarda/genera el producto.

67

ELK Stack

El fichero elasticsearch.yml
‣ Ejemplo de con guración:

cluster.name: elasticsearchCluster

Preparado por Jesús Salinas Revelles 68


fi
gurando la variable de entorno ES_JAVA_OPTS.

‣ Los archivos de opciones de JVM deben tener el su jo .options y contener una lista delimitada por
líneas de argumentos de JVM. JVM procesa archivos de opciones en orden lexicográ co.

‣ El lugar donde coloque los archivos de opciones de JVM depende del tipo de instalación:
‣ tar.gz o .zip: agregue archivos de opciones JVM personalizados a con g/jvm.options.d/.
‣ Debian o RPM: agregue archivos de opciones JVM personalizados a /etc/elasticsearch/
jvm.options.d/.

‣ Importante: Nunca se debe modi car directamente el chero jvm.options.

69

fi
fi
fi
fi
fi
fi

ELK Stack

Configuración de la máquina virtual


‣ Este chero almacenará una lista de parámetros que con guran la máquina virtual línea a línea. Por
ejemplo:

-Xms2g

‣ Los parámetros se pueden aplicar a todas las posibles versiones de java que se puedan utilizar:

‣ O se puede limitar a una especí ca o a un rango:

Preparado por Jesús Salinas Revelles 70


fi

fi
fi

nirse en arranque:

$ ES_JAVA_OPTS="-Xms2g -Xmx2g" ./bin/elasticsearch

71
fi
ELK Stack

Configuración de log
‣ Elasticsearch trabaja con el proyecto Apache Log4j 2 para la gestión de su log.
‣ Su comportamiento se de ne en el chero log4j2.properties que se encuentra en la carpeta de
con guración.

‣ Por defecto, de ne varios appenders: console, rolling, rolling_old, etc.


‣ El nivel de log por defecto será INFO.
‣ Si queremos cambiar la forma en la que se genera el log solo tendremos que modi carlo.

Preparado por Jesús Salinas Revelles 72


fi

fi
fi
fi

fi
ELK Stack

Instalación de plugins
‣ Introducción.
‣ El ejecutable elasticsearch-plugin.
‣ Instalando plugins.
‣ Trabajando detrás de un proxy.
‣ Directorio de plugins.

Preparado por Jesús Salinas Revelles 73


ELK Stack

Introducción
‣ Los plugins son una forma de mejorar la funcionalidad básica de Elasticsearch de manera
personalizada. Van desde agregar tipos de mapeo personalizados, analizadores personalizados (de
una manera más integrada), motores de scripts personalizados, descubrimiento personalizado y
más.

‣ Más información en https://www.elastic.co/guide/en/elasticsearch/plugins/7.15/index.html

Preparado por Jesús Salinas Revelles 74

ELK Stack

Introducción
‣ Existen dos categorías de plugins:
‣ Plugins principales:
‣ Esta categoría identi ca los plugins que forman parte del proyecto Elasticsearch. Entregado al
mismo tiempo que Elasticsearch, su número de versión siempre coincide con el número de
versión del propio Elasticsearch. Estos plugins son mantenidos por el equipo de Elastic con la
ayuda apreciada de increíbles miembros de la comunidad (para plugins de código abierto). Los
problemas y los informes de errores se pueden informar en la página del proyecto de Github.

‣ Contribución de la comunidad:
‣ Esta categoría identi ca los plugins que son externos al proyecto Elasticsearch. Los
proporcionan desarrolladores individuales o empresas privadas y tienen sus propias licencias,
así como su propio sistema de control de versiones. Los problemas y los informes de errores
generalmente se pueden informar en el sitio web de plugins de la comunidad.

Preparado por Jesús Salinas Revelles 75


fi
fi

ELK Stack

Introducción
‣ Para que Elasticsearch sea compatible con todos los idiomas disponibles en determinadas
plataformas, por ejemplo, Liferay y los textos de todos los idiomas sean analizados, será necesario
ejecutar unos comandos para que se instalen los plugins necesarios.

‣ Para que no se produzcan estos errores debemos instalar los siguientes plugins:
‣ analysis-icu.
‣ analysis-kuromoji.
‣ analysis-smartcn.
‣ analysis-stempel.

Preparado por Jesús Salinas Revelles 76


ELK Stack

El ejecutable elasticsearch-plugin
‣ El ejecutable elasticsearch-plugin que se encuentra en la carpeta bin nos permitirá realizar esta
operación.

‣ Si ejecutamos el comando en modo ayuda nos ofrece información detallada de éste.

Preparado por Jesús Salinas Revelles 77


ELK Stack

El ejecutable elasticsearch-plugin
$ ./bin/elasticsearch-plugin -h

Preparado por Jesús Salinas Revelles 78


cialmente compatibles y se pueden instalar simplemente haciendo
referencia a su nombre:

amazon-ec2

80
fi
$ bin/elasticsearch-plugin install analysis-icu

‣ Una vez nalizada la operación, podemos validar la instalación ejecutando el comando:

85
fi

$ elasticsearch-plugin install

‣ Ejemplo linux:

‣ Ejemplo windows:

86

cial de Elasticsearch nos ofrece información sobre los plugins en la siguiente


url:

‣ https://www.elastic.co/guide/en/elasticsearch/plugins/current/index.html

87

fi
ELK Stack

Trabajando detrás de un proxy


‣ Debemos seleccionar la versión con la que queremos trabajar, por ejemplo, 6.5.

Preparado por Jesús Salinas Revelles 88


ELK Stack

Trabajando detrás de un proxy


‣ Se accede a la sección Analysis Plugins y obtenemos información de todos los plugins que
necesitamos instalar:

Preparado por Jesús Salinas Revelles 89


ELK Stack

Trabajando detrás de un proxy


‣ Por ejemplo, si accedemos a ICU su página, entre otras cosas, nos muestra la url de descarga
manual:

‣ Esta operación podemos realizarla para cada plugin.

Preparado por Jesús Salinas Revelles 90


ELK Stack

Directorio de plugins
‣ Por defecto, en una distribución en formato comprimido el directorio para almacenar los plugins se
encuentra en plugins.

Preparado por Jesús Salinas Revelles 91


ELK Stack

Operaciones básicas
‣ Manipulando datos con la API REST.
‣ Búsquedas con query requests.

Preparado por Jesús Salinas Revelles 92


ELK Stack

Manipulando datos con la API REST


‣ Introducción.
‣ Almacenando datos.
‣ Recuperando documentos.
‣ Actualizando documentos.
‣ Borrando documentos.
‣ Versionado de documentos.

Preparado por Jesús Salinas Revelles 93


ELK Stack

Introducción
‣ Elasticsearch expone una API REST muy rica que se puede utilizar para buscar en los datos,
indexarlos y controlar el comportamiento de Elasticsearch.

‣ El uso de la API REST le permite obtener un solo documento, indexar o actualizar un documento,
obtener la información sobre el estado actual de Elasticsearch, crear o eliminar índices o forzar a
Elasticsearch a moverse entre fragmentos de sus índices.

‣ Por supuesto, estos son solo ejemplos que muestran lo que puede esperar de la API REST de
Elasticsearch. Por ahora, nos concentraremos en usar la parte de crear, recuperar, actualizar,
eliminar (CRUD) de la API de Elasticsearch, que nos permite usar Elasticsearch de una manera
similar a cómo usaríamos cualquier otro almacén de datos NoSQL.

Preparado por Jesús Salinas Revelles 94


ELK Stack

Introducción
‣ Ahora, veamos ejemplos de solicitudes HTTP que se envían a puntos nales de la API REST de
Elasticsearch reales, por lo que la información hipotética anterior se convertirá en algo real:

‣ GET http://localhost:9200/: recupera información básica sobre Elasticsearch, como la versión, el


nombre del nodo al que se ha enviado el comando, el nombre del clúster al que está conectado el
nodo, la versión de Apache Lucene , etcétera.

‣ GET http://localhost:9200/_cluster/state/nodes/: Recupera información sobre todos los nodos


del clúster, como sus identi cadores, nombres, direcciones de transporte con puertos y atributos
de nodo adicionales para cada nodo.

‣ DELETE http://localhost:9200/books/book/123: Esto elimina un documento que está indexado en


el índice books, con el tipo book y un identi cador de 123.

Preparado por Jesús Salinas Revelles 95


fi

fi

fi

ELK Stack

Almacenando datos
‣ POST http://localhost:9200/blog/article/1:
{

Preparado por Jesús Salinas Revelles 96


‣ Cuando el documento está indexado y Elasticsearch descarga el documento en disco, crea
segmentos, una estructura inmutable que se escribe una vez y se lee muchas veces. Esto se hace
porque el índice invertido creado por Apache Lucene es actualmente imposible de actualizar (al
menos la mayoría de sus partes).

‣ Para actualizar un documento, Elasticsearch primero obtiene internamente el documento mediante


la solicitud GET, modi ca su campo _source, elimina el documento antiguo e indexa un documento
nuevo utilizando el contenido actualizado.

‣ La actualización de contenido se realiza utilizando scripts en Elasticsearch.

98
fi

ELK Stack

Actualizando documentos
‣ Intentemos ahora actualizar nuestro documento con el identi cador 1 modi cando su campo de
contenido para que contenga la oración Esta es la actualización del documento.

‣ Para hacer esto, necesitamos ejecutar una solicitud POST HTTP en la ruta del documento usando el
punto nal _update REST. Nuestra solicitud para modi car el documento se vería de la siguiente
manera:

‣ POST http://localhost:9200/blog/article/1/_update:
{

Preparado por Jesús Salinas Revelles 99


fi

fi
fi
fi

nal REST /blog/article/1/_update. En el cuerpo


de la solicitud, proporcionamos dos parámetros:

‣ El script de actualización en la propiedad script y los parámetros del script. El script es muy
simple. Recupera el campo _source y modi ca el campo content estableciendo su valor en el valor
del parámetro new_content.

‣ La propiedad params contiene todos los parámetros del script.

100

fi

fi
ELK Stack

Actualizando documentos
‣ Para la ejecución del comando de actualización anterior, Elasticsearch devolvería la siguiente
respuesta:

Preparado por Jesús Salinas Revelles 101


cado, por ejemplo:

‣ POST http://localhost:9200/blog/article/1/_update.
{

102
fi

‣ Como ya habrá notado, Elasticsearch incrementa la versión del documento cuando lo actualiza.
Podemos aprovechar esta funcionalidad y utilizar el bloqueo optimista y evitar conflictos y
sobrescrituras cuando varios procesos o subprocesos acceden al mismo documento al mismo
tiempo.

‣ Puede suponer que su aplicación de indexación puede querer intentar actualizar el documento,
mientras que al usuario le gustaría actualizar el documento mientras realiza un trabajo manual. La
pregunta que surge es: ¿Qué documento debería ser el correcto, el actualizado por la aplicación de
indexación, el actualizado por el usuario o el documento combinado de los cambios? ¿Qué pasa si
los cambios son contradictorios?

‣ Para manejar estos casos, podemos usar el control de versiones.

104

ELK Stack

Búsquedas con query requests


‣ URI request query.
‣ Respuesta de la consulta.
‣ Análisis de la consulta.
‣ Parámetros de la consulta.
‣ Modi cadores de términos en Lucene.

Preparado por Jesús Salinas Revelles 105


fi

ELK Stack

URI request query


‣ Antes de entrar en el maravilloso mundo del lenguaje de consulta Elasticsearch, nos gustaría
presentar la búsqueda de solicitud URI simple pero bastante flexible, que nos permite usar una
consulta Elasticsearch simple combinada con el lenguaje de consulta Lucene.

‣ Todas las consultas en Elasticsearch se envían al endpoint _search.


‣ Puede buscar en un solo índice o en varios índices, y puede restringir su búsqueda a un tipo de
documento determinado o a varios tipos.

‣ Por ejemplo, para buscar en el índice books, ejecutaremos el siguiente comando:


‣ GET http://localhost:9200/books/_search?pretty

Preparado por Jesús Salinas Revelles 106


ELK Stack

URI request query


‣ También podemos ejecutar consultas contra muchos índices. Por ejemplo, si tuviéramos otro índice
llamado clients, también podríamos ejecutar una sola consulta contra estos dos índices de la
siguiente manera:

‣ GET http://localhost:9200/books,clients/_search?pretty
‣ También podemos ejecutar consultas contra todos los datos en Elasticsearch omitiendo los
nombres de índice por completo o con gurando las consultas en _all:

‣ GET http://localhost:9200/_search?pretty
‣ GET http://localhost:9200/_all/_search?pretty

Preparado por Jesús Salinas Revelles 107


fi

ELK Stack

URI request query


‣ De manera similar, también podemos elegir los tipos que queremos usar durante la búsqueda.
‣ Por ejemplo, si queremos buscar solo en el tipo es en el índice books, ejecutamos un comando de la
siguiente manera:

‣ GET http://localhost:9200/books/es/_search?pretty

Preparado por Jesús Salinas Revelles 108


ELK Stack

Respuesta de la consulta
‣ Supongamos que queremos encontrar todos los documentos en el índice books que contienen el
término elasticsearch en el campo title. Podemos hacer esto ejecutando la siguiente consulta:

curl -XGET 'localhost:9200/books/_search?pretty&q=title:elasticsearch'

Preparado por Jesús Salinas Revelles 109


‣ Indexamos el término Elasticsearch y ejecutamos una consulta para elasticsearch y, aunque son
diferentes (uso de mayúsculas), se encontraron los documentos relevantes. La razón de esto es el
análisis.

‣ Durante la indexación, la biblioteca de Lucene analiza los documentos e indexa los datos de acuerdo
con la con guración de Elasticsearch. Por defecto, Elasticsearch le indicará a Lucene que indexe y
analice tanto los datos basados en cadenas como los números. Lo mismo sucede durante la
consulta porque la consulta de solicitud de URI se asigna a la consulta query_string, y Elasticsearch
analiza esta consulta.

‣ Usemos la API de análisis de índices.


‣ https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-analyze.html
‣ Nos permite ver cómo se realiza el proceso de análisis. Con esto, podemos ver qué sucedió con uno
de los documentos durante la indexación y qué sucedió con nuestra frase de consulta durante la
consulta.

112

fi

​​

ELK Stack

Parámetros de la consulta
‣ Introducción.
‣ La consulta.
‣ El campo de búsqueda por defecto.
‣ Analizador.
‣ Operador por defecto.
‣ Campos en la respuesta.
‣ Ordenación.
‣ Búsquedas por tipo.

Preparado por Jesús Salinas Revelles 113


ELK Stack

Introducción
‣ Hay algunos parámetros que podemos usar para controlar el comportamiento de las consultas de
tipo URI.

‣ Lo que hay que recordar es que cada parámetro de la consulta debe concatenarse con el carácter &,
como se muestra en el siguiente ejemplo:

$ curl -XGET ‘localhost:9200/books/_search?pretty&q=published:2013&df=title&explain=true&default_operator=AND'

Preparado por Jesús Salinas Revelles 114


car la consulta con la que queremos que coincidan nuestros


documentos.

‣ Nos permite especi car la consulta utilizando la sintaxis de consulta de Lucene.


‣ Por ejemplo, una consulta simple se vería así:

q=title:elasticsearch

115

fi
fi

car el campo de búsqueda por defecto que debe usarse


cuando no se usa ningún indicador de campo en el parámetro q.

‣ Por defecto, se utilizará el campo _all. Este es el campo que usa Elasticsearch para copiar el
contenido de todos los demás campos.

‣ Ejemplo.

df=title

116

fi

nir el nombre del analizador que se debe utilizar para analizar


nuestra consulta.

‣ Por defecto, nuestra consulta será analizada por el mismo analizador que se utilizó para analizar el
contenido del campo durante la indexación.

117

fi
ELK Stack

Operador por defecto


‣ La propiedad default_operator que se puede establecer a OR o AND, nos permite especi car el
operador booleano predeterminado utilizado para nuestra consulta.

‣ Por defecto se establece a OR, lo que signi ca que una sola coincidencia de término de consulta
será su ciente para que se devuelva un documento.

‣ Establecer este parámetro a AND para una consulta dará como resultado la devolución de los
documentos que coinciden con todos los términos de la consulta.

Preparado por Jesús Salinas Revelles 118


fi
fi

fi
ELK Stack

Campos en la respuesta
‣ Por defecto para cada documento devuelto, Elasticsearch incluirá el nombre del índice, el nombre del
tipo, el identi cador del documento, la puntuación y el campo _source.

‣ Podemos modi car este comportamiento agregando el parámetro eld y especi cando lista de
nombres de campos separados por comas.

‣ Ejemplo:

Preparado por Jesús Salinas Revelles 119


fi
fi

fi

fi
car una ordenación personalizada.

‣ El comportamiento por defecto de Elasticsearch es ordenar los documentos devueltos en orden


descendente del valor del campo _score. Si queremos ordenar nuestros documentos de manera
diferente, necesitamos especi car el parámetro sort.

‣ Por ejemplo, añadiendo sort=published:desc ordenará los documentos en orden descendente en


función del campo published.

‣ Si especi camos una ordenación personalizada, Elasticsearch omitirá el cálculo del campo _score
para los documentos. Puede que este no sea el comportamiento deseado en su caso. Si aún desea
realizar un seguimiento de las puntuaciones de cada documento cuando utiliza una clasi cación
personalizada, debe agregar la propiedad track_scores=true a su consulta.

‣ Tenga en cuenta que el seguimiento de las puntuaciones al realizar una clasi cación personalizada
hará que la consulta sea un poco más lenta (es posible que ni siquiera note la diferencia) debido a la
potencia de procesamiento necesaria para calcular la puntuación.

120
fi
fi

fi

fi

fi
ELK Stack

Modificadores de términos en Lucene


‣ Comodines.
‣ Búsquedas difusas.
‣ Búsquedas por proximidad.
‣ Búsquedas por rango.
‣ Búsquedas por relevancia.
‣ Agrupando conceptos.
‣ Trabajando con campos.

Preparado por Jesús Salinas Revelles 121


ELK Stack

Comodines

Preparado por Jesús Salinas Revelles 122


ELK Stack

Comodines
‣ Ejemplo: búsqueda del término ?DRAM, encontraría coincidencias, por ejemplo, DDRAM y SDRAM:
q=?FDRAM

‣ Ejemplo: búsqueda del término *Select, encontraría coincidencias, por ejemplo, ValueSelect:
q=*Select

Preparado por Jesús Salinas Revelles 123

ELK Stack

Búsquedas difusas
‣ En lugar de buscar términos exactos, Solr busca términos que probablemente sean similares a un
término especí co.

‣ El símbolo (~) se usa al nal de una sola palabra en la búsqueda difusa. Por ejemplo, para buscar un
término similar en ortografía para roam, use roam~, encontrará coincidencias en roam, roams, y
foam.

‣ El parámetro distance (opcional) especi ca el número máximo de modi caciones que tienen lugar
entre 0 y 2. El valor por defecto es 2.

‣ Por ejemplo, buscando por roam~1 buscará términos como roams y foam pero no foams porque
tiene una distancia de modi cación de 2.

Preparado por Jesús Salinas Revelles 124

fi

fi
fi

fi
fi
ELK Stack

Búsquedas por proximidad


‣ Busca términos dentro de una distancia especí ca entre sí.
‣ Para implementar búsquedas de proximidad, especi que un símbolo (~) con un valor numérico al
nal de una frase de búsqueda.

‣ Por ejemplo, para buscar fútbol y voleibol con 20 palabras de diferencia en un documento, haga lo
siguiente:

‣ "soccer volleyball"~20

Preparado por Jesús Salinas Revelles 125


fi

fi
fi

ELK Stack

Búsquedas por proximidad


‣ Ejemplo:
"CORSAIR 1GB"~10

‣ Encuentra dos elementos:


‣ CORSAIR ValueSelect 1GB ...
‣ CORSAIR XMS 2GB (2 x 1GB) ...
‣ Si bajamos a 3 solo encuentra el primero:
"CORSAIR 1GB”~3

Preparado por Jesús Salinas Revelles 126


ELK Stack

Búsquedas por rango


‣ Trabajamos con [] y {}.
‣ [] inclusivo.
‣ {} exclusivo.
‣ Por fechas:
‣ mod_date:[20020101 TO 20030101]
‣ No está limitada a tipo fecha, también podemos usar textos y numéricos.
‣ title:{Aida TO Carmen}
‣ price:[1000 TO 50000]
‣ price:[5 TO 20}

Preparado por Jesús Salinas Revelles 127


ELK Stack

Búsquedas por relevancia


‣ Operador ^:
‣ jakarta^4 apache

‣ "jakarta apache"^4 "Apache Lucene"

Preparado por Jesús Salinas Revelles 128


ELK Stack

Operadores booleanos

Preparado por Jesús Salinas Revelles 129


ELK Stack

Operadores booleanos
‣ Función and: Requiere que ambos términos coincidan. Por ejemplo, buscamos documentos que
contengan soccer y volleyball:

"soccer" AND "volleyball"

‣ Función or: Requiere que al menos uno de los términos para que coincida, por ejemplo, buscar
documentos que contengan soccer o volleyball:

‣ Función not: Requiere que el siguiente término no esté presente:

Preparado por Jesús Salinas Revelles 130



+soccer volleyball

‣ El operador - prohibe el siguiente término, por ejemplo, buscar documentos que contienen soccer
pero no volleyball:

132

nir criterios de búsqueda sobre campos especí cos.

‣ Sintaxis:

nombreCampo:valor

‣ Ejemplos:

134

fi
fi

game:(+soccer +volleyball)

‣ Esta consulta buscará documentos cuyo campo game contiene ambos términos soccer y
volleyball.

135

‣ Shards y réplicas.
‣ Consistencia en las escrituras.
‣ Creando índices.
‣ Con guración de mapeos.

136
fi

ELK Stack

Introducción
‣ Hasta ahora tenemos nuestro clúster Elasticsearch en funcionamiento. También sabemos cómo
usar Elasticsearch REST API para indexar nuestros datos, sabemos cómo recuperarlos y también
sabemos cómo eliminar los datos que ya no necesitamos.

‣ También hemos aprendido a buscar en nuestros datos mediante la búsqueda de solicitudes URI y el
lenguaje de consulta Apache Lucene.

‣ Sin embargo, hasta ahora hemos usado la funcionalidad Elasticsearch que nos permite no
preocuparnos por índices, fragmentos y estructura de datos.

Preparado por Jesús Salinas Revelles 137


ELK Stack

Introducción
‣ Esto no es algo a lo que pueda estar acostumbrado cuando viene del mundo de las bases de datos
SQL, donde necesita la base de datos y las tablas con todas las columnas creadas por adelantado.

‣ En general, necesitaba describir la estructura de datos para poder colocar datos en la base de datos.
‣ Elasticsearch no tiene esquema y, por defecto, crea índices automáticamente y, por lo tanto,
podemos simplemente instalarlo e indexar los datos sin necesidad de preparativos.

‣ Sin embargo, esta no suele ser la mejor situación cuando se trata de entornos de producción en los
que desea controlar el análisis de sus datos. Por eso, comenzaremos mostrándole cómo administrar
sus índices y luego lo guiaremos a través del mundo de los mapeos en Elasticsearch.

Preparado por Jesús Salinas Revelles 138

ELK Stack

Shards y réplicas
‣ Anteriormente hemos indicado que los índices en Elasticsearch se crean a partir de uno o más
shards (fragmentos).

‣ Cada uno de esos fragmentos contiene parte del conjunto de documentos y cada fragmento es un
índice de Lucene independiente.

‣ Además de eso, cada fragmento puede tener réplicas: copias físicas del fragmento primario en sí.
Cuando creamos un índice, podemos decirle a Elasticsearch a partir de cuántos fragmentos debe
crearse.

‣ El número por defecto de fragmentos que usa Elasticsearch es 5 y cada índice también contendrá
una única réplica. La con guración por defecto se puede cambiar estableciendo
index.number_of_shards e index.number_of_replicas propiedades en el archivo de con guración
elasticsearch.yml.

Preparado por Jesús Salinas Revelles 139


fi

fi
ELK Stack

Shards y réplicas
‣ Cuando se utilizan los por defecto, terminaremos con cinco índices de Apache Lucene con los que se
construye nuestro índice de Elasticsearch y una réplica para cada uno de ellos. Entonces, con cinco
fragmentos y una réplica, en realidad obtendríamos 10 fragmentos. Esto se debe a que cada
fragmento obtendría su propia copia, por lo que el número total de fragmentos en el clúster sería 10.

‣ Dividir índices de esta manera nos permite distribuir los fragmentos por el clúster. Lo bueno de eso
es que todos los fragmentos se distribuirán automáticamente por todo el clúster.

‣ Si tenemos un solo nodo, Elasticsearch colocará los cinco fragmentos primarios en ese nodo y
dejará las réplicas sin asignar, porque Elasticsearch no asigna fragmentos y sus réplicas al mismo
nodo.

‣ La razón de esto es simple: si un nodo colapsara, perderíamos tanto la fuente principal de datos
como todas las copias. Por lo tanto, si tiene un nodo Elasticsearch, no se preocupe si no se asignan
réplicas, es algo que se espera. Por supuesto, cuando tienes su cientes nodos para que
Elasticsearch asigne todas las réplicas (además de los fragmentos), no es bueno no tenerlos
asignados y debes buscar las causas probables de esa situación.

Preparado por Jesús Salinas Revelles 140

fi

ELK Stack

Shards y réplicas
‣ Lo que hay que recordar es que tener fragmentos y réplicas no es gratis.
‣ En primer lugar, cada réplica necesita espacio en disco adicional, exactamente la misma cantidad de
espacio que necesita el fragmento original. Entonces, si tenemos 3 réplicas para nuestro índice, en
realidad necesitaremos 4 veces más espacio. Si nuestro fragmento principal pesa 100 GB en total,
con 3 réplicas, necesitaríamos 400 GB - 100 GB para cada réplica. Sin embargo, este no es el único
coste.

‣ Cada réplica es un índice de Lucene por sí solo y Elasticsearch necesita algo de memoria para
manejar eso. Cuantos más fragmentos haya en el clúster, más memoria se utilizará.

‣ Y nalmente, tener réplicas signi ca que tendremos que hacer una indexación en cada una de las
réplicas, además de la indexación en el fragmento principal. Existe una noción de réplicas de sombra
que pueden copiar todo el índice binario, pero, en la mayoría de los casos, cada réplica hará su
propia indexación. Lo bueno de las réplicas es que Elasticsearch intentará distribuir la consulta y
obtener solicitudes de manera uniforme entre los fragmentos y sus réplicas, lo que signi ca que
podemos escalar nuestro clúster horizontalmente usándolos.

Preparado por Jesús Salinas Revelles 141


fi

fi

fi
ELK Stack

Shards y réplicas
‣ Resumiendo:
‣ Tener más fragmentos en el índice nos permite distribuir el índice entre más servidores y
paralelizar las operaciones de indexación y así tener un mejor rendimiento de indexación.

‣ Dependiendo de su implementación, tener más fragmentos puede aumentar el rendimiento de las


consultas y reducir la latencia de las consultas, especialmente en entornos que no tienen una
gran cantidad de consultas por segundo.

‣ Tener más fragmentos puede ser más lento en comparación con una consulta de un solo
fragmento, porque Elasticsearch necesita recuperar los datos de varios servidores y combinarlos
en la memoria, antes de devolver los resultados nales de la consulta.

‣ Tener más réplicas da como resultado un clúster más resistente, porque cuando el fragmento
principal no está disponible, su copia asumirá esa función. Básicamente, tener una sola réplica
nos permite perder una copia de un fragmento y seguir sirviendo todos los datos. Tener dos
réplicas nos permite perder dos copias del fragmento y seguir viendo todos los datos.

Preparado por Jesús Salinas Revelles 142


fi

ELK Stack

Shards y réplicas
‣ Resumiendo (cont.):
‣ Cuanto mayor sea el recuento de réplicas, mayor rendimiento de consultas tendrá el clúster. Esto
se debe a que cada réplica puede proporcionar los datos que tiene de forma independiente de
todas las demás.

‣ Mayor cantidad de fragmentos (primarios y réplicas) provocará la necesidad de tener más


memoria para Elasticsearch.

Preparado por Jesús Salinas Revelles 143


ELK Stack

Shards y réplicas
‣ Entonces, ¿cuántos fragmentos y réplicas deberíamos tener para nuestros índices?
‣ Eso depende. Creemos que los valores por defecto son bastante buenos, pero nada puede
reemplazar una buena prueba.

‣ Tenga en cuenta que el número de réplicas no es muy importante porque puede ajustarla en un
clúster en vivo después de la creación del índice. Puede eliminarlos y agregarlos si lo desea y tiene
los recursos para ejecutarlos.

‣ Desafortunadamente, esto no es cierto cuando se trata del número de fragmentos. Una vez que haya
creado su índice, la única forma de cambiar la cantidad de fragmentos es crear otro índice y volver a
indexar sus datos.

Preparado por Jesús Salinas Revelles 144


ELK Stack

Consistencia en las escrituras


‣ Elasticsearch nos permite controlar la consistencia de la escritura para evitar que ocurran escrituras
cuando no deberían.

‣ Por defecto, la operación de indexación de Elasticsearch se realiza correctamente cuando la


escritura se realiza correctamente en el quórum de los fragmentos activos, es decir, el 50% de los
fragmentos activos más uno.

‣ Podemos controlar este comportamiento agregando action.write_consitency a nuestro archivo


elasticsearch.yml o agregando el parámetro de consistencia a nuestra solicitud de índice. Las
propiedades mencionadas pueden tomar los siguientes valores:

‣ quorum: valor por defecto, que requiere el 50% más 1 fragmentos activos para que la operación de
índice sea exitosa.

‣ one: requiere solo un fragmento activo para que la operación de índice sea exitosa
‣ all: requiere que todos los fragmentos activos sean exitosos para que la operación de índice sea
exitosa.

Preparado por Jesús Salinas Revelles 145


ELK Stack

Creando índices
‣ Operación básica.
‣ Cambiando la creación automática de índices.
‣ Con guración del índice.
‣ Borrado de índice.

Preparado por Jesús Salinas Revelles 146


fi

ELK Stack

Operación básica
‣ La forma más sencilla de crear un índice es ejecutar una solicitud PUT HTTP con el nombre del
índice que queremos crear.

‣ Por ejemplo, para crear un índice llamado factura, podríamos usar el siguiente comando:
‣ PUT http://localhost:9200/factura
‣ Si todo va bien la respuesta será:
{

Preparado por Jesús Salinas Revelles 147


‣ Por ejemplo, un simple error tipográ co durante la creación del índice puede llevar a la creación de
cientos de índices no utilizados y hacer que la información del estado del clúster sea más grande de
lo que debería ser, ejerciendo más presión sobre Elasticsearch y la JVM subyacente.

‣ Por eso, podemos desactivar la creación automática de índices agregando una propiedad simple al
archivo de con guración elasticsearch.yml:

action.auto_create_index: false

148
fi
fi

ELK Stack

Cambiando la creación automática de índices


‣ Detengámonos un momento y analicemos la propiedad action.auto_create_index, porque nos
permite hacer cosas más complicadas que solo permitir y deshabilitar la creación automática de
índices.

‣ La propiedad mencionada nos permite usar patrones que especi can los nombres de índice que se
deben permitir que se creen automáticamente y cuáles no.

‣ Por ejemplo, supongamos que nos gustaría permitir la creación automática de índices para índices
que comiencen con el pre jo logs y nos gustaría no permitir todos los demás.

action.auto_create_index: +logs*,-*

Preparado por Jesús Salinas Revelles 149


fi

fi
ELK Stack

Configuración del índice


‣ La creación manual de índices también es necesaria cuando queremos pasar opciones de
con guración no predeterminadas durante la creación de índices. Por ejemplo, número inicial de
fragmentos y réplicas.

‣ Podemos hacerlo al incluir la carga útil JSON con la con guración como el cuerpo de la solicitud
PUT HTTP.

‣ Por ejemplo, si quisiéramos decirle a Elasticsearch que nuestro índice blog solo debe tener un solo
fragmento y dos réplicas inicialmente, se podría usar el siguiente comando:

‣ PUT http://localhost:9200/blog con el siguiente json:


{

Preparado por Jesús Salinas Revelles 150


fi

fi

‣ Mecanismo de determinación de tipo.


‣ Mapeo de la estructura de un índice.

151

ELK Stack

Introducción
‣ Si está acostumbrado a las bases de datos SQL, es posible que sepa que antes de poder comenzar a
insertar los datos en la base de datos, debe crear un esquema, que describirá cómo son sus datos.

‣ Aunque Elasticsearch es un motor de búsqueda sin esquema y puede descubrir la estructura de


datos sobre la marcha, creemos que controlar la estructura y, por lo tanto, de nirla nosotros mismos
es una mejor manera.

‣ El mecanismo de determinación del tipo de campo no va a adivinar el futuro. Por ejemplo, si primero
envía un valor entero, como 60, y después envía un valor flotante como 70.23 para el mismo campo,
puede ocurrir un error o Elasticsearch simplemente cortará la parte decimal del valor flotante (que en
realidad es lo que sucede). Esto se debe a que Elasticsearch primero establecerá el tipo de campo a
entero e intentará indexar el valor flotante en el campo entero, lo que provocará la reducción del
punto decimal en el número de punto flotante.

Preparado por Jesús Salinas Revelles 152


fi

ELK Stack

Mecanismo de determinación de tipo


‣ Introducción.
‣ Desactivando el mecanismo de determinación de tipo.
‣ Ajuste del mecanismo para tipos numéricos.
‣ Ajuste del mecanismo para tipos fechas.

Preparado por Jesús Salinas Revelles 153


ELK Stack

Introducción
‣ Antes de comenzar a describir cómo crear asignaciones manualmente, queremos volver al algoritmo
de determinación automática de tipo utilizado en Elasticsearch.

‣ Como ya dijimos, Elasticsearch puede intentar adivinar el esquema de nuestros documentos


mirando el JSON a partir del cual se construyó el documento. Debido a que JSON está estructurado,
parece fácil de hacer.

‣ Por ejemplo, las cadenas están entre comillas, los booleanos se de nen con palabras especí cas y
los números son solo unos pocos dígitos. Este es un truco simple, pero generalmente funciona.

Preparado por Jesús Salinas Revelles 154


fi
fi
ELK Stack

Introducción
‣ Por ejemplo, veamos el siguiente documento:

‣ El documento anterior tiene dos campos.


‣ Al campo eld1 será de tipo entero (para ser precisos, a ese campo se le dará un tipo long).
‣ El segundo campo, llamado eld2, recibirá un tipo de cadena, porque está entre comillas.
‣ Por supuesto, para algunos casos de uso, este puede ser el comportamiento deseado. Sin embargo,
si de alguna manera rodeáramos todos los datos usando comillas (que no es la mejor idea de todos
modos), nuestra estructura de índice contendría solo campos de tipo cadena.

Preparado por Jesús Salinas Revelles 155


fi
fi

gurándola a false. Podemos hacerlo ejecutando el siguiente comando


para crear el índice:

curl -XPUT 'localhost:9200/sites' -d '{

‣ Al hacer eso, le estamos indicando a Elasticsearch que no queremos que adivine el tipo de nuestros
documentos para el índice sites y que proporcionaremos las asignaciones nosotros mismos.

‣ Si intentamos indexar algún documento de ejemplo en el índice sites, se producirá un error. Esto se
debe a que no creamos ninguna mapeo, no se creó ningún esquema para los documentos.
Elasticsearch no pudo crear uno para nosotros porque no lo permitimos y el comando de indexación
falló.

156

fi

‣ Los documentos que indexamos pueden llegar de diferentes lugares y algunos sistemas pueden
incluir comillas para todos los campos del documento. Esto puede generar problemas.

‣ Debido a eso, Elasticsearch nos permite habilitar la veri cación de valores de campos más agresivos
para campos numéricos estableciendo la propiedad numeric_detection a true en la de nición de
asignaciones.

157

fi
fi

ELK Stack

Ajuste del mecanismo para tipos numéricos


‣ Por ejemplo, supongamos que queremos crear un índice llamado users y queremos que tenga el tipo
user en el que queremos un análisis de campos numéricos más agresivo. Para hacer eso, usaremos
el siguiente comando:

curl -XPUT http://localhost:9200/users/?pretty -d '{

Preparado por Jesús Salinas Revelles 158


curl -XPOST http://localhost:9200/users/user/1 -d '{"name": "User 1", "age": "20"}'

‣ Anteriormente, con la con guración por defecto, el campo age se establecería en tipo de cadena.
‣ Con la propiedad numeric_detection establecida en true, el tipo de campo de edad se establecerá en
long. Podemos veri car eso ejecutando el siguiente comando (recuperará las asignaciones para
todos los tipos en el índice de usuarios):

curl -XGET 'localhost:9200/users/_mapping?pretty'

159
fi
fi

ELK Stack

Ajuste del mecanismo para tipos fechas


‣ Otro tipo de datos que causa problemas son los campos de tipo fechas.
‣ Las fechas pueden tener diferentes formatos, por ejemplo, 2015-10-01 11:22:33 es una fecha
adecuada y también lo es 2015-10-01T11:22:33+00.

‣ Por eso, Elasticsearch intenta hacer coincidir los campos con marcas de tiempo o cadenas que
coinciden con algún formato de fecha determinado. Si esa operación de coincidencia tiene éxito, el
campo se trata como uno basado en la fecha.

Preparado por Jesús Salinas Revelles 160


ELK Stack

Ajuste del mecanismo para tipos fechas


‣ Si sabemos cómo se generan nuestros campos de fecha, podemos ayudar a Elasticsearch
proporcionando una lista de formatos de fecha reconocidos utilizando la propiedad
dynamic_date_formats, que nos permite especi car la matriz de formatos.

‣ Veamos el siguiente comando para crear un índice:

curl -XPUT 'http://localhost:9200/blog/' -d '{

Preparado por Jesús Salinas Revelles 161


fi

‣ También hemos utilizado la propiedad dynamic_date_formats con un formato de fecha único que
dará como resultado que Elasticsearch utilice el tipo fecha para campos que coincidan con el
formato de nido.

‣ Elasticsearch usa la biblioteca joda-time para de nir los formatos de fecha:


‣ http://joda-time.sourceforge.net/api-release/org/joda/time/format/DateTimeFormat.html

162
fi

fi

ELK Stack

Ajuste del mecanismo para tipos fechas


‣ Con el índice anterior, ahora podemos intentar indexar un nuevo documento usando el siguiente
comando:

curl -XPUT localhost:9200/blog/article/1 -d ‘{

‣ Elasticsearch, por supuesto, indexará ese documento, pero veamos las asignaciones creadas para
nuestro índice:

Preparado por Jesús Salinas Revelles 163


‣ De nición de tipos y tipos.


‣ Usando analizadores, tokenizadores y ltros

165
fi

fi
ELK Stack

Introducción
‣ Cada dato tiene su propia estructura. Algunos son muy simples y otros incluyen relaciones de
objetos complicadas, documentos secundarios y propiedades anidadas.

‣ En cada caso, necesitamos tener un esquema en Elasticsearch llamado mapeos que de na cómo se
ven los datos.

‣ Por supuesto, podemos usar la naturaleza sin esquema de Elasticsearch, pero podemos y
generalmente queremos preparar las asignaciones por adelantado, para que sepamos cómo se
manejan los datos.

‣ Vamos a usar un solo tipo en el índice. Por supuesto, Elasticsearch como sistema multiusuario nos
permite tener varios tipos en un solo índice, pero queremos simpli car el ejemplo para que sea más
fácil de entender. Vamos a crear un índice llamado posts que contendrá datos para documentos en
de tipo post.

Preparado por Jesús Salinas Revelles 166


fi

fi
ELK Stack

Introducción
‣ También asumimos que el índice contendrá la siguiente información:
‣ Identi cador único de la publicación del blog.
‣ Nombre de la publicación del blog.
‣ Fecha de publicación.
‣ Contenido: texto de la publicación en sí.

Preparado por Jesús Salinas Revelles 167


fi

ELK Stack

Introducción
‣ En Elasticsearch, las asignaciones, como con casi todas las comunicaciones, se envían como
objetos JSON en el cuerpo de la solicitud.

‣ Entonces, si queremos crear las asignaciones más simples que coincidan con nuestra necesidad, se
verá de la siguiente manera (almacenamos las asignaciones en el archivo posts.json, por lo que
podemos enviarlo fácilmente):

Preparado por Jesús Salinas Revelles 168


‣ Campos.
‣ Tipos básicos.
‣ Atributos comunes.
‣ Ejemplos.

170

ELK Stack

Introducción
‣ La de nición de mapeos en Elasticsearch es solo otro objeto JSON, por lo que debe iniciarse
correctamente y terminar con llaves. Todas las de niciones de asignaciones están anidadas dentro
de un único objeto de asignaciones.

‣ En nuestro ejemplo, teníamos un solo tipo de publicación, pero podemos tener varios.
‣ Por ejemplo, si quisiéramos tener más de un tipo en nuestras asignaciones, solo necesitamos
separarlos con un carácter de coma. Supongamos que nos gustaría tener un tipo de usuario
adicional en nuestro índice de publicaciones.

Preparado por Jesús Salinas Revelles 171


fi

fi

ELK Stack

Introducción
‣ Ejemplo:
{

Preparado por Jesús Salinas Revelles 172


nición de mapeo es solo un nombre y un objeto que describe las propiedades
del campo.

‣ Por ejemplo, podemos tener un campo de nido como el siguiente:


"body": { "type":"string", "store":"yes", "index":"analyzed" }

‣ La de nición de campo anterior comienza con un nombre - body. Después de eso, tenemos un
objeto con tres propiedades: el tipo de campo (la propiedad type), si el valor del campo original debe
almacenarse (la propiedad store) y si el campo debe indexarse y cómo (la propiedad index).

‣ Y, por supuesto, varias de niciones de campo se separan entre sí mediante el carácter de coma, al
igual que otros objetos JSON.

173
fi

fi
fi
fi

ELK Stack

Tipos básicos
‣ A cada tipo de campo en Elasticsearch se le puede asignar uno de los tipos de núcleo
proporcionados. Los tipos principales de Elasticsearch son los siguientes:

‣ String.
‣ Number (integer, long, float, double).
‣ Date.
‣ Boolean.
‣ Binary.

Preparado por Jesús Salinas Revelles 174

ELK Stack

Atributos comunes
‣ Antes de continuar con todas las descripciones de tipos principales, nos gustaría discutir algunos
atributos comunes que puede usar para describir todos los tipos (excepto el binario):

‣ index_name:
‣ Este atributo de ne el nombre del campo que se almacenará en el índice.
‣ Si no está de nido, el nombre se establecerá con el nombre del objeto con el que está de nido
el campo.

‣ Por lo general, no es necesario establecer esta propiedad, pero puede resultar útil en algunos
casos; por ejemplo, cuando no tiene control sobre el nombre de los campos en los documentos
JSON que se envían a Elasticsearch.

Preparado por Jesús Salinas Revelles 175


fi

fi

fi
ELK Stack

Atributos comunes
‣ (cont.):
‣ index:
‣ Este atributo puede tomar los valores analyzed y no y, para campos basados en cadenas,
también se puede establecer en el valor adicional not_analyzed.

‣ Si se con gura como analyzed, el campo se indexará y, por lo tanto, se podrá buscar. Este es el
valor por defecto.

‣ Si se establece en no, no podrá buscar en ese campo.


‣ En el caso de campos basados en cadenas, hay una opción adicional, not_analyzed. Esto,
cuando se establece, signi cará que el campo se indexará pero no se analizará. Por lo tanto, el
campo se escribe en el índice tal como se envió a Elasticsearch y solo se contará una
coincidencia perfecta durante una búsqueda. La consulta deberá incluir exactamente el mismo
valor que el valor en el índice.

Preparado por Jesús Salinas Revelles 176


fi

fi
​​

​​
ELK Stack

Atributos comunes
‣ (cont.):
‣ store:
‣ Este atributo puede tomar los valores yes y no y especi ca si el valor original del campo debe
escribirse en el índice.

‣ El valor por defecto es no, lo que signi ca que Elasticsearch no almacenará el valor original del
campo e intentará usar el campo _source (el JSON que representa el documento original que
se envió a Elasticsearch) cuando desee recuperar el valor del campo.

‣ Los campos almacenados no se usan para buscar, sin embargo, pueden usarse para resaltar si
están habilitados (lo que puede ser más e ciente que cargar el campo _source en caso de que
sea grande).

Preparado por Jesús Salinas Revelles 177

fi
fi
fi

ELK Stack

Atributos comunes
‣ (cont.):
‣ doc_values:
‣ Este atributo puede tomar los valores true y false.
‣ Cuando vale true, Elasticsearch creará una estructura especial en el disco durante la
indexación para los campos no tokenizados (como campos de cadenas no analizados, campos
basados en números, campos booleanos y campos de fecha). Esta estructura es muy e ciente
y Elasticsearch la utiliza para operaciones que requieren datos no invertidos, como
agregaciones, ordenación o secuencias de comandos. Comenzando con Elasticsearch 2.0

‣ El valor por defecto es true para los campos no tokenizados.


‣ Establecer este valor a falso dará como resultado que Elasticsearch use la caché de datos de
campo en lugar de valores de documento, que tiene una mayor demanda de memoria, pero
puede ser más rápido en algunas situaciones raras.

Preparado por Jesús Salinas Revelles 178


​​

fi

ELK Stack

Ejemplos
‣ Tipo cadena:
"body" : { "type" : "string", "store" : "yes", "index" : "analyzed" }

‣ Tipo numérico:
"price" : { "type" : "

‣ Tipo booleano:

‣ Tipo binario:

Preparado por Jesús Salinas Revelles 179


"published" : { "type" : "date", "format" : "YYYY-mm-dd" }

‣ Tipo Ip:
"address" : { "type" : "ip" }

180

ELK Stack

Usando analizadores, tokenizadores y filtros


‣ ¿Qué es el análisis de texto?
‣ De nición de los conceptos.
‣ Trabajando con elasticsearch.
‣ Analizadores básicos.
‣ Especi cando analizadores para un campo.
‣ De niendo analizadores.

Preparado por Jesús Salinas Revelles 181


fi
fi
fi

ELK Stack

¿Qué es el análisis de texto?


‣ El análisis de texto es un mecanismo que tiene lugar en dos fases:
‣ Durante la fase de indexación, optimizando los términos de entrada, alimentando la información,
generando el flujo de tokens y construyendo los índices.

‣ Durante la fase de consulta, optimizando los términos de la consulta, generando la secuencia de


tokens, buscando coincidencias con el término generado en el momento del índice y proporcione
resultados.

Preparado por Jesús Salinas Revelles 182


ELK Stack

¿Qué es el análisis de texto?


‣ Estos son los pasos comunes que normalmente usa el motor en un proceso de análisis:
‣ Eliminando stop words: letras/palabras comunes como a, an, the, at, to, for, etc, se eliminan de la
cadena de texto. De esa forma, Solr no dará resultados para estas palabras comunes. Estas
palabras se con guran en un archivo de texto (por ejemplo, stopwords_en.txt) y este archivo debe
importarse en la con guración de análisis.

‣ Añadiendo sinónimos: Solr lee sinónimos del archivo de texto (synonyms.txt) y los agrega a la
secuencia de tokens. Todos los sinónimos deben precon gurarse en el archivo de texto, Football y
Soccer, Country y Nation, etc.

‣ Derivando palabras: Solr transforma las palabras en una forma básica utilizando reglas
especí cas del idioma.

‣ Se transforma removing → remove (eliminando ing).


‣ Se transforma searches → search (se convierte en singular).
‣ Pasando a minúscula.
Preparado por Jesús Salinas Revelles 183
fi
fi
fi

fi

ELK Stack

¿Qué es el análisis de texto?


‣ Pero en la vida real, las cosas pueden no ser tan fáciles y sencillas. No podemos suponer qué tipo de
patrón de entrada de búsqueda en qué idioma pueden usar los usuarios nales.

‣ Para cumplir con todos los requisitos posibles, la inteligencia de Elasticsearch se apoya en sus tres
herramientas:

‣ Analizadores.
‣ Tokenizadores.
‣ Filtros.

Preparado por Jesús Salinas Revelles 184


fi

ELK Stack

Definición de los conceptos


‣ Los analizadores se usan durante la carga de documentos, cuando el documento se está indexando
y cuando se realiza una consulta. Un analizador examina el texto de los campos y genera un flujo de
tokens. Un analizador puede ser una sola clase o un conjunto de tokenizadores y ltros.

‣ Los tokenizadores se encargan de romper la información en unidades léxicas o tokens.


‣ Los ltros examinan el flujo de tokens y lo guardan, transforman, rechazan o crean uno nuevo.
‣ Los tokenizadores y ltros pueden combinarse. Una secuencia de tokenizadores y ltros es un
analizador y el resultado de su salida puede utilizarse para construir índices o para buscar
coincidencias en una búsqueda.

Preparado por Jesús Salinas Revelles 185


fi
fi
fi
fi

ELK Stack

Trabajando con elasticsearch


‣ Lo mejor de Elasticsearch es que aprovecha las capacidades de análisis de Apache Lucene.
‣ Esto signi ca que para los campos que se basan en el tipo de cadena, podemos especi car qué
analizador debe usar Elasticsearch.

‣ El analizador es una funcionalidad que se utiliza para analizar datos o consultas de la forma que nos
interesa.

‣ Por ejemplo, cuando dividimos palabras sobre la base de espacios en blanco y caracteres en
minúscula, no tenemos que preocuparnos de que los usuarios envíen palabras en minúsculas o en
mayúsculas. Esto signi ca que Elasticsearch, elasticsearch y ElAstIcSeaRCh se tratarán como la
misma palabra.

Preparado por Jesús Salinas Revelles 186


fi
fi

fi

ELK Stack

Trabajando con elasticsearch


‣ Elasticsearch no solo nos permite usar los analizadores que incluye por defecto, sino también crear
nuestras propias con guraciones.

‣ También podemos usar diferentes analizadores en el momento de la indexación y diferentes


analizadores en el momento de la consulta. Podemos elegir cómo queremos que se procesen
nuestros datos en cada etapa del proceso de búsqueda.

Preparado por Jesús Salinas Revelles 187


fi

ELK Stack

Analizadores básicos
‣ standard:
‣ Este analizador es conveniente para la mayoría de los idiomas europeos (consulte https://
www.elastic.co/guide/en/elasticsearch/reference/current/analysis-standard-analyzer.html para
obtener la lista completa de parámetros).

‣ simple:
‣ Este analizador divide el valor proporcionado en caracteres que no son letras y los convierte a
minúsculas.

‣ whitespace:
‣ Este analizador divide el valor proporcionado sobre la base de caracteres de espacio en blanco.

Preparado por Jesús Salinas Revelles 188


ELK Stack

Analizadores básicos
‣ stop:
‣ Es similar a un analizador simple, pero además de la funcionalidad del analizador simple, ltra los
datos en base al conjunto de palabras stop. Consulte la siguiente url para ver la lista completa de
parámetros:

‣ https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-stop-analyzer.html
‣ keyword:
‣ Este es un analizador muy simple que simplemente pasa el valor proporcionado. Logrará lo
mismo especi cando un campo en particular como not_analyzed.

Preparado por Jesús Salinas Revelles 189

fi
fi

ELK Stack

Analizadores básicos
‣ pattern:
‣ Este analizador permite una separación de texto flexible mediante el uso de expresiones
regulares.

‣ Consulte https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-pattern-
analyzer.html para obtener la lista completa de parámetros.

‣ El punto clave para recordar cuando se trata del analizador de patrones es que el patrón
proporcionado debe coincidir con los separadores de las palabras, no con las palabras en sí.

‣ language:
‣ Este analizador está diseñado para trabajar con un idioma especí co. La lista completa de
idiomas admitidos por este analizador se puede encontrar en la siguiente url:

‣ https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-lang-analyzer.html

Preparado por Jesús Salinas Revelles 190


fi

ELK Stack

Analizadores básicos
‣ snowball:
‣ Este es un analizador que es similar al estándar, pero además proporciona el algoritmo de
derivación. Para más información:

‣ https://www.elastic.co/ guide/en/elasticsearch/reference/current/analysis-snowball-
analyzer.html

Preparado por Jesús Salinas Revelles 191


ELK Stack

Especificando analizadores para un campo


‣ Al mapear un índice, puede utilizar el parámetro de mapeo del analizador para especi car un
analizador para cada campo de texto.

‣ La siguiente solicitud de API de creación de índice establece el analizador de espacios en blanco


como analizador para el campo de título:

curl -X PUT "localhost:9200/my-index-000001?pretty" -H 'Content-Type: application/json' -d'

Preparado por Jesús Salinas Revelles 192


fi
car los analizadores aplicados en las búsquedas:

curl -X PUT "localhost:9200/my-index-000001?pretty" -H 'Content-Type: application/json' -d'

193
fi
nir nuevos
sin necesidad de escribir una sola línea de código Java.

‣ Para hacer eso, necesitamos agregar una sección adicional a nuestro archivo de mapeos, es decir, la
sección de con guración, que contiene información adicional utilizada por Elasticsearch durante la
creación del índice.

194
fi

fi
ELK Stack

Definiendo analizadores
‣ El siguiente fragmento de código muestra cómo podemos de nir nuestra sección de con guración
personalizada:

"settings" : {

Preparado por Jesús Salinas Revelles 195


fi
fi
camos qué queremos que esté presente un nuevo analizador llamado en.

‣ Cada analizador se construye a partir de un solo tokenizador y múltiples ltros. Una lista completa
de los predeterminados

‣ Los ltros y tokenizadores se pueden encontrar en:


‣ https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-tokenizers.html
‣ Nuestro analizador en incluye el tokenizador estándar y tres ltros: asciifolding y minúsculas, que
son los que están disponibles por defecto, y un ourEnglishFilter personalizado, que es un ltro que
hemos de nido.

196
fi
fi
fi

fi
fi

fi

ELK Stack

Activando la seguridad mínima


‣ Vamos a proceder a habilitar las funciones de seguridad de Elasticsearch y luego crearemos
contraseñas para los usuarios integrados. Puede agregar más usuarios más adelante, pero el uso de
los usuarios integrados simpli ca el proceso de habilitar la seguridad para su clúster.

‣ Nota: El escenario de seguridad mínima no es su ciente para los clústeres en modo de


producción. Si su clúster tiene varios nodos, debe habilitar la seguridad mínima y luego con gurar
Transport Layer Security (TLS) entre los nodos.

‣ Cuando usa la licencia básica, las funciones de seguridad de Elasticsearch están deshabilitadas por
defecto. Habilitar las funciones de seguridad de Elasticsearch activa la autenticación básica para
que pueda ejecutar un clúster local con autenticación de nombre de usuario y contraseña.

‣ Primero debemos parar elasticsearch y después modi car el chero elasticsearch.yml


introduciendo:

xpack.security.enabled: true

Preparado por Jesús Salinas Revelles 197


fi

fi
fi
fi

fi
ELK Stack

Activando la seguridad mínima


‣ Una vez hecho esto, debemos crear las contraseñas para los usuarios por defecto:
‣ Se arranca elasticsearch:
$ ./bin/elasticsearch

‣ En otro terminal ejecutamos uno de los siguientes comandos:


./bin/elasticsearch-setup-passwords auto

‣ El uso del parámetro auto crea contraseñas generadas aleatoriamente en la consola que puede
cambiar más tarde si es necesario.

./bin/elasticsearch-setup-passwords interactive

‣ Si desea utilizar sus propias contraseñas, ejecute el comando con el parámetro interactive. El uso
de este modo le guía a través de la con guración de contraseñas para todos los usuarios
integrados.

Preparado por Jesús Salinas Revelles 198


fi

ELK Stack

Activando la seguridad mínima


‣ Una vez nalizada la operación debemos tener los siguientes usuarios correctamente con gurados:
‣ elastic: superusuario.
‣ apm_elastic.
‣ kibana_system.
‣ logstash_system.
‣ beats_system.
‣ remote_monitoring_user.

Preparado por Jesús Salinas Revelles 199


fi

fi

ELK Stack

Búsquedas y analíticas con ElasticSearch


‣ Búsquedas con ElasticSearch.
‣ Analíticas con ElasticSearch.

Preparado por Jesús Salinas Revelles 200


ELK Stack

Búsquedas con ElasticSearch


‣ Introducción.
‣ Conceptos generales.
‣ Consultas básicas.
‣ Consulta bool.

Preparado por Jesús Salinas Revelles 201


ELK Stack

Introducción
‣ Hasta ahora, cuando hemos buscado nuestros datos, usamos la API REST y una consulta simple o la
solicitud GET.

‣ De manera similar, cuando estábamos cambiando el índice, también usamos la API REST y enviamos
los datos estructurados en formato JSON a Elasticsearch.

‣ Independientemente del tipo de operación que quisiéramos realizar, ya sea un cambio de mapeo o
una indexación de documentos, usamos el cuerpo de solicitud estructurado JSON para informar a
Elasticsearch sobre los detalles de la operación.

‣ Una situación similar ocurre cuando queremos generar más que una simple consulta a
Elasticsearch, la estructuramos usando objetos JSON y la enviamos a Elasticsearch en el cuerpo de
la solicitud. Esto se denomina consulta DSL.

Preparado por Jesús Salinas Revelles 202


ELK Stack

Conceptos generales
‣ Consultas simples.
‣ Paginación y tamaño.
‣ Versión del documento.
‣ Limitando la puntuación.
‣ Seleccionando campos para la respuesta.
‣ Filtrado en source.

Preparado por Jesús Salinas Revelles 203


ELK Stack

Consultas simples
‣ La forma más sencilla de consultar Elasticsearch es utilizar la consulta de solicitud de URI. Por
ejemplo, para buscar la palabra crime en el campo del title, puede enviar una consulta usando el
siguiente comando:

$ curl -XGET 'localhost:9200/library/book/_search?q=title:crime&pretty'

‣ Esta es una forma muy simple, pero limitada, de enviar consultas a Elasticsearch. Si miramos desde
el punto de vista de la consulta DSL de Elasticsearch, la consulta anterior es una consulta
query_string. Busca los documentos que tienen el término crime en el campo title y se pueden
reescribir de la siguiente manera:

curl -XGET 'localhost:9200/library/book/_search?pretty' -d '{

Preparado por Jesús Salinas Revelles 204


‣ from: esta propiedad especi ca el documento del que queremos tener nuestros resultados. Su
valor por defecto es 0, lo que signi ca que queremos obtener nuestros resultados del primer
documento.

‣ size: esta propiedad especi ca el número máximo de documentos que queremos como resultado
de una sola consulta (que por defecto es 10). Por ejemplo, si solo nos interesan los resultados de
las agregaciones y no nos importan los documentos devueltos por la consulta, podemos
establecer este parámetro en 0.

205

fi
fi
fi

ELK Stack

Paginación y tamaño
‣ Si queremos que nuestra consulta obtenga documentos a partir del décimo elemento de la lista y
obtenga 20 documentos, enviamos la siguiente consulta:

curl -XGET 'localhost:9200/library/book/_search?pretty' -d '{

Preparado por Jesús Salinas Revelles 206


‣ Para hacer esto, necesitamos agregar la propiedad version con el valor de true al nivel superior de
nuestro objeto JSON. Entonces, la consulta nal, que solicita la información de la versión, tendrá el
siguiente aspecto:

curl -XGET 'localhost:9200/library/book/_search?pretty' -d '{

207
fi

ltrar los
resultados sobre la base de un valor de puntuación mínimo que el documento debe tener para ser
considerado una coincidencia.

‣ Para utilizar esta función, debemos proporcionar el valor min_score en el nivel superior de nuestro
objeto JSON con el valor de la puntuación mínima.

‣ Por ejemplo, si queremos que nuestra consulta solo devuelva documentos con una puntuación
superior a 0,75, enviamos la siguiente consulta:

curl -XGET 'localhost:9200/library/book/_search?pretty' -d '{

208

fi
nir qué
campos incluir en la respuesta.

‣ Recuerde que solo puede devolver estos campos si están marcados como stored en los mapeos
utilizadas para crear el índice, o si se utilizó el campo _source (Elasticsearch utiliza el campo _source
para proporcionar los valores almacenados y el campo _source está activado por defecto).

‣ Por ejemplo, para devolver los campos title y year en los resultados (para cada documento), envíe la
siguiente consulta a Elasticsearch:

curl -XGET 'localhost:9200/library/book/_search?pretty' -d '{

209

fi
‣ Si no de nimos el array de campos, usará el valor por defecto y devolverá el campo _source si está
disponible.

‣ Si usamos el campo _source y solicitamos un campo que no está almacenado, ese campo se
extraerá del campo _source (sin embargo, esto requiere procesamiento adicional).

‣ Si queremos devolver todos los campos almacenados, simplemente pasamos un asterisco (*) como
nombre del campo.

‣ Desde el punto de vista del rendimiento, es mejor devolver el campo _source en lugar de varios
campos almacenados. Esto se debe a que obtener varios campos almacenados puede ser más lento
en comparación con recuperar un solo campo _source.

210
fi

ELK Stack

Filtrado en source
‣ Además de elegir qué campos se devuelven, Elasticsearch nos permite utilizar el denominado ltrado
de origen.

‣ Esta funcionalidad nos permite controlar qué campos se devuelven desde el campo _source.
Elasticsearch expone varias formas de hacer esto. El ltrado de fuentes más simple nos permite
decidir si un documento debe devolverse o no. Considere la siguiente consulta:

curl -XGET 'localhost:9200/library/book/_search?pretty' -d '{

Preparado por Jesús Salinas Revelles 211


fi
fi
‣ Si usa Elasticsearch como segunda fuente de datos y el contenido del documento se recupera desde
la base de datos SQL o la caché, el identi cador del documento es todo lo que necesita.

‣ La segunda forma es similar a la descrita en los campos anteriores, aunque de nimos qué campos
deben devolverse en el origen del documento. Veamos eso usando la siguiente consulta de ejemplo:

curl -XGET 'localhost:9200/library/book/_search?pretty' -d '{

213

fi
fi

car explícitamente qué campos queremos incluir y cuáles


excluir del campo _source.

‣ Podemos incluir campos usando la propiedad inclusion y podemos excluir campos usando la
propiedad exclusion (ambos son arrays de valores).

‣ Por ejemplo, si queremos que el campo _source devuelto incluya todos los campos que comienzan
con la letra t pero no el campo de título, ejecutaremos la siguiente consulta:

curl -XGET 'localhost:9200/library/book/_search?pretty' -d '{

215

fi

‣ Consultas por términos.


‣ Consultas match_all.
‣ Consultas por tipo.
‣ Consultas de tipo exists.
‣ Consultas de tipo missing.
‣ Consultas de tipo match.
‣ Consultas por identi cadores.
‣ Consultas difusas.

216

fi

ELK Stack

Consultas por término


‣ La consulta por término es una de las consultas más simples de Elasticsearch. Simplemente
coincide con el documento que tiene un término en un campo determinado: el término exacto, no
analizado.

‣ La consulta por término más simple es la siguiente:


{

Preparado por Jesús Salinas Revelles 217


‣ Ejemplo:

218

‣ Nos permite hacer coincidir documentos que tienen ciertos términos en su contenido en lugar de un
solo término. La consulta por término nos permitió hacer coincidir un solo término, no analizado, y la
consulta de términos nos permite hacer coincidir varios de ellos.

‣ Por ejemplo, digamos que queremos obtener todos los documentos que tienen los términos novela o
libro en el campo de etiquetas. Para lograrlo, ejecutaremos la siguiente consulta:

219

‣ La consulta por términos encontrará documentos que tengan cualquiera de los términos
proporcionados.

220

ELK Stack

Consultas match_all
‣ La consulta match_all es una de las consultas más simples disponibles en Elasticsearch. Nos
permite hacer coincidir todos los documentos del índice.

‣ Si queremos obtener todos los documentos de nuestro índice, simplemente ejecutamos la siguiente
consulta:

‣ También se puede incluir el campo boost.

Preparado por Jesús Salinas Revelles 221


‣ Por ejemplo, si quisiéramos buscar todos los documentos con el tipo de libro en nuestro índice de
biblioteca, ejecutaremos la siguiente consulta:

222

nido.

‣ Por ejemplo, para encontrar los documentos que tienen un valor en el campo tags, ejecutaremos la
siguiente consulta:

223
fi

‣ Por ejemplo, para encontrar todos los documentos que no tienen un valor en el campo tags,
ejecutaremos la siguiente consulta:

224

‣ Al utilizar una consulta de tipo match, Elasticsearch elegirá el analizador adecuado para el campo
que elijamos, por lo que puede estar seguro de que los términos pasados a la consulta de
coincidencia serán procesados por el mismo analizador que se utilizó durante la indexación.

‣ La consulta más simple se muestra a continuación:


{

225

‣ Hay algunos parámetros que permiten controlar el comportamiento de este tipo de consultas:
‣ operator: este parámetro puede tomar el valor or o and, y controla qué operador booleano se usa
para conectar las cláusulas booleanas creadas. El valor por defecto es or. Si queremos que todos
los términos de nuestra consulta coincidan, debemos usar el operador booleano and.

‣ analyzer: Especi ca el nombre del analizador que se utilizará para analizar el texto de la consulta.
‣ fuzziness: Proporcionar el valor de este parámetro nos permite construir consultas difusas. El
valor de este parámetro puede variar. Para campos numéricos, debe establecerse en un valor
numérico. Para el campo basado en fecha, se puede con gurar en milisegundos o valor de
tiempo, como 2h; y para los campos de texto, se puede con gurara 0, 1 o 2, AUTO.

‣ ...

226

fi
fi
fi

ELK Stack

Consultas de tipo match


‣ Ejemplo:
{

Preparado por Jesús Salinas Revelles 227


ltra los documentos devueltos solo a aquellos con los
identi cadores proporcionados. Funciona en el campo _uid interno, por lo que no requiere que el
campo _id esté habilitado.

‣ La versión más simple de dicha consulta tendrá el siguiente aspecto:


{

228
fi

fi
cadores y también limitar los documentos en
función de su tipo.

‣ Por ejemplo, si queremos incluir solo documentos de tipo book, enviaremos la siguiente consulta:
{

229

fi
‣ La similitud de términos se calcula sobre la base del algoritmo de distancia de edición. La distancia
de edición se calcula sobre la base de los términos que proporcionamos en la consulta y contra los
documentos buscados. Esta consulta puede ser costosa a nivel computacional, pero puede
ayudarnos cuando necesitamos una coincidencia aproximada; por ejemplo, cuando los usuarios
cometen errores ortográ cos.

230
fi

‣ should: La consulta incluida en esta sección puede coincidir o no. El número de secciones should
que deben coincidir está controlado por el parámetro minimum_should_match.

‣ must: la consulta incluida en esta sección debe coincidir para que se devuelva el documento.
‣ must_not: la consulta incluida en esta sección no debe coincidir para que se devuelva el
documento.

‣ Cada una de las secciones mencionadas anteriormente puede estar presente varias veces en una
sola consulta bool.

‣ Esto nos permite construir consultas muy complejas que tienen múltiples niveles de anidamiento.

231

ELK Stack

Consulta bool
‣ Ejemplo:
{

Preparado por Jesús Salinas Revelles 232


‣ Agregaciones de métricas.

233

ELK Stack

Conceptos básicos de agregaciones


‣ Introducción.
‣ Agregaciones de Bucket.
‣ Agregaciones de métricas.
‣ Agregaciones de pipelines.

Preparado por Jesús Salinas Revelles 234


ELK Stack

Introducción
‣ A diferencia de la búsqueda, la analítica se ocupa del panorama general. La búsqueda aborda la
necesidad de acercar algunos registros, mientras que los análisis abordan la necesidad de alejar y
dividir los datos de diferentes maneras.

‣ Mientras aprendíamos a buscar, usamos la siguiente API:


POST /<index_name>/_search

Preparado por Jesús Salinas Revelles 235


‣ Todas las solicitudes de agregación tienen la siguiente forma:

POST /<index_name>/_search

236

‣ El elemento query opcional de ne el contexto de la agregación. La agregación considera todos los


documentos en el índice y los tipos dados si el elemento de consulta no está especi cado. Si
queremos limitar el contexto de la agregación, podemos hacerlo especi cando la consulta. Por
ejemplo, es posible que no queramos considerar todos los datos para la agregación, sino solo
ciertos documentos que satisfacen una condición particular. Esta consulta ltra los documentos que
se enviarán a la consulta aggs real.

‣ El elemento size especi ca cuántos de los resultados de búsqueda deben devolverse en la respuesta.
Su valor por defecto es 10. Si no se especi ca el tamaño, la respuesta contendrá 10 resultados del
contexto de la consulta. Por lo general, si solo estamos interesados en obtener resultados de
agregación, debemos establecer el elemento de tamaño a 0, para evitar obtener resultados, junto con
el resultado de agregación.

237
fi
fi

fi
​​
fi
fi
fi
ELK Stack

Introducción
‣ En términos generales, hay cuatro tipos de agregaciones compatibles con Elasticsearch:
‣ Agregaciones de Bucket.
‣ Agregaciones de métricas.
‣ Agregaciones de pipelines.

Preparado por Jesús Salinas Revelles 238


ELK Stack

Agregaciones de Bucket
‣ Las agregaciones de buckets segmentan los datos (de nidos por el contexto de la consulta) en
varios buckets que se identi can mediante la clave de depósitos.

‣ La agregación de buckets evalúa cada documento en el contexto al decidir en qué bucket se incluye.
‣ Al nal, la agregación de buckets tiene un conjunto de buckets distintos con sus respectivas claves
de depósito y documentos que se incluyen en esos depósitos.

‣ Para las personas que provienen de un entorno SQL, una consulta que tiene GROUP BY, como la
siguiente consulta, hace lo siguiente con agregaciones de depósitos:

SELECT column1, count(*) FROM table1 GROUP BY column1;

Preparado por Jesús Salinas Revelles 239


fi
fi
fi

ELK Stack

Agregaciones de métricas
‣ Las agregaciones métricas trabajan sobre campos numéricos.
‣ Calculan el valor agregado de un campo numérico en el contexto dado. Por ejemplo, supongamos
que tenemos una tabla que contiene los resultados del examen de un estudiante. Cada registro
contiene las cali caciones obtenidas por el alumno. Una agregación métrica puede calcular
diferentes agregados de esa columna de puntuación numérica. Algunos ejemplos son suma,
promedio, mínimo, máximo, etc.

‣ En términos de SQL, la siguiente consulta ofrece una analogía aproximada de lo que puede hacer una
agregación métrica:

SELECT avg(score) FROM results;

Preparado por Jesús Salinas Revelles 240


fi

ELK Stack

Agregaciones de pipelines
‣ Las agregaciones de pipelines son agregaciones de nivel superior que pueden agregar la salida de
otras agregaciones. Son útiles para calcular conceptos como derivadas.

Preparado por Jesús Salinas Revelles 241


ELK Stack

Agregaciones de métricas
‣ Introducción.
‣ Suma, Media, Max y Min.
‣ Estadísticas.
‣ Cardinalidad.

Preparado por Jesús Salinas Revelles 242


ELK Stack

Introducción
‣ Las agregaciones de métricas trabajan sobre datos numéricos, calculando una o más métricas
agregadas dentro del contexto dado. El contexto puede ser una consulta, un ltro o ninguna
consulta, para incluir todo el índice/tipo.

‣ Las agregaciones de métricas también se pueden anidar dentro de otras agregaciones de buckets.
En este caso, estas métricas se calcularán para cada bucket en las agregaciones de bucket.

‣ Comenzaremos con agregaciones de métricas simples, sin anidarlas dentro de agregaciones de


buckets. En esta sección, repasaremos las siguientes agregaciones de métricas:

‣ Agregaciones de suma, promedio, mínimo y máximo Estadísticas y agregaciones de estadísticas


extendidas Agregaciones de cardinalidad.

Preparado por Jesús Salinas Revelles 243


fi

ELK Stack

Suma, Media, Max y Min


‣ Ejemplo:

GET bigginsight/_search?track_total_hits=true

Preparado por Jesús Salinas Revelles 244


GET bigginsight/_search

‣ Para min sería equivalente.


248

select count(*) from (select distinct username from usageReport) u;

‣ Encontrar la cardinalidad, o el número de valores únicos, para un campo especí co es un requisito


muy común.

‣ Si tiene un flujo de clics de los diferentes visitantes en su sitio web, es posible que desee averiguar
cuántos visitantes únicos tuvo en un día, semana o mes determinados.

253

fi
ELK Stack

Cardinalidad
‣ Veamos cómo podemos averiguar el recuento de usuarios únicos para los que tenemos datos de
trá co de red:

GET bigginsight/_search

Preparado por Jesús Salinas Revelles 254


fi
‣ Trabajando con cadenas.
‣ Trabajando con números.
‣ Agregaciones sobre datos ltrados.
‣ Agregaciones anidadas.
‣ Agregaciones personalizadas.

256

fi

ELK Stack

Introducción
‣ Las agregaciones de buckets son útiles para analizar cómo se relaciona el todo con sus partes, de
modo que podamos obtener una mejor comprensión de los datos.

‣ Ayudan a segmentar los datos en partes más pequeñas. Cada tipo de agregación de bucket divide
los datos en diferentes segmentos. Las agregaciones de buckets son el tipo de agregación más
común que se usa en cualquier proceso de análisis.

‣ En esta sección, cubriremos los siguientes temas, manteniendo el ejemplo de datos de trá co de red
en el centro:

Preparado por Jesús Salinas Revelles 257


fi
ELK Stack

Trabajando con cadenas


‣ A veces necesitamos segmentar los datos en función del valor de una cadena. En esos casos lo más
habitual será trabajar con agregaciones por términos.

‣ Se utiliza la propiedad terms:


GET /bigginsight/_search

Preparado por Jesús Salinas Revelles 258


‣ Por ejemplo, es posible que deseemos dividir los datos del producto en diferentes rangos de precios,
como hasta $10, $10 a $50, $50 a $100, etc.

‣ Es posible que desee segmentar los datos por grupo de edad, recuento de empleados, etc.
‣ Examinaremos las siguientes agregaciones:
‣ Agregación de histograma.
‣ Agregación de rango.

259

ELK Stack

Trabajando con números


‣ La agregación de histogramas puede dividir los datos en diferentes buckets en función de un campo
numérico. El rango de cada segmento, también llamado intervalo, se puede especi car en la entrada
de la consulta.

‣ Aquí, tenemos algunos registros de datos de uso del trá co de la red. El campo usage nos informa
sobre la cantidad de bytes que se utilizan para cargar o descargar datos. Intentemos dividir o dividir
todos los datos en función del uso:

POST /bigginsight/_search?size=0

Preparado por Jesús Salinas Revelles 260


fi
fi
‣ De 0 a 999: todos los registros que tengan un uso>= 0 y <1000 se incluirán en este bucket.
‣ 1,000 a 1,999: todos los registros que tengan un uso> = 1,000 y <2,000 caerán en este bucket.
‣ 2.000 a 2.999: todos los registros que tengan un uso> = 2.000 y <3.000 caerán en este bucket.

261

ELK Stack

Trabajando con números


‣ ¿Qué pasa si no queremos que todos los buckets tengan el mismo intervalo? Es posible crear
depósitos de tamaño desigual mediante la agregación de rango.

POST /bigginsight/_search?size=0

Preparado por Jesús Salinas Revelles 262


‣ Las agregaciones que hemos analizado hasta ahora se han ocupado de un solo tipo de campo. Si el
campo dado del que queremos dividir los datos es del tipo cadena, generalmente usamos los
agregaciones por términos. Si el campo es de tipo numérico, tenemos algunas opciones, que
incluyen histograma, agregación de rango y otras, para dividir los datos en diferentes segmentos.

‣ Las siguientes agregaciones nos permiten crear uno o más buckets, en función de las consultas/
ltros que elijamos:

‣ Agregación de tipo lter.


‣ Agregación de tipo lters.

266
fi
fi
fi

ELK Stack

Agregaciones personalizadas
‣ Ejemplo: trabajando con lter.

POST /bigginsight/_search?size=0

Preparado por Jesús Salinas Revelles 267


fi
lters.

GET bigginsight/_search?size=0

269
fi
‣ Con gurando logstash.
‣ Los plugins de Logstash.

271
fi

ELK Stack

Introducción
‣ Desafíos asociados al análisis de logs.
‣ Introducción a Logstash.
‣ Instalación.
‣ Arrancar Logstash.
‣ La arquitectura.

Preparado por Jesús Salinas Revelles 272


ELK Stack

Desafíos asociados al análisis de logs


‣ Los logs se de nen como registros de incidentes u observaciones.
‣ Los registros son generados por una amplia variedad de recursos, como sistemas, aplicaciones,
dispositivos, humanos, etc.

‣ Por lo general, un registro se compone de dos cosas; es decir, una marca de tiempo (la hora en que
se generó el evento) y datos (la información relacionada con el evento):

Preparado por Jesús Salinas Revelles 273


fi

ELK Stack

Desafíos asociados al análisis de logs


‣ Los registros se utilizan normalmente por las siguientes razones:
‣ Solución de problemas: cuando se informa de un error o problema, el primer lugar para buscar
qué pudo haber causado el problema son los logs. Por ejemplo, cuando observa la traza de la pila
en los logs, puede encontrar fácilmente la causa raíz del problema.

‣ Para comprender el comportamiento del sistema/aplicación: cuando una aplicación/sistema se


está ejecutando, es como una caja negra y, para investigar o comprender lo que está sucediendo
dentro del sistema/aplicación, debe con ar en los logs. Por ejemplo, puede registrar el tiempo que
tardan varios bloques de código dentro de la aplicación y usarlo para comprender los cuellos de
botella y ajustar su código para un mejor rendimiento.

‣ Auditoría: muchas organizaciones deben adherirse a algunos procedimientos de cumplimiento y


están obligadas a mantener los registros. Por ejemplo, la actividad de inicio de sesión o las
actividades de transacción realizadas por un usuario generalmente se capturan y mantienen en
registros durante un cierto período de tiempo con el propósito de auditar o para el análisis de
actividad maliciosa por parte de usuarios/piratas informáticos.

Preparado por Jesús Salinas Revelles 274


fi

ELK Stack

Desafíos asociados al análisis de logs


‣ (cont.):
‣ Análisis predictivo:
‣ Con los avances en machine learning (aprendizaje automático), la minería de datos y la
inteligencia arti cial, una tendencia reciente en el análisis es el análisis predictivo. Esta es una
rama de la analítica avanzada que se utiliza para predecir eventos desconocidos que pueden
ocurrir en el futuro. Los patrones que dan como resultado datos históricos y transaccionales
se pueden utilizar para identi car oportunidades, así como riesgos para el futuro.

‣ El análisis predictivo también permite que las organizaciones se vuelvan proactivas y con
visión de futuro, anticipando resultados y comportamientos basados en los resultados
adquiridos y no solo en algunas suposiciones.

‣ Algunos ejemplos de los casos de uso de análisis predictivo son cuando se sugieren películas
o artículos para que los usuarios los compren, se detectan fraudes, se optimizan las campañas
de marketing, etc.

Preparado por Jesús Salinas Revelles 275


fi

fi

​​

ELK Stack

Desafíos asociados al análisis de logs


‣ Basándonos en los ejemplos anteriores y usos típicos de los logs, podemos llegar a la conclusión de
que los registros son ricos en datos y se pueden usar en una amplia variedad de casos de uso. Sin
embargo, los logs tienen asociados un conjunto de desafíos:

‣ No hay un formato común/coherente: cada sistema genera logs en su propio formato y, como
administrador o usuario nal, requeriría experiencia en la comprensión de los formatos de logs
generados por cada sistema/aplicación. Dado que los formatos son diferentes, sería difícil buscar
en diferentes tipos de registros.

‣ Los logs están descentralizados: dado que los logs son generados por una amplia variedad de
recursos, como sistemas, aplicaciones, dispositivos, etc., los logs generalmente se distribuyen en
varios servidores. Con la llegada de la computación en la nube, ahora es mucho más difícil buscar
en los logs, ya que las herramientas típicas como SSH y grep no serán escalables en estos casos.
Por lo tanto, existe la necesidad de una gestión de logs centralizada, que ayude a los analistas/
administradores a buscar fácilmente la información requerida.

Preparado por Jesús Salinas Revelles 276


fi

ELK Stack

Desafíos asociados al análisis de logs


‣ No hay un formato de hora coherente: dado que los logs se componen de marcas de tiempo, cada
sistema/aplicación registra la hora en su propio formato, lo que di culta identi car la hora exacta de
la ocurrencia del evento (algunos formatos son más amigables para las máquinas que para los
humanos -simpático). Los eventos correlativos ocurren en múltiples sistemas al mismo tiempo.
Algunos ejemplos de formatos de hora que se pueden ver en los registros son los siguientes:

Nov 14 22:20:10

Preparado por Jesús Salinas Revelles 277

fi
fi
‣ Los datos de logs no están estructurados y, por lo tanto, resulta difícil realizar un análisis
directamente.

‣ Antes de que se pueda realizar el análisis en él, los datos tendrían que transformarse en la
estructura correcta para que la búsqueda o la realización de análisis sea más fácil.

‣ La mayoría de las herramientas de análisis dependen de datos estructurados/semiestructurados.

278

ELK Stack

Introducción a Logstash
‣ Logstash es un popular motor de recopilación de datos de código abierto con capacidades de
pipeline en tiempo real.

‣ Logstash nos permite crear fácilmente un pipeline que puede ayudar a recopilar datos de una amplia
variedad de fuentes de entrada y analizarlos, enriquecerlos, uni carlos y almacenarlos en una
amplia variedad de destinos.

‣ Logstash proporciona un conjunto de plugins conocidos como ltros de entrada y plugins de salida,
que son fáciles de usar y se pueden conectar por naturaleza, lo que facilita el proceso de uni cación
y normalización de grandes volúmenes y variedades de datos. Logstash hace el trabajo del motor
ETL.

Preparado por Jesús Salinas Revelles 279


fi
fi
fi
ELK Stack

Introducción a Logstash
‣ Algunas de las características más destacadas de logstash son las siguientes:
‣ Arquitectura de pipeliness de datos conectable: Logstash contiene más de 200 plugins que han
sido desarrollados por Elastic y la comunidad de código abierto, que se pueden usar para mezclar,
combinar y orquestar diferentes entradas, ltros y salidas, mientras se crean canalizaciones para
el procesamiento de datos.

‣ Extensibilidad: Logstash está escrito en JRuby y, dado que es compatible con la arquitectura de
canalización conectable, puede construir y crear fácilmente plugins personalizados para
satisfacer sus necesidades especí cas.

‣ Procesamiento de datos centralizado: los datos de fuentes dispares se pueden extraer fácilmente
utilizando los diversos plugins de entrada que proporciona y se pueden enriquecer, transformar y
enviar a diferentes/múltiples destinos.

Preparado por Jesús Salinas Revelles 280


fi

fi

ELK Stack

Introducción a Logstash
‣ (cont.):
‣ Variedad y volumen:
‣ Maneja todo tipo de datos de logs, por ejemplo, registros de Apache, NGNIX, registros del
sistema y registros de eventos de ventana, y también recopila métricas de una amplia gama de
plataformas de aplicaciones a través de TCP y UDP.

‣ Logstash puede transformar solicitudes HTTP en eventos y proporciona webhooks para


aplicaciones como Meetup, GitHub, JIRA, etc.

‣ También admite el consumo de datos de colas y bases de datos relacionales/NoSQL


existentes, incluidas Kafka, RabbitMQ, etc.

‣ El pipeline de procesamiento de datos de Logstash se puede escalar horizontalmente


fácilmente y, desde Logstash 5, admite colas persistentes, lo que brinda la capacidad de
procesar de manera con able grandes volúmenes de eventos/datos entrantes.

Preparado por Jesús Salinas Revelles 281


fi

ELK Stack

Introducción a Logstash
‣ (cont.):
‣ Sinergia: Logstash tiene una fuerte sinergia con Elasticsearch, Beats y Kibana, lo que le permite
crear soluciones de análisis de registros de un extremo a otro con facilidad.

Preparado por Jesús Salinas Revelles 282


ELK Stack

Instalación
‣ Requisitos previos.
‣ Matriz de compatibilidad.
‣ Descarga.
‣ Descompresión.

Preparado por Jesús Salinas Revelles 283


ELK Stack

Requisitos previos
‣ Para la versión 7.15.2 si arranca con JDK8 de nido en JAVA_HOME nos mostrará el siguiente
mensaje:

warning: usage of JAVA_HOME is deprecated, use ES_JAVA_HOME

‣ Resumiendo, debemos de nir la variable ES_JAVA_HOME y pensar en trabajar con una versión de
Java 11.

Preparado por Jesús Salinas Revelles 284


fi
fi
chero, éste se descomprime y nos encontramos con algo tal que así:

287
fi
ELK Stack

Arrancar Logstash
‣ Introducción.
‣ El comando logstash.
‣ Veri cando la instalación.
‣ Parando logstash.

Preparado por Jesús Salinas Revelles 288


fi

ELK Stack

Introducción
‣ Logstash se arranca mediante el comando logstash/logstash.bat.
‣ Por ejemplo, desde el directorio home de elasticsearch:
$ ./bin/logstash

$ ./bin/logstash.bat

Preparado por Jesús Salinas Revelles 289

ELK Stack

El comando logstash
‣ Ejecutando el siguiente comando vemos todas sus opciones:
$ ./bin/logstash -h

Preparado por Jesús Salinas Revelles 290


guración simple (pipeline logstash) como parámetro:

$ ./bin/logstash -e "input { stdin { } } output { stdout {}}"

291
fi
ltros y
salidas. Una pipeline de Logstash tiene dos elementos obligatorios, es decir, entrada y salida, y un
elemento de opción conocido como ltro:

293
fi
fi
ELK Stack

La arquitectura
‣ Las entradas crean eventos, los ltros modi can los eventos de entrada y las salidas los envían al
destino.

‣ Las entradas y salidas admiten códecs, que le permiten codi car o decodi car los datos cuando
entran o salen del pipeline, sin tener que usar un ltro separado.

‣ Logstash utiliza por defecto colas en memoria entre las etapas del pipeline (entrada a ltro y ltro a
salida) para almacenar eventos en búfer. Si Logstash termina de manera insegura, se perderán todos
los eventos almacenados en la memoria. Para evitar la pérdida de datos, puede permitir que
Logstash conserve los eventos en curso en el disco mediante el uso de colas persistentes.

Preparado por Jesús Salinas Revelles 294


fi
fi
fi
fi

fi
fi
fi
ELK Stack

La arquitectura
‣ Las colas persistentes se pueden habilitar con gurando la propiedad queue.type: persisted en el
archivo logstash.yml, que se puede encontrar en la carpeta LOGSTASH_HOME/con g. logstash.yml
es un archivo de con guración que contiene con guraciones relacionadas con Logstash.

‣ Por defecto, los archivos se almacenan en LOGSTASH_HOME/data/queue. Puede anular esto


con gurando la propiedad path.queue en logstash.yml.

‣ Por defecto, Logstash comienza con un tamaño de pila de 1 GB. Esto se puede anular con gurando
las propiedades Xms y Xmx en el archivo jvm.options, que se encuentra en la carpeta
LOGSTASH_HOME/con g.

Preparado por Jesús Salinas Revelles 295


fi
fi
fi
fi
fi

fi
fi

ELK Stack

La arquitectura
‣ Un pipeline de Logstash se almacena en un archivo de con guración que termina con una
extensión .conf. Las tres secciones del archivo de con guración son las siguientes:

input

‣ Cada una de estas secciones contiene una o más con guraciones de plugins. Se puede con gurar
un plugin proporcionando su nombre y luego su con guración como un par clave-valor. El valor se
asigna mediante el operador =>.

Preparado por Jesús Salinas Revelles 296


fi
fi
fi
fi

fi
guración que usamos en la sección anterior, con algunas pequeñas
modi caciones, y la guardamos en un archivo:

input {

297
fi
fi
‣ Estructura del chero de con guración.
‣ Comentarios.
‣ Tipos de valores.
‣ Secuencias de escape.
‣ Accediendo a datos y campos en la con guración.

300

fi

fi

fi
ELK Stack

Introducción
‣ Para con gurar Logstash debemos crea un archivo de con guración que especi ca qué plugins
desea usar y la con guración de cada complemento. Puede hacer referencia a campos de eventos en
una con guración y usar condicionales para procesar eventos cuando cumplen con ciertos criterios.

‣ Cuando ejecute logstash, use la opción -f para especi car su archivo de con guración.
‣ Veamos cómo crear un archivo de con guración simple y usarlo para ejecutar Logstash. Cree un
archivo llamado "logstash-simple.conf" y guárdelo en el mismo directorio que Logstash.

input { stdin { } }

Preparado por Jesús Salinas Revelles 301


fi
fi
fi
fi
fi
fi
fi
fi

‣ Con guración de plugins.


‣ Comentarios.
‣ Tipos de valores.

302
fi

ELK Stack

Sintaxis
‣ Ejemplo:
input {

‣ Cada sección contiene las opciones de con guración para uno o más plugins. Si especi ca varios
ltros, se aplican en el orden en que aparecen en el archivo de con guración.

Preparado por Jesús Salinas Revelles 303


fi

fi
fi
fi
nimos su con guración, por ejemplo, para el plugin le:

input {

304
fi
fi
fi
chero se realizan mediante #

# This is a comment. You should use comments to describe

305
fi
guración sea de un tipo determinado, como
booleano, lista o hash. Se admiten los siguientes tipos de valores:

‣ Array y List.
‣ Booleano, bytes, número, cadena.
‣ Codecs.
‣ Hash.
‣ URI y Path.
‣ Referencia a una campo.

306

fi

ELK Stack

Tipos de valores
‣ Ejemplos:
users => [ {id => 1, name => bob}, {id => 2, name => jane} ]

Preparado por Jesús Salinas Revelles 307


‣ Una referencia a un campo es una cadena especial que representa la ruta a un campo en un
evento, como @timestamp o [@timestamp] para hacer referencia a un campo de nivel superior, o
[cliente] [ip] para acceder a un campo anidado.

308

ELK Stack

Secuencias de escape

Preparado por Jesús Salinas Revelles 309


ELK Stack

Accediendo a datos y campos en la configuración


‣ El agente de logstash es una tubería de procesamiento con 3 etapas: entradas → ltros → salidas.
Las entradas generan eventos, los ltros los modi can, las salidas los envían a otra parte. Todos los
eventos tienen propiedades.

‣ Por ejemplo, el log de acceso de Apache tendría cosas como código de estado (200, 404), ruta de
solicitud ("/", "index.html"), método HTTP (GET, POST), dirección IP del cliente, etc. Logstash las
llama a estas propiedades elds.

‣ Algunas de las opciones de con guración en Logstash requieren de la existencia de campos para
funcionar. Debido a que las entradas generan eventos, no hay campos para evaluar dentro del
bloque de entrada.

‣ Debido a su dependencia de eventos y campos, las siguientes opciones de con guración solo
funcionarán dentro de los bloques lter y output.

Preparado por Jesús Salinas Revelles 310


fi

fi

fi
fi
fi
fi
fi
ELK Stack

Los plugins de Logstash


‣ Introducción.
‣ Instalando o actualizando plugins.
‣ Plugins de tipo input.
‣ Plugins de tipo codec.
‣ Plugins de tipo lter.
‣ Plugins de tipo output.

Preparado por Jesús Salinas Revelles 311


fi

ELK Stack

Introducción
‣ Logstash tiene una rica colección de plugins de entrada, ltro, códec y salida.
‣ Los plugins están disponibles como paquetes independientes llamados gems y están alojados en
rubygems.org. Por defecto, muchos plugins comunes están disponibles como parte de la
distribución de Logstash.

‣ Puede veri car la lista de plugins que forman parte de la instalación actual ejecutando el siguiente
comando:

$ ./bin/logstash-plugin list

Preparado por Jesús Salinas Revelles 312


fi

fi

lter, output, or codec, puede encontrar la lista de input,


lter, output, codec y plugins instalados. Por ejemplo:

$ ./bin/logstash-plugin list --group

313
fi
fi
‣ Por ejemplo, para instalar el plugin logstash-output-email, ejecute el siguiente comando:
$ ./bin/logstash-plugin install logstash-output-email

‣ Al usar el comando logstash-plugin update y pasar el nombre del plugin como parámetro al
comando, puede obtener la última versión del plugin:

$ ./bin/logstash-plugin update logstash-output-s3

314

ELK Stack

Plugins de tipo input


‣ Introducción.
‣ File input plugin.

Preparado por Jesús Salinas Revelles 315


ELK Stack

Introducción
‣ Se utilizan para con gurar un conjunto de eventos que se enviarán a Logstash.
‣ El plugin le permite con gurar fuentes de entrada únicas o múltiples.
‣ Actúa como la primera sección, que se requiere en el archivo de con guración de Logstash.
‣ La lista de plugins de entrada disponibles listos para usar es la siguiente:

Preparado por Jesús Salinas Revelles 316


fi
fi
fi

ELK Stack

Introducción
‣ https://www.elastic.co/guide/en/logstash/current/input-plugins.html

Preparado por Jesús Salinas Revelles 317


ELK Stack

File input plugin


‣ https://www.elastic.co/guide/en/logstash/current/plugins-inputs- le.html

Preparado por Jesús Salinas Revelles 318

fi
ELK Stack

Plugins de tipo codec


‣ Introducción.
‣ Codec csv.
‣ Codec json.

Preparado por Jesús Salinas Revelles 319


ELK Stack

Introducción
‣ Se utilizan para codi car o decodi car eventos entrantes o salientes de Logstash.
‣ Los códecs también se pueden utilizar en input y output. Los códecs de entrada representan una
forma conveniente de decodi car sus datos incluso antes de que ingresen a la entrada. Los códecs
de salida proporcionan una forma cómoda de codi car sus datos antes de que salgan de la salida.

‣ Son esencialmente ltros de flujo que pueden funcionar como parte de una entrada o salida.
‣ La lista de plugins de tipo códec disponibles listos para usar es la siguiente:

Preparado por Jesús Salinas Revelles 320


fi
fi
fi
fi
fi

ELK Stack

Introducción
‣ El listado completo se encuentra disponible en la siguiente url:
‣ https://www.elastic.co/guide/en/logstash/current/codec-plugins.html

Preparado por Jesús Salinas Revelles 321


ELK Stack

Codec csv
‣ El códec csv toma datos CSV, los analiza y los transmite.
‣ Ejemplo:

input {

Preparado por Jesús Salinas Revelles 322


‣ Ejemplo:

input {

324

car (en la sección input) y codi car (en la sección output)


mensajes JSON completos.

‣ Si los datos que se envían son un array de objetos JSON en su raíz, se crearán varios eventos (uno
por elemento).

‣ https://www.elastic.co/guide/en/logstash/current/plugins-codecs-json.html

325

fi
fi
ELK Stack

Codec json
‣ Ejemplo:

input {

Preparado por Jesús Salinas Revelles 326


‣ Plugin csv.
‣ Plugin Grok.
‣ Plugin Mutate.

327

ELK Stack

Introducción
‣ Se utilizan para realizar transformaciones en los datos.
‣ Le permite combinar uno o más plugins, y el orden de los plugins de ne el orden en el que se
transforman los datos. Actúa como la sección intermedia entre la entrada y la salida, y es una
sección opcional en la con guración de Logstash.

‣ La lista de plugins de ltro disponibles listos para usar es la siguiente:

Preparado por Jesús Salinas Revelles 328


fi
fi

fi
ELK Stack

Introducción
‣ https://www.elastic.co/guide/en/logstash/current/ lter-plugins.html

Preparado por Jesús Salinas Revelles 329


fi
ELK Stack

Plugin csv
‣ El ltro CSV toma un campo de evento que contiene datos CSV, lo analiza y lo almacena como
campos individuales con nombres de campo especi cados opcionalmente. Este ltro puede analizar
datos con cualquier separador, no solo con comas.

‣ https://www.elastic.co/guide/en/logstash/current/plugins- lters-csv.html

Preparado por Jesús Salinas Revelles 330


fi

fi
fi
fi
ELK Stack

Plugin Grok
‣ Es un plugin muy potente y se usa frecuentemente para transformar datos no estructurados en
datos estructurados, lo que hace que los datos sean fácilmente consultables/ ltrables.

‣ Grok es una forma de hacer coincidir una línea con un patrón (que se basa en una expresión regular)
y mapear partes especí cas de la línea a campos dedicados. La sintaxis general de un patrón grok
es la siguiente:

%{PATTERN:FIELDNAME}

‣ PATTERN es el nombre del patrón que coincidirá con el texto. FIELDNAME es el identi cador del
fragmento de texto que se está haciendo coincidir.

‣ Por defecto, los campos son cadenas. Para convertir a valores flotantes o int, puede usar el siguiente
formato:

%{PATTERN:FIELDNAME:type}

Preparado por Jesús Salinas Revelles 331


fi

fi
fi

ELK Stack

Plugin Grok
‣ Logstash incluye unos 120 patrones por defecto. Estos patrones son reutilizables y extensibles.
‣ La siguiente url muestra un listado de patrones para diferentes sistemas:
‣ https://github.com/logstash-plugins/logstash-patterns-core/tree/main/patterns/ecs-v1

Preparado por Jesús Salinas Revelles 332

ELK Stack

Plugin Grok
‣ Dentro de esta lista se encuentran los de grok:
‣ https://github.com/logstash-plugins/logstash-patterns-core/blob/main/patterns/ecs-v1/grok-
patterns

Preparado por Jesús Salinas Revelles 333


ELK Stack

Plugin Mutate
‣ Puede realizar mutaciones generales en campos utilizando este ltro. Los campos del evento se
pueden renombrar, convertir, eliminar y modi car.

‣ Toda la información en https://www.elastic.co/guide/en/logstash/current/plugins- lters-


mutate.html

Preparado por Jesús Salinas Revelles 334


fi

fi
fi
ELK Stack

Plugin Mutate
‣ Ejemplo:

Preparado por Jesús Salinas Revelles 335


‣ Elasticsearch.
‣ Kafka.

336

ELK Stack

Introducción
‣ Se utilizan para enviar datos a un destino.
‣ Los plugins de salida le permiten con gurar fuentes de salida únicas o múltiples.
‣ Actúan como la última sección, que se requiere en el archivo de con guración de Logstash.
‣ La lista de plugins de salida disponibles listos para usar es la siguiente:

Preparado por Jesús Salinas Revelles 337


fi

fi

ELK Stack

Introducción
‣ https://www.elastic.co/guide/en/logstash/current/output-plugins.html

Preparado por Jesús Salinas Revelles 338


ELK Stack

Elasticsearch
‣ El plugin de salida de Elasticsearch puede almacenar tanto conjuntos de datos de series temporales
(como logs, eventos y métricas) como datos que no son de series temporales en Elasticsearch.

‣ https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html

Preparado por Jesús Salinas Revelles 339

ELK Stack

Elasticsearch
‣ Ejemplo:
output {

Preparado por Jesús Salinas Revelles 340


‣ https://www.elastic.co/guide/en/logstash/current/plugins-outputs-kafka.html
‣ Ejemplo:
output {

342

‣ Cargando datos.
‣ Analíticas.
‣ Trabajando con log.

343

ELK Stack

Introducción
‣ ¿Qué es Kibana?
‣ Funcionalidades más importantes.
‣ Instalación.
‣ Arrancando Kibana.
‣ Con gurando Kibana.
‣ La interfaz de un vistazo.

Preparado por Jesús Salinas Revelles 344


fi

ELK Stack

¿Qué es Kibana?
‣ Kibana es el nombre completo de K en la pila de tecnología ELK.
‣ Kibana es una herramienta de visualización y análisis basada en la web de código abierto que le
permite visualizar los datos almacenados en Elasticsearch utilizando una variedad de tablas, mapas
y grá cos.

‣ Gracias a su sencilla interfaz, los usuarios pueden explorar fácilmente grandes volúmenes de datos
almacenados en Elasticsearch y realizar análisis avanzados de datos en tiempo real.

‣ En este capítulo, exploremos los diversos componentes de Kibana y exploremos cómo puede usarlo
para el análisis de datos.

Preparado por Jesús Salinas Revelles 345


fi

ELK Stack

Funcionalidades más importantes


‣ Función básica.
‣ Análisis de ubicación.
‣ Series de tiempo.
‣ Aprendizaje automático (Machine Learning).
‣ Iconos y cuadrícula.

Preparado por Jesús Salinas Revelles 346


ELK Stack

Función básica
‣ Dado que Kibana se usa para el análisis visual, varios componentes visuales son naturalmente
indispensables, tales como: histograma, grá co lineal, grá co circular, grá co solar, etc.

Preparado por Jesús Salinas Revelles 347


fi
fi
fi
ELK Stack

Análisis de ubicación
‣ A través de Elastic Maps, puede analizar visualmente los datos de ubicación.

Preparado por Jesús Salinas Revelles 348


ELK Stack

Series de tiempo
‣ El componente de series de tiempo le permite realizar análisis de series de tiempo en datos en
Elasticsearch. Al mismo tiempo, se pueden usar expresiones poderosas y fáciles de aprender para
describir consultas, transformaciones y visualizaciones.

Preparado por Jesús Salinas Revelles 349


ELK Stack

Aprendizaje automático (Machine Learning)


‣ Con las capacidades de aprendizaje automático integradas de Kibana, podemos detectar anomalías
ocultas en los datos de Elasticsearch y explorar los puntos de atributo que tienen un impacto
signi cativo en ellos.

Preparado por Jesús Salinas Revelles 350


fi
ELK Stack

Iconos y cuadrícula
‣ Con la función de correlación de Elasticsearch, combinada con el análisis de correlación Graph,
puede ayudarnos a analizar fácilmente la relación de datos en ES.

Preparado por Jesús Salinas Revelles 351


ELK Stack

Instalación
‣ Requisitos previos.
‣ Matriz de compatibilidad.
‣ Versión de Elasticsearch.
‣ Descarga.
‣ Descompresión.
‣ Instalación para windows.

Preparado por Jesús Salinas Revelles 352


ELK Stack

Requisitos previos
‣ Elasticsearch está construido con Java e incluye una versión empaquetada de OpenJDK de los
mantenedores de JDK (GPLv2 + CE) dentro de cada distribución. La JVM incluida es la JVM
recomendada y se encuentra dentro del directorio jdk del directorio de inicio de Elasticsearch.

‣ Para usar su propia versión de Java, con gure la variable de entorno ES_JAVA_HOME.
‣ Por ejemplo, la versión 7.15.2 necesita como mínimo un JDK 8.
‣ Si debe utilizar una versión de Java que sea diferente de la JVM incluida, le recomendamos que
utilice una versión LTS compatible de Java. Elasticsearch se negará a iniciarse si se utiliza una
versión de Java defectuosa conocida.

‣ El directorio de JVM incluido puede eliminarse al utilizar su propia JVM.

Preparado por Jesús Salinas Revelles 353


fi

ELK Stack

Requisitos previos
‣ Para la versión 7.15.2 si arranca con JDK8 de nido en JAVA_HOME.

Preparado por Jesús Salinas Revelles 354


fi
ELK Stack

Matriz de compatibilidad
‣ Ir a https://www.elastic.co/es/support/matrix

Preparado por Jesús Salinas Revelles 355


ELK Stack

Versión de Elasticsearch
‣ Kibana debe con gurarse para ejecutarse en un nodo Elasticsearch de la misma versión. Esta es la
con guración admitida o cialmente.

‣ No se admite la ejecución de diferentes versiones principales de Kibana y Elasticsearch (por ejemplo,


Kibana 5.xy Elasticsearch 2.x), ni tampoco la ejecución de una versión secundaria de Kibana más
nueva que la versión de Elasticsearch (por ejemplo, Kibana 5.1 y Elasticsearch 5.0).

‣ Ejecutar una versión menor de Elasticsearch que sea superior a Kibana generalmente funcionará
para facilitar un proceso de actualización donde Elasticsearch se actualiza primero (por ejemplo,
Kibana 5.0 y Elasticsearch 5.1). En esta con guración, se registrará una advertencia al iniciar el
servidor Kibana, por lo que solo debe ser temporal hasta que Kibana se actualice a la misma versión
que Elasticsearch.

‣ Generalmente se admite la ejecución de diferentes versiones de parche de Kibana y Elasticsearch


(por ejemplo, Kibana 5.0.0 y Elasticsearch 5.0.1), aunque recomendamos a los usuarios que ejecuten
las mismas versiones de Kibana y Elasticsearch hasta la versión del parche.

Preparado por Jesús Salinas Revelles 356


fi
fi

fi

fi

ELK Stack

Descarga
‣ Al igual que con otros componentes de Elastic Stack, descargar e instalar Kibana es bastante simple
y sencillo. Navegue a https://www.elastic.co/es/downloads/kibana y, según su sistema operativo,
descargue el archivo ZIP/TAR, como se muestra a continuación:

Preparado por Jesús Salinas Revelles 357


ELK Stack

Descompresión
‣ Una vez descargado el chero, éste se descomprime y nos encontramos con algo tal que así:

Preparado por Jesús Salinas Revelles 358


fi
ELK Stack

Instalación para windows


‣ Ir a https://www.elastic.co/guide/en/kibana/current/windows.html

Preparado por Jesús Salinas Revelles 359


ELK Stack

Arrancando Kibana
‣ Introducción.
‣ El comando kibana.
‣ Veri cando la instalación.

Preparado por Jesús Salinas Revelles 360


fi

ELK Stack

Introducción
‣ Kibana se arranca mediante el comando elasticsearch/elasticsearch.bat.
‣ Por ejemplo, desde el directorio home de elasticsearch:
$ ./bin/kibana

$ ./bin/kibana.bat

Preparado por Jesús Salinas Revelles 361

ELK Stack

El comando kibana
‣ Ejecutando el siguiente comando vemos todas sus opciones:
$ ./bin/kibana -h

Preparado por Jesús Salinas Revelles 362


carlo accediendo a la siguiente url:

‣ http://localhost:5601/

365
fi

ELK Stack

Configurando Kibana
‣ Cuando Kibana arranca lo hace en el puerto 5601 e intenta conectarse a Elasticsearch que se
ejecuta en el puerto 9200.

‣ ¿Qué pasa si queremos cambiar algunas de estas con guraciones?


‣ Todas las con guraciones de Kibana se almacenan en un archivo llamado kibana.yml, que está
presente en la carpeta con g, en $KIBANA_HOME.

‣ Cuando este archivo se abre, contiene muchas propiedades (pares clave-valor) comentadas por
defecto. Lo que esto signi ca es que, a menos que se anulen, el valor especi cado en la propiedad se
considera el valor por defecto. Para descomentar la propiedad, elimine el # antes de la propiedad y
guarde el archivo.

Preparado por Jesús Salinas Revelles 366


fi
fi
fi

fi

fi
ELK Stack

Configurando Kibana

Preparado por Jesús Salinas Revelles 367


ELK Stack

Configurando Kibana
‣ Si Kibana se va a conectar a nodos Elasticsearch que tienen activada la seguridad mínima
tendremos que indicar en con guración cuáles son el usuario y la contraseña:

elasticsearch.username: "kibana_system"

‣ Si no queremos introducir la contraseña en el chero de con guración podemos usar otra estrategia:

‣ Se introduce la contraseña y listo.

Preparado por Jesús Salinas Revelles 368


fi
fi
fi

‣ Creando un patrón de índice.


‣ Opción Add data.

371

ELK Stack

Introducción
‣ Para trabajar con datos los primero que tenemos que hacer es cargarlos y Kibana nos permitirá
siguiendo diferentes estrategias:

‣ Creando patrones de índice.


‣ Opción Add data.
‣ Integraciones mediante Agente Elastic.

Preparado por Jesús Salinas Revelles 372


ELK Stack

Creando un patrón de índice


‣ Como ya hemos visto anteriormente, podemos enviar datos a Elasticsearch. Sin embargo, para
analizarlos o visualizarlos en Kibana, necesitamos crear un patrón de índice.

‣ Se hace click en la sección Analytics -> Discover:

Preparado por Jesús Salinas Revelles 373

ELK Stack

Creando un patrón de índice


‣ Se hace click en cualquiera de las opciones que nos permite crear el patrón y seleccionamos el
índice y el campo Timestamp y hacemos click en Create index pattern:

Preparado por Jesús Salinas Revelles 374


ELK Stack

Creando un patrón de índice


‣ Se obtiene algo tal que así:

Preparado por Jesús Salinas Revelles 375


ELK Stack

Opción Add data


‣ Desde la home tenemos la opción de seleccionar Add data para añadir nuevos datos:

Preparado por Jesús Salinas Revelles 376


ELK Stack

Opción Add data


‣ También podemos acceder a esta funcionalidad desde Observability -> Overview:

Preparado por Jesús Salinas Revelles 377


ELK Stack

Opción Add data


‣ Esto nos lleva a la pantalla que nos permite seleccionar una de las alternativas que nos ofrece:

Preparado por Jesús Salinas Revelles 378


ELK Stack

Opción Add data


‣ Una vez seleccionada una de las alternativas, el sistema describe el procedimiento a seguir para
instalarlo. Por ejemplo, podríamos hacerlo para apache:

‣ Primero debemos descargar y descomprimir Filebeat:

Preparado por Jesús Salinas Revelles 379


ELK Stack

Opción Add data


‣ Después se edita su con guración para indicar dónde se encuentra Elasticsearch y Kibana:

Preparado por Jesús Salinas Revelles 380


fi
ELK Stack

Opción Add data


‣ Se activa la con guración para trabajar con apache:

Preparado por Jesús Salinas Revelles 381


fi
ELK Stack

Opción Add data


‣ Se arranca Filebeat y se comprueba que se están recibiendo datos:

Preparado por Jesús Salinas Revelles 382


ELK Stack

Integraciones mediante Agente Elastic


‣ Aparece una nueva funcionalidad llamada Integraciones mediante Agente Elastic que facilitan la
integración con sistemas externos.

‣ Esta funcionalidad se encuentra disponible en Management -> Integrations:

Preparado por Jesús Salinas Revelles 383


ELK Stack

Analíticas
‣ Introducción.
‣ Creando un patrón de índice.
‣ Descubriendo datos.

Preparado por Jesús Salinas Revelles 384


ELK Stack

Introducción
‣ Se hace click en la sección Analytics -> Overview:

Preparado por Jesús Salinas Revelles 385


ELK Stack

Descubriendo datos
‣ Esta página nos permite interaccionar con los datos cargados mediante la siguiente pantalla:

Preparado por Jesús Salinas Revelles 386


ELK Stack

Descubriendo datos
‣ Podemos seleccionar cualquiera de los patrones de nidos:

Preparado por Jesús Salinas Revelles 387


fi
ELK Stack

Descubriendo datos
‣ A partir de ahí podemos realizar búsquedas gracias a KQL:

Preparado por Jesús Salinas Revelles 388


ELK Stack

Descubriendo datos
‣ Y visualizar los datos que nos interesen en el panel central:

Preparado por Jesús Salinas Revelles 389


ELK Stack

Descubriendo datos
‣ También podemos limitar el rango de fechas a visualizar gracias al calendario que aparece en la
parte derecha de la pantalla:

Preparado por Jesús Salinas Revelles 390


ELK Stack

Trabajando con log


‣ Cuando trabajamos con logs lo primero que tenemos que hacer es con gurar la sección:

Preparado por Jesús Salinas Revelles 391

fi
ELK Stack

Trabajando con log


‣ Esto nos lleva a la siguiente pantalla:

Preparado por Jesús Salinas Revelles 392

También podría gustarte