Académique Documents
Professionnel Documents
Culture Documents
(Groupe INSIM)
Thème
Exploitation d’une solution Big Data pour
l’exploration des fichiers d’événements
Cas pratique
ELSE TECHNOLOGIES
Session 2017/2018
Table des matières
3. Les conteneurs............................................................................................................................. 6
4. Docker . ............................................................................................................................7
5. Concepts fondamentaux de docker… .......................................................................... 8
5.1 Docker engine ......................................................................................................................... 9
5.2 Docker Client............................................................................................................................9
5.3 Docker Daemon...................................................................................................................... 9
5.4 DockerFile .............................................................................................................................. 10
5.5 Image Docker......................................................................................................................... 12
5.6 Union File Systems « UFS »………………………………………………………………12
5.7 Les volumes .......................................................................................................................... 13
5.8 Les conteneurs ....................................................................................................... 13
6. Conclusion .................................................................................................................................. 14
2. Elasticsearch …………………………………………………………………………………. 16
Conclusion Générale.......................................................................................................................... 49
Bibliographie ………………………………………………………………………………………… 51
Liste des figures
Chapitre I
Figure I.1 : Concept Fondamentale de la virtualisation Desktop ................................ 5
Chapitre II
Figure II.1 : fichier de configuration de Filebeat Appelé fichier « YAML » ............. 22
Chapitre III
Chapitre I
OS Operationg System
PC Personal Computer
VM Virtual Machine
IP Internet Protocol
Chapitre II
De nos jours, les millions d’accès en ligne et de transactions par jour génèrent
des quantités phénoménales de données qui constituent une source importante
d’informations précieuses et donc nécessite une infrastructure adéquate pour analyser
tout ce flux de données, néanmoins atteindre ces objectifs en temps idéal tout en aillant
assez de ressources pour supporter tous ces processus de traitement et d’analyse
requière des infrastructures réseaux de taille.
Dans mon projet de fin d’étude j’aborderai donc les technologies de virtualisation,
des machines virtuelles au applications virtuelles aussi appelé les conteneurs, et
j’aborderai la pointe des technologies d’analyse de données et de la journalisation
d’applications et de processus.
Ces solutions seront mises en œuvre, déployée et testées afin d’accomplir ces
objectifs suivants :
2
CHAPITRE I :
LES CONTENEURS SOUS
DOCKER
1. Introduction
Dans le domaine avancé des sciences des technologies, nous entendons souvent
parler des conteneurs, ce qui nous pousse à se poser la question qu’est-ce qu’un
conteneur et à quoi sert-il ?
Nous allons donc dans ce chapitre commencer par présenter les machines
virtuelles pour ensuite entrer dans le sujet du chapitre qui est les conteneurs et expliquer
en qui différent-ils des machines virtuelles.
Enfin, nous terminerons ce chapitre par expliquer ce qu’est Docker, ses concepts
fondamentaux, etc.
4
2. Les machines virtuelles « VM »
Un hyperviseur est une partie d’un logiciel ou matériel sur lequel les machines
virtuelles s’exécutent, l’hyperviseur lui-même s’exécute sur une machine physique qui est
le « Host », il procure aux VMs les ressources nécessaires (RAM, CPU …) et les repartis
selon les besoins des « Guest ».
5
3. Les conteneurs
Les conteneurs ressemblent aux VMs, ils ont un espace privé pour le traitement, ils leurs
propre interface réseaux et adresse IP, monter des systèmes de fichiers, etc… juste que
les conteneurs partagent le même kernel avec les autres conteneurs qui est celui du
HOST. [2]
Le schéma ci-dessous nous montre que les conteneurs prennent que l’espace
utilisateur et non pas le kernel comme font les VMs, chaque conteneur a son propre
espace utilisateur isolé, ce qui va permettre à plusieurs conteneurs de s’exécuter en
même temps, aussi la couche OS est partagée entre les conteneurs la seule partie qui
est créée de zéro est la couche BIN, ce qui rend les conteneurs beaucoup plus
performants et moins gourmands.
6
4. Docker
• Facilité d’utilisation : Docker est conçu pour être facile à utiliser pour
n’importe qui : développeurs, administrateurs, architectes… Il permet à
l’utilisateur de construire et concevoir son propre conteneur sur son PC
personnel et l’héberger chez un serveur de Cloud privé, bare-metal sous le
slogan « Build once, Run anywhere »
7
5. Concepts fondamentaux de docker
8
5.1 Docker engine
C’est la partie où Docker s’exécute, c’est un petit runtime et outil qui gère les
conteneurs, images, builds. Et il se compose de:
Le client Docker est l’objet avec lequel vous communiquez en tant qu’utilisateur
final de Docker. Pensez-y comme l'interface utilisateur de Docker. Par exemple :
1.
2. docker build exemple/image
Nous sommes donc en train de communiquer avec le Daemon via le Docker Client .
C’est celui qui exécute les commandes envoyées par l’utilisateur via le Docker
Client, comme exécution, distribution des conteneurs, le Daemon est exécuté sur le host
mais en tant qu’utilisateur on communique jamais directement avec le daemon, mais le
Docker Client peut être installé et exécuté sur le host ou sur une machine distante.
9
5.4 DockerFile
10
Figure 1.5 : Spécimen du fichier DOCKER FILE (suite)
11
5.5 Image Docker
C’est des Templates en lecture seule qu’on construit à partir d’une série
d’instructions /commandes écrites dans le DockerFile. L’image définit l’application, ses
dépendances et quel processus à exécuter et quand l’exécuter.
Une image docker est faite à base du DockerFile. Chaque instruction dans le
Docker File ajoute une nouvelle « couche » à l’image, avec les couches représentant une
partie du système de fichier de l’image qui ajoute ou supprime la couche située en
dessous. Les couches sont la clé de la structure légère de Docker mais aussi sa
puissance. Docker utilise le système « UFS » (Union File Systems) pour accomplir toutes
ces tâches.
Les contenus des répertoires ayant le même chemin dans les branches
superposées est considéré comme un seul répertoire fusionné, ce qui va éviter de créer
des copies séparées pour chaque couche. Au lieu de cela ils peuvent tous être redirigés
vers la même ressource, et lorsque certaines couches doivent être modifiées, il crée une
copie et modifie une copie locale, en laissant l’original inchangé. C’est ainsi que les
systèmes de fichiers peuvent * apparaître * en écriture sans permettre réellement les
écritures. En d'autres termes, un système de « copie sur écriture ».
12
Les systèmes en couches offrent deux avantages principaux :
Comme nous en avons parlé avant, un conteneur emballe une application dans
une sorte de boite invisible avec tous les prérequis pour que cette application fonctionne
et ça inclus dépendances, librairies, Framework etc… Les conteneurs sont construits à
partir des images Docker, et vu que ces images sont de fichier en ‘’lecture-seule’’, Docker
ajoute un autre fichier système en ‘’lecture-écriture’’ sur le fichier de l’image afin de créer
le conteneur. En plus de créer le conteneur docker crée aussi une interface réseaux pour
que le conteneur communique avec le localhost, associe une adresse IP pour le
conteneur, et exécute le processus spécifié pour exécuter l’application lors de la définition
de l’image. Une fois que le conteneur est créé, on peut l’exécuter sur n’importe quel
environnement sans apporter des changements.
13
6. Conclusion
Dans ce chapitre, nous avons présenté et expliqué ce qu’est un conteneur, en quoi
diffère-il d’une VM, pour ensuite aborder Docker en détails.
Notre prochain chapitre portera donc sur ELK stack » (Elasticsearch Logstash Kibana ).
14
Chapitre II :
« ELK stack »
(Elasticsearch Logstash
Kibana)
1. Introduction
(Elasticsearch, Logstash et Kibana) appelé courramment « ELK Stack » sont trois
outils différents associés ensemble pour créer des solutions d’analytique, de surveillance,
logging, de recherche et de visualisation et sécurisation des environnements
informatiques, etc.
Nous allons dans ce chapitre aborder ces trois composants de façons détaillée en
commençant par Elasticsearch et ses concepts. Ensuite, Logstach et Kibana pour finir
par expliquer les achemineurs qui ont un rôle crucial pour « ELK Stack ».
2. Elasticsearch
Elasticsearch est un moteur d’analyses et de recherche open-source développé
en JAVA sous licence Apache 2.0. Il permet d’explorer et analyser de très grandes
quantités de données à une très une vitesse record par exemple :
Elasticsearch est caractérisé par son temps de réponse quasi réel c’est-à-dire qu’il
y’a une latence d’environ 1 seconde entre le moment où on indexe un document et le
moment où il devient consultable.
16
2.1 Concepts d’Elasticsearch
Les concepts d'Elasticsearch sont :
2.1.1 Node
Un Node est un serveur qui est une partie du cluster, il stock les données et
participe à l’indexation et la recherche avec le cluster. Un Node est identifié par un nom
par défaut appelé « UUID » (Universally Unique IDentifier) qui sera assigné au Node au
démarrage, mais on peut le définir manuellement afin de faciliter son identification au sein
du réseau.
2.1.2 Cluster
Un cluster est un ensemble de Nodes ou plus, qui stock toutes les données et
fournit les fonctionnalités d’indexation et de recherche à tous les Nodes, un cluster est
identifié par un nom unique qui à son tour joue un rôle majeur, il permet aux Nodes de
faire partie de ce cluster.
2.1.3 Index
• Type : Un type est utilisé comme une catégorie logique de l’index, afin de
permettre de stocker différents types de documents sur le même index, exemple :
un type pour les utilisateurs, un autre pour les articles postés.
17
• Document : Une unité basique d’information qui peut être indexée, le document
est écrit en « JSON » (JavaScript Object Notation).
• Les Shards & les Replicas : Un index peut potentiellement stocker une
grosse quantité de données qui peuvent dépasser les limites matérielles ce qui
par conséquent pas insuffisant et va être long à charger à partir d’un Node unique.
Pour remédier à ce problème, ElasticSearch offre la possibilité de subdiviser
l’index en parties appelées Shards. On définit les nombres de Shards selon le
besoin a la création de l’index, chaque Shard et est un index totalement fonctionnel
et indépendant qui peut être hébergé sur n’importe quel Node du cluster.
Le Sharding est utilisé pour deux raisons principals :
▪ Il permet de fractionner et redimensionner le volume des données.
▪ Il permet de paralléliser et distribuer les opérations sur les fragments
(Nodes), augmentant ainsi les performances et le débit.
Dans un réseau ou cloud où les pannes sont fréquentes et imprévisibles, il est très
utile et recommandé d’avoir un mécanisme de secours en cas où un shard ou
Node devient Hors ligne ou ne répond plus, pour cela, ElasticSearch permet de
faire une ou plusieurs copies de l’index appelées REPLICA SHARDS, ou
REPLICAS pour faire court. On fait recours a la réplication pour deux raisons
principales :
18
En conclusion, chaque index peut être divisé en plusieurs Shards, l’index peut
aussi être répliqué, chaque index va avoir son shard primaire (la version originale du
Shard d’où sont obtenus les répliques) et un replica Shard (copie du shard primaire).
3. Logstash
Logstash est un outil qui permet de traiter, collecter et transférer tout type
d’événements et journaux Logs comme : les requêtes HTTP, les formats Syslog, les
rapports de Parfeu et plus. Logstash est doté de certaines caractéristiques qui font de lui
un outil performant et puissant on cite :
• Il peut traiter tous les types de données de journalisation que ça soit Apache, Nginx
pour le WEB et LOG4J de JAVA pour les applications, Syslog et les données des
pares-feux.
• Unifie les divers flux de données à partir de files d’attente de messagerie telles
qu’Amazon SQS.
19
3.1 Rôles de Logstach
• Nagios
• Zabbix
• Ganglia
Monitoring • Graphite
• Datadog
• Cloudwatch
• Elasticsearch
Analyse
• SGBD tel que MangoDB
• HDFS
Archivage
20
IRC (Internet Relay Chat) « discussion relayée par Internet » : est un protocole de
communication textuel sur Internet.
HDFS (Hadoop Distributed File System) : est un système de fichier distribué permettant
de stocker et de récupérer des fichiers en un temps record.
4. Kibana
Kibana est une plateforme de visualisation et d’analyse open source conçu pour
fonctionner avec Elasticsearch, elle est utilisée pour chercher, visualiser et interagir avec
les données stockées dans les index d’Elasticsearch le tout dans une variété de
graphiques, tableaux et de cartes. Grâce à son interface web, elle permet de créer et
partager rapidement des tableaux de bord dynamiques affichant les modifications
apportées au requêtes Elasticsearch en temps réel.
5. Les achemineurs
Les achemineurs (shippers en anglais) sont des agents d’acheminement de
données logs ou évènements des serveurs et des hôtes vers Elasticsearch et Logstash
afin de les visualiser, traiter sur Kibana parmi les achemineurs d’Elasticsearch on cite :
5.1 Filebeat
Filebeat est un shipper permettant de transférer et centraliser les données logs, il
est installé en tant qu’agent sur les serveurs ou hôtes, il supervise les fichiers journaux
d’un emplacement spécifique, collecte les évènements et les transmet à Elasticsearch ou
Logstash pour l’indexation.
20
5.1.1 Concept de fonctionnement de Filebeat
Filebeat est composé de deux éléments essentiels les entrés (inputs en anglais)
et les Harvesters, ces derniers fonctionnent ensembles pour envoyer les données
d’évènement a la sortie (output en anglais) spécifiée.
21
Figure II.2 : Structure de Filebeat
5.2 Metricbeat
Metricbeat est un agent achemineur qui permet collecter périodiquement
les métriques à partir des serveurs sur lesquels il est installé, une fois les
métriques et les statiques collectées il les envoie vers la sortie spécifiée comme
Elasticsearch ou Logstash. Metricbeat aide à superviser les systèmes et les
services qui s’exécutent sur le serveur comme : Apache, Nginx, HAProxy
MySQL et d’autres.
22
5.3 Functionbeat
Functionbeat est un achemineur qu’on déploie sur les architectures sans serveur afin
de collecter les évènements et logs générés par les services du Cloud et les acheminer
vers Elasticsearch.
5.4 Heartbeat
Heartbeat est un daemon installé sur les serveurs distants pour vérifier
périodiquement l’état des services s’ils sont disponibles, contrairement à Metricbeat qui ne
vérifie que l’état d’allumage des serveurs, Heartbeat peut également vérifier leurs
accessibilités. Heartbeat est utile pour vérifier si les serveurs sont accessibles de l’extérieur
de l’entreprise afin de voir par exemple si vos données sont bien protégées, ou si votre
service d’hébergement web remplie bien les termes du contrat conclus. Heartbeat
supervise les hôtes via les protocoles suivants :
• HTTP : pour vérifier si le service renvoi une repose spécifique comme un code
d’erreur par exemple.
23
6. Conclusion
Ce premier chapitre nous a permis d’abord de définir ce qu’est « ELK Stack »,
ensuite évoquer en détails chaqu’un des trois composants (Elasticsearch, Logstach et
Kibana) et enfin les achemineurs. Le prochain chapitre portera sur la partie pratique de
notre projet.
24
Chapitre III :
CAS PRATIQUE
25
1. Présentation de la solution « ELK Stack » et ses
prérequis
« ELK Stack » : On appelle ELK les outils ELASTICSEARCH, LOGSTASH et KIBANA
réunis sur un seul conteneur ou image docker afin d’avoir un serveur Logs et évènement
complètement centralisé, aussi connu ELK STACK pour désigner les 3 outils réunis, ces
outils seront installés sur Docker en tant que conteneur ce qui nécessitera quelques
prérequis qui sont :
#sysctl -w vm.max_map_count=262144
27
Remarque : cette image ouvre aussi le port 9300, mais dans notre cas il ne sera pas
nécessaire vu qu’il est utilisé pour des but développement comme le Elasticsearch’s
java client API.
Dans le schéma suivant nous verrons comment le tout sera mis en place :
28
2. Installation et déploiement
Dans cette partie de ce chapitre nous allons effectuer les tâches suivantes :
• Préparation de l’infrastructure
• Installation de Docker sur une machine CentOS 7.
• Installation des outils ELK sur Docker.
• Installation d’un serveur web Nginx sous Fedora Linux.
• Préparation d’une machine CentOS 7 (installation minimale).
• Déploiement de la solution avec des tests de validation.
29
Figure III.1 : Schéma de l'infrastructure
30
Tableau 2 : Adressage réseau de l’infrastructure
Installation de docker :
30
Confirmation de l’installation avec succès :
31
Nous vérifions que Docker est bel et bien démarré et fonctionnel en exécutant la
commande suivante :
Une fois encore nous allons exécuter sur le terminal en tant que root la commande
suivante :
32
Une fois l’image importée depuis les registres de docker nous augmentons la taille du
mmap counts vers la valeur conseillée qui est de : 262144 en exécutant la commande :
#sysctl -w vm.max_map_count=262144
33
Nous exécutons la commande qui va nous permettre d’exécuter le conteneur de ELK
stack :
34
La figure suivante montre les événements et logs du serveur ELK :
Pour vérifier les conteneurs qui sont en cours d’exécution nous tapons la commande
suivante :
#docker ps -all
35
Il est possible dans certains cas où ne nous sommes pas obligés de démarrer
tous les outils ELK même s’ils appartiennent au même conteneur pour cela on exécute
la commande suivante :
Sachons que :
Puis nous complètons la configuration en apportant des modifications sur le fichier script
de Nginx qui se trouve dans le répertoire /etc/nginx/nginx.conf :
#nano /etc/nginx/nginx.conf
Voici un aperçu du script auquel nous avons apporté la modification dans la ligne 41 :
36
Nous exécutons les commandes de démarrage du processus Nginx et la commande de
création de service de démarrage automatique :
37
Nous vérifions si le Protocol HTTP n’est pas bloqué par le pare-feu Firewalld en exécutant
la commande :
#firewall-cmd –list-services
On voit bien que http ne fait pas partie des services autorisés pour cela on exécute les
commandes suivantes afin de de résoudre le problème :
#firewall-cmd -reload
38
Nous vérifions l’accès sur le navigateur en tapant l’adresse IP du serveur à partir d’un PC
distant :
Le serveur web a démarré avec succès le service HTTP a bien été autorisé sur le pare-
feu.
39
Filebeat :
# curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.0.0-
x86_64.rpm
# rpm -vi filebeat-7.0.0-x86_64.rpm
40
Une fois les modifications apportées on active les modules nécessaires dans notre cas
c’est Nginx :
#filebeat setup
41
Metricbeat :
#curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-
7.0.0-x86_64.rpm
#rpm -vi metricbeat-7.0.0-x86_64.rpm
42
Une fois les modifications apportées nous activons les modules nécessaires dans notre
cas c’est Nginx :
#metricbeat setup
43
Conclusion :
Tous les services et les achemineurs sont démarrés et sans aucune erreur.
#ab http://192.168.0.100:80/
44
45
Pour simuler une activité nous devons envoyer assez de requêtes pour que ça soit
capturé par le serveur ELK, pour cela on exécute la commande suivante :
Sachons que
3. Tests de validation
En premier lieu nous devons vérifier si le pare-feu ne bloque pas les services et
les ports nécessaires pour notre test soit concluant, en exécutant :
Le serveur web :
Nous avons besoin que le Protocol http soit autorisé, si le Protocole http fait partie de la
liste des services, ça veut dire qu’il est autorisé.
46
Le serveur ELK :
On a besoin que les ports 9200, 9300, 5044 et 5601 soient ouverts, et le protocole http
soit autorisé :
Vérifions ensuite que la plateforme kibana est accessible à partir d’un PC distant :
40
Vérifions aussi l’état d’Elasticsearch en tapant l’adresse :
#curl http://192.168.0.29:9200/_cat/health
41
Vérifions qu’Elasticsearch reçoit les requêtes des achemineurs en tapant :
#curl http://192.168.0.29:9200/_cat/indices
Nous passons donc à la phase tests, où nous allons simuler le trafic web, et visualiser
les résultats sur Kibana.
Simulation du trafic :
Nous exécutons la commande sur CentOS 7 client qui va envoyer les requêtes http
Rappelons que cette commande nous permet d’envoyer 2000 requêtes en série 1000.
42
43
Visualisation du journal d’événements des requêtes H envoyées vers le serveur Nginx
sur Kibana :
44
Visualisation des index :
45
Visualisation du journal d’événement système (Syslog) du server Fedora-web :
Visualisation de la liste hosts et leurs états sur Kibana (dans notre cas nous avons
qu’un seul host qui est Fedora-web) :
46
47
Toutes les requêtes envoyées ont été interceptées et mises dans les LOGs et ont pu
être visualisées sur Kibana.
48
CONCLUSION GENERALE
49
Conclusion générale
50
Bibliographie
1. Virtualisation :
https://www.networkworld.com/article/3285906/whats-the-future-of-server-
virtualization.html
2. https://www.redhat.com/fr/topics/containers/whats-a-linux-
container
3. Elasticsearch :
https://www.elastic.co/guide/en/elasticsearch/reference/7.0
4. Conteneur SEBP/ELK :
https://elk-docker.readthedocs.io/#prerequisites
51