Introducción a ESQL: Un nuevo lenguaje de búsqueda para analíticas iterativas y flexibles

blog-thumb-elevate-our-work-1680x980.png

Elastic Platform está bien conceptuado desde hace tiempo como un sistema analítico para casos de uso de búsqueda y datos generados por máquinas. Las analíticas se enfocan en procesar los datos a medida que se ingestan, y se evalúa detenidamente cómo estructurar los datos de forma óptima a medida que se indexan en Elasticsearch. Kibana expone las agregaciones de Elasticsearch y las usa para crear dashboards interactivos, visualizaciones y alertas.

A medida que Elastic Platform se adopta de forma más generalizada como una plataforma de búsqueda, seguridad, observabilidad y analíticas generales, los usuarios analistas requieren la capacidad de tomar los datos a medida que se ingestan, transformarlos para que se adapten a sus necesidades de investigación posingesta y derivar información a partir de los datos de índice de Elasticsearch subyacentes. Necesitan un flujo de trabajo conciso, integrado y eficiente habilitado por consultas expresivas y completas en el que la búsqueda, el filtrado, la agregación y la transformación se realicen a través de una sola expresión de búsqueda con poco o ningún cambio de contexto de UI.

Para resolver estos desafíos, el equipo de Elastic está desarrollando actualmente Elasticsearch Query Language (ESQL). ESQL brinda a los usuarios de Elastic un lenguaje de expresión de búsqueda flexible, poderoso y robusto para indagar en los datos. ESQL también proporciona una UX de búsqueda superior con capacidades de procesamiento posingesta que transforman en esencia y amplían las capacidades de procesamiento de datos y analíticas de Elasticsearch.

Nueva arquitectura de procesamiento de agregaciones y búsqueda 

ESQL es más que un lenguaje. Representa una inversión significativa en nuevas capacidades de procesamiento dentro de Elasticsearch. Para cumplir tanto con los requisitos de rendimiento como con los funcionales de ESQL, es necesario crear una arquitectura de procesamiento completamente nueva. Las funciones de búsqueda, agregación y transformación de ESQL se ejecutan directamente dentro de Elasticsearch en sí. Las expresiones de búsqueda no se transpilan a QueryDSL para su ejecución. En cambio, desarrollamos soporte nativo para las funciones de ESQL dentro de Elasticsearch.

ESQL introduce capacidades de procesamiento distribuidas para los usuarios en diversos roles y con diferentes niveles de habilidades. Estas capacidades de procesamiento permiten que ESQL simplifique los flujos de trabajo de los usuarios de varias formas clave.

Con ESQL puedes hacer lo siguiente:

  • Usar una UX de búsqueda superior: las expresiones de búsqueda de ESQL brindan soporte para procesamiento de datos y analíticas complejas. Son fáciles de aprender, leer y compartir.
  • Usar las capacidades de filtrado, agregación y transformación de Elasticsearch con subconsultas y búsquedas es posible gracias a las nuevas capacidades de procesamiento de datos y procesamiento de Elasticsearch.
  • Usar ESQL en todo Kibana en Discover, Kibana Lens, y soluciones de Elastic, lo que te proporcionará flujos de trabajo sin problemas. Podrás visualizar las búsquedas de ESQL, compartirlas con los equipos en dashboards o como búsquedas, y usar búsquedas para crear alertas personalizadas.

Cómo puedes usar ESQL 

ESQL es un lenguaje de búsqueda con barras verticales en el que los usuarios procesan datos de Elasticsearch a través de una secuencia de comandos, delimitados por barras verticales. La salida de un comando se convierte en la entrada del siguiente para definir un pipeline de datos lógico. Las expresiones de ESQL son lineales, lógicas y fáciles de leer. Son lo suficientemente simples para que analistas de todos los niveles de experiencia puedan crearlas, usarlas y modificarlas. Un ejemplo sencillo:

search index_name
| eval field_c = (field_a + field_b)
| sort field_c desc

La expresión anterior recupera todos los datos del índice, crea un fieldC nuevo para cada registro que es la suma de fieldA y fieldB. Por último, los resultados se ordenan en fieldC.

Uso de ESQL para seguridad

ESQL es particularmente útil para la búsqueda de amenazas ad hoc por parte de analistas de seguridad. Un analista puede comenzar por buscar en datos de logs para mostrar los procesos únicos que genera "powershell.exe" y ordenarlos por la longitud del texto de los argumentos de la línea de comando.

from winlog
  | where host.os.family == ‘windows’
  | where process.name == "powershell.exe"
  | unique process.command_line
  | sort len(process.command_lin) desc
  | limit 3

host.os.family

process.name

process.command_line

windows

powershell.exe

(get-acl \\smb_file\share).access | ft IdentityReference,FileSystemRights,AccessControlType,IsInherited,InheritanceFlags -auto

windows

powershell.exe

