
Rappelons que le cœur d'Elastic Stack repose sur la base de données non relationnelle Elasticsearch, l'interface web Kibana et les collecteurs de données (le plus connu étant Logstash, ainsi que divers Beats, APM, et d'autres). Un des agréables ajouts de cette suite de produits est l'analyse de données par le biais d'algorithmes de machine learning. Dans cet article, nous explorons ce que ces algorithmes représentent. Nous vous invitons à lire la suite.
Le machine learning est une fonctionnalité payante d'Elastic Stack, qui fait partie du pack X-Pack. Pour commencer à l’utiliser, il suffit d’activer un essai de 30 jours après l'installation. À l'issue de la période d'essai, vous pouvez demander une prolongation ou acheter un abonnement. Le prix de l'abonnement n'est pas calculé en fonction du volume de données, mais du nombre de nœuds utilisés. Bien que le volume de données influence le nombre nécessaire de nœuds, cette approche de la licence est plus clémente vis-à-vis du budget de l'entreprise. Si une haute performance n'est pas nécessaire, il est possible de faire des économies.
Le ML dans Elastic Stack est écrit en C++ et fonctionne en dehors de la JVM, dans laquelle tourne Elasticsearch. Cela signifie que le processus (qui s'appelle d'ailleurs autodetect) consomme tout ce que la JVM ne prend pas. Dans un environnement de démonstration, cela n'est pas si critique, mais en production, il est important de dédier des nœuds spécifiques aux tâches de ML.
Les algorithmes de machine learning se divisent en deux catégories — et . Dans Elastic Stack, l'algorithme appartient à la catégorie « sans supervision ». Par vous pouvez consulter le cadre mathématique des algorithmes de machine learning.
Pour effectuer une analyse, l'algorithme de machine learning utilise les données stockées dans les index d'Elasticsearch. Les tâches d'analyse peuvent être créées à la fois depuis l'interface Kibana et via l'API. Si cela est fait à travers Kibana, certaines informations ne sont pas obligatoires. Par exemple, les index supplémentaires utilisés par l'algorithme lors de son fonctionnement.
Index supplémentaires utilisés pendant l'analyse.ml-state — informations sur les modèles statistiques (paramètres d'analyse) ;
.ml-anomalies-* — résultats des travaux des algorithmes de ML ;
.ml-notifications — paramètres des notifications sur les résultats de l'analyse.

La structure des données dans la base Elasticsearch est composée d'index et des documents qui y sont stockés. Comparé à une base de données relationnelle, un index peut être assimilé à un schéma de base de données, tandis qu'un document correspond à une entrée dans une table. Cette comparaison est conditionnelle et a été faite pour faciliter la compréhension du matériel ultérieur pour ceux qui ont seulement entendu parler d'Elasticsearch.
Via l'API, la même fonctionnalité est accessible que par l'interface web, c'est pourquoi, pour des raisons de clarté et de compréhension des concepts, nous allons montrer comment configurer via Kibana. Dans le menu à gauche, il y a une section Machine Learning, où l'on peut créer une nouvelle tâche (Job). Dans l'interface Kibana, cela ressemble à l'image ci-dessous. Nous allons maintenant examiner chaque type de tâche et montrer les types d'analyses qui peuvent y être construites.

Single Metric — analyse d'une seule métrique, Multi Metric — analyse de deux métriques ou plus. Dans les deux cas, chaque métrique est analysée dans un environnement isolé, c'est-à-dire que l'algorithme ne prend pas en compte le comportement des métriques analysées simultanément, comme cela pourrait sembler dans le cas de Multi Metric. Pour effectuer un calcul tenant compte de la corrélation entre différentes métriques, on peut appliquer une analyse Population. Advanced représente un réglage fin des algorithmes avec des options supplémentaires pour des tâches spécifiques.
Single Metric
L'analyse des changements d'une seule métrique — c'est la chose la plus simple que l'on puisse faire ici. Après avoir cliqué sur Create Job, l'algorithme cherchera des anomalies.

