Introdução ao ESQL — uma nova linguagem de consulta para análises flexíveis e iterativas

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

Há muito tempo, a Elastic Platform é considerada um sistema analítico para casos de uso de busca e dados gerados por máquina. A analítica se concentra no processamento dos dados conforme ingeridos, na qual se pensa de forma significativa em como estruturar os dados de maneira ideal à medida que eles são indexados no Elasticsearch. O Kibana expõe as agregações do Elasticsearch e as usa para criar dashboards, visualizações e alertas interativos.

Porém, como a Elastic Platform é mais amplamente adotada como uma plataforma de busca, segurança, observabilidade e analítica geral, os usuários analistas precisam da capacidade de pegar os dados conforme ingeridos, transformá-los para atender às suas necessidades investigativas pós-ingestão e extrair insights dos dados subjacentes dos índices do Elasticsearch. Eles precisam de um fluxo de trabalho conciso, integrado e eficiente, viabilizado por consultas ricas e expressivas nas quais busca, filtro, agregação e transformação são executados por meio de uma única expressão de consulta com pouca ou nenhuma alternância de contexto na UI.

Para resolver esses desafios, a equipe da Elastic está desenvolvendo a Elasticsearch Query Language (ESQL). O ESQL fornece aos usuários do Elastic uma linguagem de expressão de consulta flexível, poderosa e robusta para interrogar dados. O ESQL também fornece uma UX de consulta superior com funcionalidades de processamento pós-ingestão que transformam e expandem fundamentalmente as funcionalidades analíticas e de processamento de dados do Elasticsearch.

Nova arquitetura de computação de consulta e agregação 

O ESQL é mais do que uma linguagem. Ele representa um investimento significativo em novas funcionalidades de computação no Elasticsearch. Para atingir os requisitos funcionais e de desempenho para o ESQL, é necessário construir uma arquitetura de computação totalmente nova. As funções de busca, agregação e transformação do ESQL são executadas diretamente no próprio Elasticsearch. As expressões de consulta não são transpiladas para o QueryDSL para execução. Em vez disso, criamos suporte nativo para funções ESQL no Elasticsearch.

O ESQL introduz funcionalidades de computação distribuída para usuários em funções distintas e com vários níveis de habilidade. Essas funcionalidades de computação permitem que o ESQL simplifique os fluxos de trabalho do usuário de várias maneiras importantes.

Com o ESQL, você pode:

  • Usar uma UX de consulta superior: as expressões de consulta ESQL dão suporte para processamento de dados e analítica de alta complexidade. São fáceis de aprender, ler e compartilhar.
  • Usar as funcionalidades de filtro, agregação e transformação do Elasticsearch com subconsultas e pesquisas, possíveis graças às novas funcionalidades de computação e processamento de dados do Elasticsearch.
  • Trabalhar no Kibana no Discover, no Kibana Lens e nas soluções da Elastic, proporcionando fluxos de trabalho perfeitos. Você poderá visualizar consultas ESQL, compartilhá-las com as equipes em dashboards ou como consultas e usar consultas para criar alertas customizados.

Como você pode usar o ESQL 

O ESQL é uma linguagem de consulta com barras verticais, na qual os usuários processam dados do Elasticsearch por meio de uma sequência de comandos, delimitados por barras verticais. A saída de um comando torna-se a entrada do próximo para definir um pipeline de dados lógicos. As expressões ESQL são lineares, lógicas e facilmente legíveis. Elas são simples o suficiente para serem criadas, usadas e modificadas por analistas de todos os níveis de experiência. Um exemplo simples:

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

A expressão acima recupera todos os dados do índice e cria um novo fieldC para cada registro que é a soma de fieldA e fieldB. Por fim, os resultados são classificados no fieldC.

Use o ESQL para segurança

O ESQL é particularmente útil para caça a ameaças ad-hoc por analistas de segurança. Um analista pode começar consultando dados de log para mostrar os processos únicos gerados por “powershell.exe” e classificando pelo comprimento da string dos argumentos da linha 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

