Mesure d'indices de performance avec ELK
Le monitoring et la mesure d’indices de performance des applications informatiques sont un enjeu majeur pour les entreprises.
L’évolution des technologies autour de la qualification, du stockage et du traitement de gros volumes de données (Big Data) ainsi que du machine learning, a permis d’améliorer le monitoring et cela dans différents domaines (détection de fraude dans les transactions financières, détection des pannes système, facilitation de la détection de bug dans les applications Big Data...).
Le monitoring s’appuie particulièrement sur des données systèmes appelées logs. De manière générale, les logs peuvent être considérés comme des données textuelles structurées ou brutes qui contiennent des informations et qui bien exploitées peuvent nous servir dans la détection d’anomalies ou d’incidents.
Les propriétés d’un fichier de logs sont les suivantes :
Timestamp : la date et l’heure de l’évènement.
Data : données qui couvre le système d’exploitation utilisé, la réponse du serveur, l’état du système et éventuellement l’erreur survenue.
Aujourd’hui, on va vous parler d’une des approches possibles pour traiter le monitoring, l’utilisation de la pile ELK ( Elasticsearch, Logstash et Kibana) pour la récupération, la centralisation et la visualisation des données. Nous aborderons dans un deuxième temps l’utilisation du machine learning pour la détection des anomalies sur les données de logs.
Le traitement des données de logs peut être réparti comme suit :
Extraction des données : des différentes bases existantes permettant d’avoir un data set le plus complet possible.
Structuration des données : en utilisant le log analyser (Logstash)
Centralisation des données : en utilisant ElasticSearch
Visualisation des données : en utilisant Kibana pour comprendre les données et aider à voir les anomalies.
Apprentissage des données : en utilisant python par exemple. Ce traitement se divisera en 3 étapes
Data cleaning
Pre-processing
Prédiction
La pile ELK est un outil utilisé par de grands acteurs du marché reconnus pour traiter de gros volumes de données comme Facebook, Amazon et eBay.
La pile ELK est composée de trois plateformes ; ElasticSearch, Logstash et Kibana que nous allons détailler ci-dessous.
ElasticSearch : le cœur de la pile
ElasticSearch est un moteur de recherche basé sur Lucene. Il a la capacité de traiter des terra-bytes ou même des peta-bytes de données en requêtant en l’occurrence en format JSON.
ElasticSearch peut indexer des données hétérogènes et les centraliser suivant des configurations de mapping. La communication avec ElasticSearch est faite via requête http : REST API sur le port 9200.
ElasticSearch possède plusieurs fonctionnalités de recherche :
Recherche lite : permet de rechercher un string donné dans les documents.
Recherche QueryDSL : permet d’utiliser les fonctions de recherche de Lucene via JSON.
Il s’appuie également sur d’autres fonctions d’analyse et de recherche comme : bool, range, match, min, moyenne
Conçu pour gérer de gros volumes de données, Elasticsearch est distribué par nature. Il est scalable horizontalement s’appuyant en l’occurrence sur le rajout de noeuds dans un cluster. Ainsi, il fonctionne parfaitement dans un contexte big data.
Logstash : Le pipeline
Outil open-source, il reçoit des données hétérogènes et applique des traitements précisés dans un filtre.
Logstash possède plus de 200 plugins qui facilitent les traitements, indépendamment de la source et du format. La variété des filtres rend logstash très puissant. Il analyse du texte ou fichier csv, remplace une donnée sensible par un hash, analyse une IP et ajoute des informations de position, encode un champ en JSON, renomme supprime et remplace des champs.
Logstash est équipé de plusieurs plugins qui facilitent la récolte des données notamment Beats. Il intervient sur la partie collection et transfert des données des différentes sources. C’est un framework léger et disponible sous différentes versions :
FileBeat : transférer les logs
MetricBeat : transférer les données d’états
PacketBeat : transférer les données d’états de réseau
WinlogBeat : transférer les log windows
À noter que Beats doit être installé sur les serveurs qui produisent les données.
Kibana : l'outil de visualisation des résultats
Plateforme open source qui a pour rôle de visualiser les résultats sous forme de graphes, tableaux, cartes et jauges. Interface web riche, elle offre la possibilité de créer des dashboard regroupant les visuels mentionnés.
Kibana facilite la manipulation de grands volumes de données. Elle permet d’affiner l’interprétation des résultats en temps réels grâce à des environnements de requêtage dédiés.
Notez que les composants présentés dans la pile ELK d’Elastic sont open source.
En plus des composants évoqués précédemment, d’autres extensions payantes sont proposées par Elastic. Dans notre article nous allons nous pencher sur l’extension X-pack.
X-pack : l'Extension machine learning
Il propose une panoplie d'algorithmes et de méthodes statistiques implémentées pour apprendre des modèles de flot de données (training et modeling) pour prédire des futurs comportements, détecter des anomalies et les visualiser grâce Kibana.
Traitement et prédiction sur les données
Nous commencerons par définir ce qu’est une anomalie et ses caractéristiques puis on présentera quelques approches utilisées dans le cas d’usage du monitoring d’application.
Une anomalie peut être définie comme un comportement observé différent du comportement attendu ou spécifié. Une anomalie est toujours causée par une erreur ou un défaut.
Dans le cas des logs, le volume des données (pouvant atteindre les milliers de lignes par seconde) rend très difficile toute approche manuelle. De plus les causes d’anomalies et leurs occurrences restent inconnues. Il est donc risqué, en général, de tenter de labéliser les données car on peut oublier certains types anomalies. Leur détection s’apparente donc à un problème non supervisé de machine learning (les données ne contiennent pas de tags sur le type d’anomalie associée).
Étant des données brutes, les logs sont difficiles à enrichir en partant de différentes sources. Pour se faire il faut s’assurer d’avoir un identifiant unique et/ou le bon timestamp pour toutes les données à croiser.
Il existe différentes méthodes connues pour le traitement et l’enrichissement des données de logs suivant le cas d’usage. Ici, seront présentées quelques approches générales d’analyse de logs :
Séries Temporelles
En se basant sur des champs numériques d’un espace continue, Kibana permet de faire simplement et efficacement de beaux graphiques de séries temporelles facilitant l’étude.
Deux méthodes de détection sont utilisées, la première consiste à fixer un seuil à 3 fois la déviation standard permettant de détecter les anomalies globales sur toutes les séries temporelles. Ce seuil permet d’avoir une confiance de 99.7% des données qui sont situées entre [-seuil,+seuil]. Cependant, cette approche ne permet pas de détecter les anomalies locales ainsi que le changement brusque de comportement.
Deuxième méthode, plus sophistiquée, analyse les différents champs séparément et décompose les séries temporelles en saisonnalité et tendance de Lœss ou STL (Seasonal and Trend decomposition using Lœss). Cette méthode permet notamment d’éliminer certaines anomalies qui se répètent.
Ces pics répétitifs sont dus à la saisonnalité de la série temporelle et peuvent ne pas être des vraies anomalies. Suite à cette décomposition, il existe un test statistique permettant la détection des changements brusques susceptibles d’être des anomalies. C’est le test de la déviation extrême généralisé de student ou G-ESD (Generalized Extreme Studentized Deviate). (1)
Clustering
Une pré-procession plus avancée est nécessaire pour s’appuyer sur cette approche. Elle permet de garder que les champs qui semblent être les plus pertinents en termes d’information. Plusieurs algorithmes de clustering pourraient être utilisés, un des plus efficace dans la détection d’anomalies est DBSCAN. Cet algorithme ne nécessite pas la fixation d’un nombre de clusters, ces derniers se formeront automatiquement. DBSCAN requière 2 paramètres :
Le nombre de points minimum se trouvant dans un rayon géométrique pour former un cluster.
La distance (epsilon) qui spécifie la proximité requise entre deux points faisant partie d’un même cluster. La distance epsilon optimale peut être déterminée en utilisant l’algorithme des K plus proche voisins (KNN) comme présenté dans l’article (2)
Deep Learning
Les réseaux de neurones (RN) ont fait leurs preuves dans la détection des évènements rares tels que les anomalies. Aujourd’hui, grâce à l’évolution technologique, il est possible de construire des réseaux de neurones de plus en plus grands.
Basé sur le fonctionnement du cerveau humain, chaque neurone permet d’extraire, de combiner ou de compresser des informations en entrée.
Un cas d’exemple est l’auto encodeur qui est un réseau de neurones qui extrait l’information utile dans les données, les compresse et les reconstruit en apprenant le comportement normal des données. Ce principe permet à l’algorithme de comparer la donnée en entrée et la donnée reconstruite en sortie. S’il existe une différence importante entre les deux. Il peut détecter l’anomalie d’un comportement normal.
Les étapes d’utilisation de l’auto encoder sont décrites ci-dessous :
Entraîner le modèle sur une distribution de données considérées comme "normale" (anomalie rare) via les principes d’encodage et de décodage.
Minimisation de l’erreur de reconstruction représenté par la différence entre les données en entré et en sortie de l’algorithme (fonction identité).
Essayer de reconstruire les données de tests en se basant sur la prédiction du modèle. Si l'erreur mesurée lors de la reconstruction est significative il s’agit d'un comportement anormal et donc d'une anomalie.
Pour conclure, la pile ELK (ElasticSearch, Logstash et Kibana) est configurable facilement et est adaptée au monitoring et au traitement de grands volumes de données. Son extension X-pack basée sur le machine learning apporte une analyse plus poussée de détection d’anomalies.
*Article co-écrit avec Abdellatif T.