
La plateforme Elastic est depuis longtemps considérée comme un système d'analyse des cas d'utilisation de recherche et des données générées par machine. Les analyses se concentrent sur le traitement de données telles qu'ingérées, dans le cadre duquel la structuration optimale des informations comme elles sont indexées dans Elasticsearch est mûrement réfléchie. Kibana expose les agrégations d'Elasticsearch, mais aussi les utilise pour créer des alertes, des visualisations et des tableaux de bord interactifs.
Or, à mesure que la plateforme Elastic est plus largement adoptée en tant que solution d'analyse générale, d'observabilité, de sécurité et de recherche, les analystes qui l'utilisent doivent pouvoir traiter les données telles qu'ingérées, les transformer afin de satisfaire leurs besoins en investigation après l'ingestion, puis tirer des informations exploitables des données d'index Elasticsearch sous-jacentes. Ils ont besoin d'un workflow concis, intégré et efficace, propulsé par des requêtes riches et expressives, dans le cadre duquel la recherche, le filtrage, l'agrégation et la transformation sont exécutés via une expression de requête unique avec très peu, voire aucun changement de contexte de l'interface utilisateur.
Pour relever ces défis, l'équipe Elastic développe actuellement ESQL, le langage de requête d'Elasticsearch. Ce dernier fournit à la clientèle d'Elastic un langage d'expression des requêtes flexible, puissant et solide pour interroger les données. En outre, ESQL garantit une expérience utilisateur des requêtes supérieure grâce à des fonctionnalités de traitement après ingestion qui transforme et élargit le traitement des données et l'analyse dans Elasticsearch.
Nouvelle architecture de calcul des agrégations et des requêtes
ESQL est plus qu'un langage. Il représente un investissement important dans les nouvelles fonctionnalités de calcul d'Elasticsearch. Pour satisfaire aux exigences fonctionnelles et de performance d'ESQL, il est nécessaire de développer une toute nouvelle architecture de calcul. Les fonctions de recherche, d'agrégation et de transformation d'ESQL sont directement exécutées dans Elasticsearch. Les expressions de requêtes ne sont pas converties en QueryDSL à des fins d'exécution. Au contraire, nous avons conçu un support technique natif pour les fonctions d'ESQL dans Elasticsearch.
ESQL comprend des fonctionnalités de calcul distribuées qui sont destinées aux internautes occupant des rôles distincts avec des niveaux de compétences variés. Grâce à ces fonctionnalités de calcul, ESQL simplifie les workflows des internautes de plusieurs manières fondamentales.
Avec ESQL, vous pouvez :
- bénéficier d'une expérience utilisateur des requêtes supérieure, car l'expression des requêtes d'ESQL prend en charge le traitement des données et les analyses complexes qui sont faciles à comprendre, à lire et à partager ;
- utiliser les fonctionnalités de filtrage, d'agrégation et de transformation d'Elasticsearch dotées de sous-requêtes et de recherches grâce aux nouvelles capacités de traitement des données et de calcul d'Elasticsearch ;
- utiliser ESQL dans Kibana au sein de Discover, Kibana Lens et les solutions Elastic, ce qui vous permet de bénéficier de workflows harmonieux. Vous pourrez visualiser les requêtes ESQL, les partager avec les équipes dans des tableaux de bord ou en tant que requêtes et les utiliser pour créer des alertes personnalisées.