Get-ADComputer -property * -filter { ipv4address -eq ‘172.16.0.3’}

windowspowershell.exeGet-ADGroupMember -identity Helpdesk

Los resultados muestran que PowerShell se usa para recuperar información del sistema de archivos e información sobre Active Directory. Esto podría ser el comportamiento normal del sistema, pero también podría indicar actividad maliciosa.

Para investigar en más detalle, la búsqueda se modifica para filtrar argumentos de la línea de comando relacionados con el sistema de archivos y Active Directory. Luego cuenta los valores únicos de process.command_line y los agrupa por hostname.

from winlog
  | where host.os.family == ‘windows’
  | where process.name == "powershell.exe"
  | where process.command_line in (‘*get-acl*’, ‘*Get-AD*’)
  | stats count(unique process.command_line) as cl_count by hostname
  | sort cl_count desc
  | limit 3

cl_count

hostname

155

host2

74

host1

67host3

Los resultados muestran que host2 tiene, en comparación con otros hosts, muchos más procesos de powershell que invocan argumentos de línea de comandos relacionados con AD y archivos. Un analista puede seguir modificando y extendiendo la expresión de búsqueda de ESQL para determinar si hay actividad maliciosa del host2. Esta investigación lleva, en última instancia, a comprender el vector de amenazas de modo que la acción de remediación pueda tomarse y cómo esta amenaza puede prevenirse en el futuro.

Uso de ESQL para búsqueda

Elasticsearch es y siempre será para la búsqueda. Por lo tanto, ESQL brinda soporte para las funciones de búsqueda, relevancia y clasificación que forman parte de Elasticsearch desde hace tiempo. ESQL hace que sea sumamente fácil acceder a todo el poder de estas funciones de búsqueda.

Piensa en una agregación de términos simple en la que deseamos producir cubetas con los principales tres términos en el campo de género, ordenados por recuento de documentos.

from music
| stats terms((genre), 3, doc_count, unwind)
| sort doc_count desc

doc_count

term

6

electronic

3

rock

2jazz

También se ofrece soporte para las agregaciones de creación de cubetas, como histograma de fechas. En esta búsqueda, creamos un histograma a partir del índice de ventas usando intervalos de 50 basados en el campo de precio.

from sales
| stats histogram(price, 50)
| sort bucket desc

doc_count

bucket

3

200

2

150

0100
150
10

ESQL también hace que sea muy sencillo procesar datos de un modo similar a las agregaciones de pipeline actuales. Por ejemplo, supongamos que deseas calcular la derivada de una derivada. En su forma más simple:

from sales
| eval (stats derivative(sales)) as fist_der
| eval (stats derivative(first_der)) as second_der

Uso de ESQL para observabilidad

Los ingenieros de confiabilidad del sitio (SRE) se enfrentan a un desafío al abordar enormes cantidades de datos. Son los responsables de usar estos datos para prevenir y remediar el tiempo de inactividad del sistema y otros problemas relacionados. Monitorean miles de sistemas que generan datos de rastreo, logs y métricas importantes. Estos datos los usan luego los SRE para identificar problemas e implementar medidas a fin de prevenir interrupciones en el sistema o las aplicaciones en el futuro. Por lo tanto, para un SRE, la capacidad de analizar el comportamiento del sistema con una comprensión combinada de varios sets de datos es fundamental.  

Los datos ingestados mediante observabilidad son inherentemente impredecibles. ESQL proporciona los medios para que los SRE correlacionen y remodelen los datos a fin de generar información más profunda sobre el sistema y el comportamiento de las aplicaciones. Amplía su capacidad de realizar análisis post hoc luego de identificar un problema, y esta información invaluable se usa de forma directa a fin de prevenir problemas similares en el futuro. 

La sección sobre el procesamiento de datos a continuación usará ejemplos de Observability.

Explorar una forma completamente nueva de procesar datos con nuevas capacidades de procesamiento de Elasticsearch

Las expresiones de ESQL son tanto flexibles como poderosas para desbloquear información a partir de los datos de índice. Pero el trabajo duro detrás de estas expresiones sucede en Elasticsearch en sí. Desarrollamos un nuevo motor de procesamiento para dar soporte a la funcionalidad de procesamiento de datos que expone ESQL. En particular, procesamiento de datos posingesta, estados de datos intermedios, funciones de búsqueda y subconsultas mejorados. 

ESQL depende en su totalidad de las capacidades nuevas de procesamiento de Elasticsearch. ESQL no se interpreta ni ejecuta mediante transpilación. En cambio, las expresiones de ESQL se procesan por completo dentro de Elasticsearch en sí. 

Procesamiento posingesta

ESQL, dado que está integrado en todo Kibana, hace que sea rápido y fácil acceder a las proyecciones y agregaciones más útiles y comunes. Imagina trabajar con un índice de datos de métricas. Un analista puede querer calcular ratios o realizar agregaciones en los datos ingestados. Con ESQL, estos pueden derivarse con facilidad desde un índice subyacente.