Dans le champ Aggregation on peut choisir l'approche pour rechercher des anomalies. Par exemple, lorsqu'on utilise Min les valeurs inférieures à la normale seront considérées comme anormales. Il y a Max, High Mean, Low, Mean, Distinct et d'autres. La description de toutes les fonctions peut être consultée .
Dans le champ Field correspond au champ numérique dans le document sur lequel nous allons effectuer l'analyse.
Dans le champ est la granularité des intervalles sur la chronologie, selon laquelle l'analyse sera effectuée. Vous pouvez faire confiance à l'automatisme ou choisir manuellement. L'image ci-dessous montre un exemple de granularité trop basse — vous pouvez manquer une anomalie. Avec ce paramètre, vous pouvez modifier la sensibilité de l'algorithme aux anomalies.

La durée des données collectées est un élément clé qui influence l'efficacité de l'analyse. Lors de l'analyse, l'algorithme identifie les intervalles répétitifs, calcule l'intervalle de confiance (lignes de base) et détecte les anomalies - des écarts atypiques par rapport au comportement normal de la métrique. Juste à titre d'exemple :
Lignes de base avec un petit échantillon de données :

Lorsque l'algorithme a quelque chose à apprendre, les lignes de base apparaissent comme suit :

Après le lancement de la tâche, l'algorithme identifie les écarts anormaux par rapport à la norme et les classe par probabilité d'anomalie (la couleur correspondante est indiquée entre parenthèses) :
Avertissement (bleu) : moins de 25
Mineur (jaune) : 25-50
Majeur (orange) : 50-75
Critique (rouge) : 75-100
Dans le graphique ci-dessous, un exemple des anomalies trouvées.

On voit ici le chiffre 94, qui indique la probabilité d'anomalie. Évidemment, puisque la valeur est proche de 100, cela signifie que nous avons une anomalie. Dans la colonne sous le graphique, la probabilité négligeable de 0,000063634 % d'obtenir cette valeur de métrique est indiquée.
En plus de la détection des anomalies, il est possible de lancer des prévisions dans Kibana. C'est très simple et à partir de la même vue que pour les anomalies - le bouton Forecast dans le coin supérieur droit.

La prévision est établie pour un maximum de 8 semaines à l’avance. Même si on en a très envie, plus n'est pas possible par conception.

Dans certaines situations, la prévision sera très utile, par exemple, lors du suivi de la charge utilisateur sur l'infrastructure.
Multi Metric
Passons à la prochaine fonctionnalité ML de l'Elastic Stack - l'analyse de plusieurs métriques en même temps. Mais cela ne signifie pas que l'on analysera la dépendance d'une métrique à une autre. C'est la même chose que la Single Metric, mais avec plusieurs métriques affichées sur un même écran pour faciliter la comparaison de l'influence de l'une sur l'autre. Nous parlerons de l'analyse de la dépendance d'une métrique à une autre dans la partie Population.
Après avoir cliqué sur le carré avec Multi Metric, une fenêtre avec les paramètres apparaîtra. Arrêtons-nous plus en détail sur ceux-ci.

Tout d'abord, il faut choisir les champs à analyser et l'agrégation des données par ceux-ci. Les options d'agrégation sont les mêmes que pour la Single Metric (Max, High Mean, Low, Mean, Distinct et d'autres). Ensuite, les données peuvent être éventuellement divisées par l'un des champs (champ Split Data). Dans l'exemple, nous avons fait cela selon le champ OriginAirportID. Notez que le graphique des métriques à droite est maintenant représenté sous la forme de plusieurs graphiques.

Champ Key Fields (Influencers) affecte directement les anomalies trouvées. Par défaut, il y aura toujours au moins une valeur ici, mais vous pouvez en ajouter d'autres. L'algorithme tiendra compte de l'influence de ces champs lors de l'analyse et affichera les valeurs les plus « influentes ».
Après le lancement, l'interface Kibana affichera quelque chose comme ça.