Os resultados mostram que o PowerShell está sendo usado para recuperar informações do sistema de arquivos e também informações sobre o Active Directory. Isso pode ser um comportamento normal do sistema, mas também pode indicar atividade maliciosa.

Para investigar melhor, a consulta é modificada para filtrar por argumentos de linha de comando relacionados ao sistema de arquivos e ao Active Directory. Em seguida, ela conta os valores únicos de process.command_line e 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

Os resultados mostram que o host2 tem muito mais processos powershell que invocam argumentos de linha de comando relacionados ao AD e a arquivos do que outros hosts. Um analista pode continuar modificando e estendendo a expressão de consulta ESQL para determinar se há atividade maliciosa do host2. Essa investigação leva a uma compreensão do vetor da ameaça para que ações corretivas possam ser tomadas e essa ameaça possa ser evitada no futuro.

Use o ESQL para busca

Você sabe que o Elasticsearch é e sempre será para busca. Portanto, o ESQL dá suporte às funções de busca, relevância e classificação que há muito fazem parte do Elasticsearch. Com o ESQL, é extremamente simples acessar todo o poder dessas funções de busca.

Considere uma agregação de termos simples na qual queremos produzir buckets com os três principais termos no campo de gênero, classificados por contagem de documentos.

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

doc_count

termo

6

eletrônica

3

rock

2jazz

Agregações de agrupamento, como histograma de data, também são aceitas. Nesta consulta, criamos um histograma do índice de vendas usando intervalos de 50 com base no campo de preço.

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

doc_count

bucket

3

200

2

150

0100
150
10

O ESQL também torna extremamente simples processar os dados de maneira semelhante às agregações de pipeline atuais. Por exemplo, digamos que você queira calcular a derivada de uma derivada. Em sua forma mais simples:

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

Use o ESQL para observabilidade

Os engenheiros de confiabilidade do local (SREs) enfrentam um desafio ao lidar com grandes quantidades de dados. Eles são responsáveis por usar esses dados para prevenir e remediar o tempo de inatividade do sistema e outros problemas relacionados. Eles monitoram milhares de sistemas que geram dados importantes de trace, log e métrica. Esses dados são usados pelos SREs na identificação de problemas e implementação de medidas para evitar interrupções do sistema ou das aplicações no futuro. Portanto, para um SRE, é essencial ter a capacidade de analisar o comportamento do sistema com uma compreensão combinada de vários conjuntos de dados.  

Os dados ingeridos de observabilidade são inerentemente imprevisíveis. O ESQL fornece os meios para os SREs correlacionarem e remodelarem os dados a fim de abrir insights mais profundos sobre o comportamento do sistema e das aplicações. Ele expande a capacidade de realizar análises post-hoc após a identificação de um problema, e esse insight inestimável é usado diretamente para evitar problemas semelhantes no futuro. 

A seção sobre processamento de dados abaixo usará exemplos de observabilidade.

Explore uma maneira totalmente nova de processar dados com as novas funcionalidades de computação do Elasticsearch

As expressões ESQL são flexíveis e poderosas para revelar insights obtidos de dados de índice. Mas o trabalho pesado por trás dessas expressões acontece no próprio Elasticsearch. Construímos um novo mecanismo de computação para dar suporte à funcionalidade de processamento de dados exposta pelo ESQL. Mais notavelmente, processamento de dados pós-ingestão aprimorado, estados de dados intermediários, funções de pesquisa e subconsultas. 

O ESQL depende inteiramente das novas funcionalidades de computação e processamento do Elasticsearch. O ESQL não é interpretado e executado via transpilação. Em vez disso, as expressões ESQL são processadas inteiramente no próprio Elasticsearch. 

Processamento pós-ingestão

O ESQL, conforme integrado em todo o Kibana, facilita e agiliza o acesso às agregações e projeções mais comuns e úteis. Imagine trabalhar com um índice de dados de métricas. Um analista pode querer calcular proporções ou realizar agregações nos dados ingeridos. Com o ESQL, elas podem ser facilmente derivadas de um índice subjacente.

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