from network_flow 
| stats count(*) filter (where transport == ‘udp’) as udp_count
| stats count(*) filter (where transport == ‘tcp’) as tcp_count
| eval total_transport_events = udp_count + tcp_count
| eval udp_per_total = udp_count / total_transport_events

Gracias a que permite la agregación y transformación fáciles y rápidas de los índices subyacentes, ESQL genera nueva información importante a medida que los analistas modelan y exploran los datos. Esto simplifica la ingesta de datos, debido a que ESQL permite a los analistas derivar estructuras e información nuevas a partir de un amplio conjunto de índices subyacentes.

Pipelines de datos y datos intermedios

Otra parte clave de brindar soporte para las expresiones de ESQL es ocuparse de los datos en estados intermedios. La capacidad de ocuparse de los datos y modificarlos a medida que pasan por diferentes etapas del pipeline es esencial para el procesamiento de capacidades expuestas por ESQL.  

Ten en cuenta la búsqueda siguiente, en la que buscamos el índice de métricas para encontrar los cinco hostnames con el mayor pico de uso de CPU.

from metrics
| stats max(system.process.cpu.total.pct) as max_cpu by hostname
| where max_cpu > .800 and hostname == '*web*' 
| sort max_cpu desc
| limit 5

Cada etapa de este pipeline de datos produce una salida tabular. El comando inicial from metrics recupera todos los datos del índice. Esta tabla se agrega luego a system.process.cpu.total.pct y se agrupa por hostname, lo que resulta en una tabla única. Estos resultados tabulares luego se filtran y ordenan para producir la salida deseada.

max_cpu

hostname

.989

1webapache

.978

1websftp

.964nfsweb
.9552webredis
.943web_staging_primary

Esta salida puede usarse luego como base para visualizaciones o alertas.

Búsquedas y subconsultas

ESQL también introduce la funcionalidad de búsqueda y subconsultas a Elasticsearch. 

ESQL puede buscar valores en un índice de búsqueda diferente. Esto se usa mayormente para enriquecer los resultados al momento de la búsqueda. Las búsquedas son similares a las uniones left join de SQL en cuanto a que devuelven campos de un índice externo usando una clave especificada.

Por ejemplo, un índice de búsqueda contiene información sobre los usuarios del sistema identificados con una clave única. Una expresión de ESQL puede buscar datos en estos índices para devolver dichos datos externos en los resultados. Esta búsqueda enriquece los resultados del índice access_logs con datos del usuario del índice user_info_lookup. Específicamente, se devolverán los campos de correo electrónico y estado del índice de búsqueda.

from access_logs where user != 'root'
| lookup user_info_lookup['email', 'state'] on userid

userid

[ … access_logs … ]

emailstateuserid

3455

bobNY3455

Las subconsultas permiten a los usuarios incrustar búsquedas diferentes como argumentos dentro de otras búsquedas. Por ejemplo, es posible que un SRE quiera usar una agregación como argumento en una búsqueda en el mismo índice. Aquí, un SRE está usando el recuento total de inicios de sesión para calcular el % de inicios de sesión por un usuario específico.

from user_login where userid = 1234
| eval stats count(*) as 1234_logins
| eval total_logins = [from logs where userid = *| stats count(*) as  total_logins]
| eval round((1234_logins / total_logins), 2) as 1234_pct

Al usar búsquedas y subconsultas, los analistas y SRE pueden aprovechar todo su Elasticsearch para generar estructuras de datos sumamente completas y desbloquear nueva información a partir de los datos en Elasticsearch.

ESQL en esencia cambia y mejora la forma en que interactúas con los datos en Elastic Search Platform. ESQL desbloquea el valor de tus datos con capacidades poderosas para transformar y unir grandes sets de datos con rapidez; para buscar, filtrar y procesar enormes cantidades de datos y, en última instancia, para reducir el tiempo de respuesta y resolución. Ansiamos verte ponerlo a trabajar.

Únete a nosotros en este recorrido analítico 

¿Estás entusiasmado por ESQL, las transformaciones y uniones, y por usar búsquedas de varios pasos? Nosotros también. Mantente atento a más noticias; el equipo de Elastic continúa desarrollando y preparando estas capacidades para su lanzamiento.

¿Te interesaría probar esta solución antes que todos? Puedes contactarnos en los foros de debate o en nuestro canal de Slack de la comunidad de Elastic. Nos encantaría conocer tus comentarios para que nos ayuden a encaminar nuestro nuevo lenguaje de búsqueda, motor de procesamiento y flujos de trabajo de investigación basados en búsqueda.

El lanzamiento y el plazo de cualquier característica o funcionalidad descrita en este blog quedan a la entera discreción de Elastic. Cualquier característica o funcionalidad que no esté disponible actualmente puede no entregarse a tiempo o no entregarse en absoluto.