C'est ce qu'on appelle la carte thermique des anomalies pour chaque valeur de champ OriginAirportID, que nous avons spécifiée dans Split Data. Comme dans le cas de Single Metric, la couleur indique le niveau de déviation anormale. Une analyse similaire peut être effectuée, par exemple, pour les stations de travail afin de suivre celles où il y a un nombre suspect d'autorisations, etc. Nous avons déjà écrit , qui peuvent également être collectés et analysés ici.
Sous la carte thermique se trouve la liste des anomalies, chacune permettant de passer à la vue Single Metric pour une analyse détaillée.
Population
Pour rechercher des anomalies parmi les corrélations entre différentes métriques dans Elastic Stack, il existe une analyse spécialisée de Population. C'est grâce à elle que vous pouvez rechercher des valeurs anormales dans les performances de l'un des serveurs par rapport aux autres lors, par exemple, d'une augmentation du nombre de requêtes vers le système cible.

Sur cette illustration, le champ Population indique la valeur à laquelle les métriques analysées seront liées. Dans ce cas, il s'agit du nom du processus. En conséquence, nous verrons comment la charge processeur de chacun des processus a influencé les autres.
Notez que le graphique des données analysées est différent dans les cas de Single Metric et de Multi Metric. Cela a été conçu dans Kibana pour améliorer la perception de la distribution des valeurs des données analysées.

Le graphique montre que le processus stress (il convient de noter qu'il a été généré par un utilitaire spécial) sur le serveur poipu, qui a eu un impact (ou s'est avéré être un influenceur) sur l'apparition de cette anomalie.
Avancé
Analytique avec réglage fin. Lors de l'analyse Avancée, des options supplémentaires apparaissent dans Kibana. Après avoir cliqué dans le menu de création sur la tuile Avancée, une fenêtre comme celle-ci avec des onglets s'ouvre. L'onglet Détails de l'emploi a été intentionnellement omis, car il contient des réglages de base non liés directement à la configuration de l'analyse.

Dans summary_count_field_name vous pouvez éventuellement indiquer le nom du champ dans les documents contenant des valeurs agrégées. Dans cet exemple, il s'agit du nombre d'événements par minute. Dans Il s'agit du nom de la valeur d'un champ dans le document, qui contient une certaine valeur variable. Par le masque de ce champ, il est possible de segmenter les données analysées en sous-ensembles. Faites attention au bouton Ajouter un détecteur sur l'illustration précédente. Ci-dessous, le résultat du clic sur ce bouton.

Ici, un bloc supplémentaire de paramètres pour configurer le détecteur d'anomalies selon une tâche spécifique. Nous prévoyons d'explorer des cas d'utilisation particuliers (surtout en matière de sécurité) dans les prochains articles. Par exemple, l'un des cas analysés. Il est lié à la recherche de valeurs rares et se réalise .
Dans le champ fonction une fonction spécifique peut être choisie pour rechercher des anomalies. En plus de rare, il existe encore quelques fonctions intéressantes — . Elles révèlent des anomalies dans le comportement des métriques au cours de la journée ou de la semaine respectivement. Les autres fonctions d'analyse .
Dans nom_du_champ indique le champ du document selon lequel l'analyse sera effectuée. Par_nom_du_champ peut être utilisé pour diviser les résultats de l'analyse selon chaque valeur spécifique indiquée ici du champ du document. Si rempli sur_le_champ on obtiendra une analyse de la population, que nous avons examinée ci-dessus. Si une valeur est indiquée dans nom_du_champ_de_partition, alors, pour ce champ du document, des lignes de base distinctes seront calculées pour chaque valeur (la valeur peut être, par exemple, le nom du serveur ou le processus exécuté sur le serveur). Dans exclure_les_frequents on peut choisir tout ou aucun, ce qui signifie l'exclusion (ou l'inclusion) des valeurs fréquemment rencontrées dans les champs de documents.
Dans cet article, nous avons tenté de donner un aperçu aussi concis que possible des capacités de l'apprentissage automatique dans Elastic Stack, il reste encore beaucoup de détails en arrière-plan. Dites-nous dans les commentaires quels cas vous avez pu résoudre grâce à Elastic Stack et pour quelles tâches vous l'utilisez. Pour nous contacter, vous pouvez utiliser des messages privés sur Habr ou .
Source : habr.com