Comment utiliser ESQL
ESQL est un langage de requête canalisé dans lequel les internautes traitent les données d'Elasticsearch grâce à une séquence de commandes, délimitée par des canaux. Les données de sortie d'une commande deviennent les données d'entrée pour la suivante afin de définir un pipeline de données logique. Les expressions d'ESQL sont linéaires, logiques et faciles à lire. Elles sont suffisamment simples pour être créées, utilisées et modifiées par les analystes, tous niveaux d'expérience confondus. Voici un exemple simple.
search index_name
| eval field_c = (field_a + field_b)
| sort field_c desc
L'expression ci-dessus récupère toutes les données de l'index, crée un nouveau champ ("field_c") pour chaque enregistrement qui est la somme des champs "field_a" et "field_b". Enfin, les résultats sont triés dans le champ "field_c".
Utilisation d'ESQL à des fins de sécurité
ESQL est particulièrement utile pour la recherche des menaces ponctuelles par les analystes de la sécurité. Un analyste peut commencer par des requêtes des données de logs afin de montrer les processus uniques générés par "powershell.exe", puis effectuer un tri selon la longueur de chaîne des arguments de ligne de commande.
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’} |
windows | powershell.exe | Get-ADGroupMember -identity Helpdesk |
Comme les résultats obtenus le montrent, PowerShell est utilisé pour récupérer des informations sur le système de fichiers et sur Active Directory. Il pourrait s'agir d'un comportement normal du système ou bien d'un indice d'activités malveillantes.
Pour mener une enquête plus approfondie, la requête est modifiée afin de filtrer les arguments de ligne de commande liés au système de fichier et à Active Directory. Ensuite, elle comptabilise les valeurs uniques de process.command_line et les regroupe par 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 |
67 | host3 |
Comme les résultats obtenus le montrent, sur host2, il y a bien plus de processus PowerShell invoquant des fichiers et d'arguments de ligne de commande liés à Active Directory par rapport à d'autres hôtes. Un analyste peut continuer à modifier et à élargir les expressions de requêtes ESQL afin de déterminer s'il existe des activités malveillantes sur host2. En fin de compte, cette investigation permet de comprendre le vecteur de menace (afin de prendre des mesures correctives) et la manière dont cette menace peut être évitée à l'avenir.
Utilisation d'ESQL à des fins de recherche
Elasticsearch est conçue pour la recherche aujourd'hui, comme à l'avenir. Par conséquent, ESQL prend en charge les fonctionnalités de recherche, de pertinence et de classement qui font partie d'Elasticsearch depuis longtemps. Grâce à ESQL, il est extrêmement simple de bénéficier de la pleine puissance de ces fonctionnalités de recherche.
Imaginons une simple agrégation de termes où nous voulons produire des groupes avec les trois principaux termes du champ "genre" en les triant en fonction du nombre de documents.
from music
| stats terms((genre), 3, doc_count, unwind)
| sort doc_count desc
doc_count | term |
6 | electronic |
3 | rock |
2 | jazz |
Le regroupement des agrégations, comme les histogrammes de dates, est également pris en charge. Dans cette requête, nous créons un histogramme grâce à l'index des ventes qui utilise des intervalles de 50 dans le champ de prix.
from sales
| stats histogram(price, 50)
| sort bucket desc
doc_count | bucket |
3 | 200 |
2 | 150 |
0 | 100 |
1 | 50 |
1 | 0 |
Par ailleurs, ESQL simplifie considérablement le traitement des données d'une manière similaire aux agrégations des pipelines d'aujourd'hui. Par exemple, imaginons que nous souhaitons calculer le dérivé d'un dérivé. En voici le résultat dans sa forme la plus simple.
from sales
| eval (stats derivative(sales)) as fist_der
| eval (stats derivative(first_der)) as second_der
Utilisation d'ESQL à des fins d'observabilité
Les ingénieurs de fiabilité des sites (SRE) doivent gérer d'énormes quantités de données, ce qui représente un véritable défi. Ils doivent utiliser ces informations pour éviter les indisponibilités des systèmes et d'autres problèmes connexes, mais aussi pour y remédier, le cas échéant. Ils monitorent des milliers de systèmes qui génèrent d'importantes données d'indicateurs, de logs et de traces. Ensuite, les SRE utilisent ces informations afin d'identifier les problèmes et d'appliquer des mesures pour éviter les interruptions des systèmes et des applications à l'avenir. Par conséquent, pour un SRE, il est essentiel de pouvoir analyser le comportement des systèmes avec une compréhension hétérogène provenant de plusieurs ensembles de données.
Par essence, les données ingérées d'observabilité sont imprévisibles. ESQL fournit aux SRE le moyen de corréler et de réorganiser les données afin d'obtenir des informations exploitables plus précises sur les comportements des systèmes et des applications. Il élargit leur capacité à réaliser des analyses rétrospectives quand un problème a été identifié. Ainsi, ces précieuses informations exploitables sont directement utilisées pour éviter des problèmes similaires à l'avenir.
La section consacrée au traitement des données ci-dessous se fonde sur des exemples d'Observability.
Une méthode inédite de traitement des données grâce aux nouvelles fonctionnalités de calcul d'Elasticsearch
Les expressions d'ESQL sont flexibles et puissantes : elles permettent d'obtenir des informations exploitables à partir des données d'index. Toutefois, le gros du travail sous-jacent à ces expressions est réalisé dans Elasticsearch. Nous avons conçu un nouveau moteur de calcul afin de prendre en charge la fonctionnalité de traitement des données exposée par ESQL. Fait plus remarquable, les sous-requêtes, les fonctions de recherche, les états des données intermédiaires et le traitement des données après ingestion ont été améliorés.
ESQL se fonde entièrement sur les nouvelles fonctionnalités de traitement et de calcul d'Elasticsearch. ESQL n'est pas interprété ni exécuté par transpilation. Au contraire, les expressions d'ESQL sont traitées complètement dans Elasticsearch.
Traitement après ingestion
ESQL, tel qu'intégré dans Kibana, accélère et facilite l'accès aux projections et aux agrégations les plus courantes et utiles. Imaginons que nous travaillons avec un index de données d'indicateurs. Un analyste peut vouloir calculer les ratios ou réaliser des agrégations à partir des données ingérées. Avec ESQL, ces dernières peuvent être facilement dérivées d'un index sous-jacent.
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
En permettant l'agrégation et la transformation rapides et faciles des index sous-jacents, l'ESQL génère de nouvelles informations exploitables fondamentales à mesure que les analystes explorent et organisent les données. Ainsi, l'ingestion des données est simplifiée, car ESQL permet aux analystes de dériver de nouvelles structures et informations exploitables depuis un vaste ensemble d'index sous-jacents.
Données intermédiaires et pipelines de données
La manipulation des données dans des états intermédiaires est un autre élément essentiel de la prise en charge des expressions d'ESQL. La capacité à gérer et à modifier les données à mesure qu'elles passent par des étapes distinctes du pipeline est fondamentale pour les fonctionnalités de traitement exposées par ESQL.
Imaginons la requête suivante dans laquelle nous cherchons les index d'indicateurs afin de trouver les cinq noms d'hôte enregistrant la plus forte utilisation du processeur.
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
Chaque étape de ce pipeline de données génère des données de sortie tabulaires. La commande from metrics initiale récupère l'ensemble des données d'index. Ensuite, ce tableau est agrégé sur system.process.cpu.total.pct et regroupé par hostname, ce qui en fait un tableau unique. Puis, ces résultats tabulaires sont filtrés et triés afin de générer les données de sortie souhaitées.
max_cpu | hostname |
.989 | 1webapache |
.978 | 1websftp |
.964 | nfsweb |
.955 | 2webredis |
.943 | web_staging_primary |
Ces données de sortie peuvent ensuite être utilisées comme base pour créer des visualisations ou des alertes.
Recherches et sous-requêtes
ESQL intègre des fonctionnalités de recherche et de sous-requête à Elasticsearch.
ESQL peut rechercher des valeurs dans un index distinct. Cette fonction est la plus couramment utilisée pour enrichir les résultats au moment de la requête. Les recherches sont similaires aux jointures gauches de SQL, car elles identifient les champs dans un index étranger à l'aide d'une clé indiquée.
Par exemple, un index de recherche contient des informations sur les utilisateurs des systèmes identifiés par la clé unique. Une expression d'ESQL peut chercher des données dans ces index afin de récupérer ces informations étrangères dans les résultats. Cette requête enrichit les résultats provenant de l'index "access_logs" avec les données relatives aux utilisateurs provenant de l'index "user_info_lookup". En particulier, les champs d'état et d'e-mail provenant de l'index de recherche doivent être récupérés.
from access_logs where user != 'root'
| lookup user_info_lookup['email', 'state'] on userid
userid | [ … access_logs … ] | state | userid | |
3455 | … | bob | NY | 3455 |
Grâce aux sous-requêtes, les utilisateurs intègrent les requêtes distinctes en tant qu'arguments dans d'autres requêtes. Par exemple, un SRE peut vouloir utiliser une agrégation en tant qu'argument dans une requête par rapport au même index. Dans ce cas, un SRE utilise le nombre total de connexions afin de calculer le pourcentage provenant d'un utilisateur spécifique.
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
En utilisant les recherches et les sous-requêtes, les analystes et les SRE peuvent exploiter l'ensemble de leurs fonctionnalités Elasticsearch afin de générer des structures de données incroyablement riches et d'obtenir de nouvelles informations exploitables directement dans Elasticsearch.
ESQL modifie et améliore fondamentalement vos interactions avec les données dans Elastic Search Platform. ESQL libère le potentiel de vos données grâce à de puissantes fonctionnalités afin de transformer rapidement et de regrouper de vastes ensembles de données, de rechercher, de filtrer et de traiter d'énormes quantités de données, puis de diminuer les temps de réponse et de résolution. Nous avons hâte de vous voir mettre tout cela à l'œuvre !
Un parcours analytique à explorer ensemble
Avec ses transformations, ses jointures et ses requêtes à plusieurs étapes, ESQL vous enthousiasme ? Nous aussi ! Nous vous en parlerons bientôt davantage à mesure que l'équipe Elastic continue de développer ces fonctionnalités et d'en préparer le lancement.
Vous souhaitez tester cette solution en avant-première ? Contactez-nous sur les forums de discussion ou sur le canal Slack de la communauté Elastic. Nous aimerions connaître votre avis. Vos commentaires nous aident à façonner l'orientation de nos nouveaux workflows d'investigation fondés sur les requêtes, de moteur de calcul et de langage de requête.
La publication et la date de publication de toute fonctionnalité ou fonction décrite dans le présent article restent à la seule discrétion d'Elastic. Toute fonctionnalité ou fonction qui n'est actuellement pas disponible peut ne pas être livrée à temps ou ne pas être livrée du tout.