Ao permitir a agregação e a transformação de índices subjacentes com rapidez e facilidade, o ESQL abre novos insights significativos à medida que os analistas moldam e exploram os dados. Isso simplifica a ingestão dos dados, pois o ESQL permite que os analistas obtenham novas estruturas e insights de um amplo conjunto de índices subjacentes.

Pipelines de dados e dados intermediários

Outra parte fundamental do suporte a expressões ESQL é a manipulação de dados em estados intermediários. A capacidade de manipular e modificar os dados conforme eles passam por estágios distintos do pipeline é fundamental para as funcionalidades de processamento expostas pelo ESQL.  

Considere a consulta a seguir, na qual buscamos o índice de métricas para encontrar os cinco nomes de host com o pico mais alto de utilização da 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 estágio desse pipeline de dados produz uma saída tabular. O comando inicial frommetrics recupera todos os dados do índice. Essa tabela é então agregada em system.process.cpu.total.pct e agrupada por hostname, resultando em uma tabela única. Esses resultados tabulares são filtrados e classificados para produzir a saída desejada.

max_cpu

hostname

.989

1webapache

.978

1websftp

.964nfsweb
.9552webredis
.943web_staging_primary

Essa saída pode então ser usada como base para visualizações ou alertas.

Pesquisas e subconsultas

O ESQL também introduz a funcionalidade de pesquisa e subconsulta no Elasticsearch. 

O ESQL pode pesquisar valores em um índice de pesquisa separado. Isso é mais comumente usado para enriquecer os resultados no momento da consulta. As pesquisas são semelhantes às junções à esquerda do SQL, pois retornam campos de um índice externo usando uma chave especificada.

Por exemplo, um índice de pesquisa contém informações sobre usuários do sistema identificados por uma chave exclusiva. Uma expressão ESQL pode pesquisar dados nesses índices para retornar esses dados externos nos resultados. Essa consulta enriquece os resultados do índice access_logs com dados de usuários do índice user_info_lookup. Especificamente, os campos de email e estado do índice de pesquisa devem ser retornados.

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

userid

[ … access_logs … ]

emailstateuserid

3455

bobNY3455

As subconsultas permitem que os usuários incorporem consultas distintas como argumentos em outras consultas. Por exemplo, um SRE pode querer usar uma agregação como um argumento em uma consulta no mesmo índice. Aqui, um SRE está usando a contagem do total de logins para calcular a porcentagem de logins de um usuário 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

Ao usar pesquisas e subconsultas, analistas e SREs podem aproveitar todo o Elasticsearch para gerar estruturas de dados incrivelmente ricas e revelar novos insights de dados no Elasticsearch.

O ESQL muda e melhora fundamentalmente a maneira como você interage com os dados na Elastic Search Platform. O ESQL revela o valor dos seus dados com funcionalidades poderosas para transformar e unir rapidamente grandes conjuntos de dados; para buscar, filtrar e processar enormes quantidades de dados; e, por fim, para reduzir o tempo de resposta e resolução. Estamos ansiosos para ver você colocá-lo em prática!

Junte-se a nós nesta jornada analítica 

Mal pode esperar para usar o ESQL, transformações, junções e consultas em várias etapas? Nós também. Acompanhe as novidades enquanto a equipe da Elastic continua desenvolvendo e preparando essas funcionalidades para o lançamento.

Tem interesse em experimentar essa solução antes de todo mundo? Fale conosco nos fóruns de discussão ou em nosso canal da comunidade Elastic no Slack. Adoraríamos receber seu feedback para ajudar a moldar a direção da nossa nova linguagem de consulta, bem como do nosso mecanismo de computação e dos fluxos de trabalho investigativos baseados em consulta.

O lançamento e o tempo de amadurecimento de todos os recursos ou funcionalidades descritos neste post permanecem a exclusivo critério da Elastic. Os recursos ou funcionalidades não disponíveis atualmente poderão não ser entregues dentro do prazo previsto ou nem chegar a ser entregues.