Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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.
ELK Stack
‣ 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.
ELK Stack
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.
fi
ELK Stack
ELK Stack
‣ 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.
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.
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.
‣ Al estar desarrollado en Java, es compatible en todas las plataformas donde Java lo sea.
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.
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:
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.
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.
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.
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.
fi
ELK Stack
ELK Stack
De un vistazo
‣ Introducción.
‣ Principales características.
‣ Casos de uso.
‣ Terminología.
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.
ELK Stack
Introducción
‣ https://www.elastic.co/es/elasticsearch/
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.
fi
fi
ELK Stack
Principales características
‣ Orientado a documentos:
‣ Permite almacenar documentos JSON indexando todos sus campos (schemaless). Útil para
soluciones NoSQL.
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).
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.
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.
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.
fi
ELK Stack
Terminología
‣ Introducción.
‣ Cluster.
‣ Nodo.
‣ Índice e índice invertido.
‣ Documento y campo.
‣ Shard.
‣ Mapeo de campos.
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.
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.
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.
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.
‣ 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.
fi
ELK Stack
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.
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.
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.
fi
fi
ELK Stack
Instalación
‣ Requisitos previos.
‣ Matriz de compatibilidad.
‣ Descarga.
‣ Descompresión.
‣ Instalación para windows.
‣ La estructura de directorios.
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.
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:
‣ Resumiendo, debemos de nir la variable ES_JAVA_HOME y pensar en trabajar con una versión de
Java 11.
fi
fi
chero, éste se descomprime y nos encontramos con algo tal que así:
43
fi
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.
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.
fi
fi
fi
ELK Stack
Arrancar Elasticsearch
‣ Introducción.
‣ El comando elasticsearch.
‣ De niendo un servicio de windows.
‣ Veri cando la instalación.
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
ELK Stack
El comando elasticsearch
‣ Ejecutando el siguiente comando vemos todas sus opciones:
$ ./bin/elasticsearch -h
50
ELK Stack
‣ Una vez creado con la opción install se podrá controlar con las opciones start y stop.
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.
fi
fi
fi
ELK Stack
‣ Para las distribuciones en formato archivos, la ubicación del directorio de con guración por defecto
es $ES_HOME/con g.
fi
fi
fi
fi
fi
ELK Stack
$ ES_PATH_CONF=/path/to/my/con
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
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
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.
discovery.type: single-node
‣ 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
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
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
fi
‣ Elasticsearch usa node.name como un identi cador legible para una instancia particular de
Elasticsearch.
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
67
ELK Stack
El fichero elasticsearch.yml
‣ Ejemplo de con guración:
cluster.name: elasticsearchCluster
‣ 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/.
69
fi
fi
fi
fi
fi
fi
ELK Stack
-Xms2g
‣ Los parámetros se pueden aplicar a todas las posibles versiones de java que se puedan utilizar:
fi
fi
nirse en arranque:
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.
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.
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.
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.
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.
ELK Stack
El ejecutable elasticsearch-plugin
‣ El ejecutable elasticsearch-plugin que se encuentra en la carpeta bin nos permitirá realizar esta
operación.
ELK Stack
El ejecutable elasticsearch-plugin
$ ./bin/elasticsearch-plugin -h
amazon-ec2
80
fi
$ bin/elasticsearch-plugin install analysis-icu
85
fi
$ elasticsearch-plugin install
‣ Ejemplo linux:
‣ Ejemplo windows:
86
‣ https://www.elastic.co/guide/en/elasticsearch/plugins/current/index.html
87
fi
ELK Stack
ELK Stack
Directorio de plugins
‣ Por defecto, en una distribución en formato comprimido el directorio para almacenar los plugins se
encuentra en plugins.
Operaciones básicas
‣ Manipulando datos con la API REST.
‣ Búsquedas con query requests.
ELK Stack
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.
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:
fi
fi
ELK Stack
Almacenando datos
‣ POST http://localhost:9200/blog/article/1:
{
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:
{
fi
fi
fi
‣ 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.
100
fi
fi
ELK Stack
Actualizando documentos
‣ Para la ejecución del comando de actualización anterior, Elasticsearch devolvería la siguiente
respuesta:
‣ 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?
104
ELK Stack
ELK Stack
ELK Stack
‣ 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
fi
ELK Stack
‣ GET http://localhost:9200/books/es/_search?pretty
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:
‣ 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.
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.
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:
q=title:elasticsearch
115
fi
fi
‣ 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
‣ 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
‣ 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.
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:
fi
fi
car una ordenación personalizada.
‣ 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
ELK Stack
Comodines
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
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.
fi
fi
fi
fi
fi
ELK Stack
‣ Por ejemplo, para buscar fútbol y voleibol con 20 palabras de diferencia en un documento, haga lo
siguiente:
‣ "soccer volleyball"~20
fi
fi
ELK Stack
ELK Stack
ELK Stack
ELK Stack
Operadores booleanos
Operadores booleanos
‣ Función and: Requiere que ambos términos coincidan. Por ejemplo, buscamos documentos que
contengan soccer y 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:
+soccer volleyball
‣ El operador - prohibe el siguiente término, por ejemplo, buscar documentos que contienen soccer
pero no volleyball:
132
‣ 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.
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.
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.
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.
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.
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.
‣ 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.
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.
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.
ELK Stack
‣ 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.
ELK Stack
Creando índices
‣ Operación básica.
‣ Cambiando la creación automática de índices.
‣ Con guración del índice.
‣ Borrado de índice.
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á:
{
‣ 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
‣ 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*,-*
fi
fi
ELK Stack
‣ 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:
fi
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.
‣ 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.
fi
ELK Stack
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.
‣ 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.
fi
fi
ELK Stack
Introducción
‣ Por ejemplo, veamos el siguiente documento:
‣ 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
‣ 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):
159
fi
fi
ELK Stack
‣ 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.
ELK Stack
‣ 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.
162
fi
fi
ELK Stack
‣ Elasticsearch, por supuesto, indexará ese documento, pero veamos las asignaciones creadas para
nuestro índice:
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.
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í.
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):
‣ 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.
fi
ELK Stack
Introducción
‣ Ejemplo:
{
‣ 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.
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.
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.
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).
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
fi
ELK Stack
Ejemplos
‣ Tipo cadena:
"body" : { "type" : "string", "store" : "yes", "index" : "analyzed" }
‣ Tipo numérico:
"price" : { "type" : "
‣ Tipo booleano:
‣ Tipo binario:
‣ Tipo Ip:
"address" : { "type" : "ip" }
180
ELK Stack
ELK Stack
ELK Stack
‣ 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.
fi
ELK Stack
‣ Para cumplir con todos los requisitos posibles, la inteligencia de Elasticsearch se apoya en sus tres
herramientas:
‣ Analizadores.
‣ Tokenizadores.
‣ Filtros.
fi
ELK Stack
ELK Stack
‣ 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.
fi
fi
fi
ELK Stack
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.
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.
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
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
ELK Stack
fi
car los analizadores aplicados en las búsquedas:
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" : {
‣ Cada analizador se construye a partir de un solo tokenizador y múltiples ltros. Una lista completa
de los predeterminados
196
fi
fi
fi
fi
fi
fi
ELK Stack
‣ 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.
xpack.security.enabled: true
fi
fi
fi
fi
ELK Stack
‣ 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.
fi
ELK Stack
fi
ELK Stack
ELK Stack
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.
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.
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:
‣ 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:
‣ 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:
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:
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:
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:
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:
213
fi
fi
‣ 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:
215
fi
216
fi
ELK Stack
‣ 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:
‣ 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.
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
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:
{
233
ELK Stack
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.
POST /<index_name>/_search
236
‣ 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.
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:
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:
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.
Agregaciones de métricas
‣ Introducción.
‣ Suma, Media, Max y Min.
‣ Estadísticas.
‣ Cardinalidad.
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.
fi
ELK Stack
GET bigginsight/_search?track_total_hits=true
‣ 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
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:
fi
ELK Stack
‣ 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
‣ 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
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
POST /bigginsight/_search?size=0
‣ Las siguientes agregaciones nos permiten crear uno o más buckets, en función de las consultas/
ltros que elijamos:
266
fi
fi
fi
ELK Stack
Agregaciones personalizadas
‣ Ejemplo: trabajando con lter.
POST /bigginsight/_search?size=0
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.
ELK Stack
‣ 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):
ELK Stack
ELK Stack
‣ 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.
fi
fi
ELK Stack
‣ 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.
ELK Stack
Nov 14 22:20:10
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.
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.
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.
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.
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.
ELK Stack
Instalación
‣ Requisitos previos.
‣ Matriz de compatibilidad.
‣ Descarga.
‣ Descompresión.
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:
‣ Resumiendo, debemos de nir la variable ES_JAVA_HOME y pensar en trabajar con una versión de
Java 11.
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.
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
ELK Stack
El comando logstash
‣ Ejecutando el siguiente comando vemos todas sus opciones:
$ ./bin/logstash -h
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.
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, 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.
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 =>.
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 { } }
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.
fi
fi
fi
nimos su con guración, por ejemplo, para el plugin le:
input {
304
fi
fi
fi
chero se realizan mediante #
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} ]
308
ELK Stack
Secuencias de escape
‣ 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.
fi
fi
fi
fi
fi
fi
fi
ELK Stack
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
fi
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:
314
ELK Stack
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:
ELK Stack
Introducción
‣ https://www.elastic.co/guide/en/logstash/current/input-plugins.html
fi
ELK Stack
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:
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
ELK Stack
Codec csv
‣ El códec csv toma datos CSV, los analiza y los transmite.
‣ Ejemplo:
input {
‣ Ejemplo:
input {
324
‣ 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 {
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.
fi
ELK Stack
Introducción
‣ https://www.elastic.co/guide/en/logstash/current/ lter-plugins.html
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
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}
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
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
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.
fi
fi
ELK Stack
Plugin Mutate
‣ Ejemplo:
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:
fi
ELK Stack
Introducción
‣ https://www.elastic.co/guide/en/logstash/current/output-plugins.html
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
ELK Stack
Elasticsearch
‣ 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.
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.
ELK Stack
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.
Análisis de ubicación
‣ A través de Elastic Maps, puede analizar visualmente los datos de ubicación.
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.
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.
Instalación
‣ Requisitos previos.
‣ Matriz de compatibilidad.
‣ Versión de Elasticsearch.
‣ Descarga.
‣ Descompresión.
‣ Instalación para windows.
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.
fi
ELK Stack
Requisitos previos
‣ Para la versión 7.15.2 si arranca con JDK8 de nido en JAVA_HOME.
Matriz de compatibilidad
‣ Ir a https://www.elastic.co/es/support/matrix
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.
‣ 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.
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:
Descompresión
‣ Una vez descargado el chero, éste se descomprime y nos encontramos con algo tal que así:
Arrancando Kibana
‣ Introducción.
‣ El comando kibana.
‣ Veri cando la instalación.
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
ELK Stack
El comando kibana
‣ Ejecutando el siguiente comando vemos todas sus opciones:
$ ./bin/kibana -h
‣ 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.
‣ 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.
fi
fi
ELK Stack
Configurando Kibana
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:
371
ELK Stack
Introducción
‣ Para trabajar con datos los primero que tenemos que hacer es cargarlos y Kibana nos permitirá
siguiendo diferentes estrategias:
ELK Stack
ELK Stack
ELK Stack
ELK Stack
Analíticas
‣ Introducción.
‣ Creando un patrón de índice.
‣ Descubriendo datos.
ELK Stack
Introducción
‣ Se hace click en la sección Analytics -> Overview:
Descubriendo datos
‣ Esta página nos permite interaccionar con los datos cargados mediante la siguiente pantalla:
Descubriendo datos
‣ Podemos seleccionar cualquiera de los patrones de nidos:
Descubriendo datos
‣ A partir de ahí podemos realizar búsquedas gracias a KQL:
Descubriendo datos
‣ Y visualizar los datos que nos interesen en el panel central:
Descubriendo datos
‣ También podemos limitar el rango de fechas a visualizar gracias al calendario que aparece en la
parte derecha de la pantalla:
fi
ELK Stack