Vous êtes sur la page 1sur 19

TP services réseaux

Load Balancing HAProxy et Docker

Pour ce TP, vu que j’utilise la même machine que celui du tp précédent, les questions 1 à 2.9 sont déjà
traitées. Je passerai donc directement à létape 3.

1) Installer une machine virtuelle Debian minimale avec 4go de ram et avec connectivité internet etun
accès SSH et web depuis la machine hôte. Fait dans le tp précédent.

2) Installer Docker dans cette machine Fait dans le tp précédent.

2.1)) Updater la machine virtuelle : apt-get update Fait dans le tp précédent.

2.2) Installer les dépendances : apt-get install apt-transport-https ca-certificates curl


gnupg2 software-properties-common git -y

2.3) curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add 2.4)


add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/debian \
$(lsb_release -cs) \ stable"

Fait dans le tp précédent.

2.5) Mise à jour du cache des dépôts : apt-get update

2.6) Installer docker et containerd : apt-get install docker-ce docker-ce-cli containerd.io

2.7) Vérifier l’installation de docker : docker run hello-world

2.8) Installer docker-compose : curl -L


"https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s)-$ (uname -
m)" -o /usr/local/bin/docker-compose

2.9) Mettre les bons droits à l’exécutable : chmod +x /usr/local/bin/docker-compose

2.10) Faire un lien symbolique dans le PATH pour pouvoir exécuter le binaire : ln -s
/usr/local/bin/docker-compose /usr/bin/docker-compose

2.11) Vérifer l’installation de docker-compose : docker-compose –version

Fait dans le tp précédent.

3) Installation de l’infrastructure

3.1) Clonage du dépôt suivant : https://github.com/JCdrd/PA8-Docker

#git clone https://github.com/JCdrd/PA8-Docker


3.2) Lecture du fichier de configuration docker-compose : docker-compose config docker-config.yml

3.3) Lancement de l’infrastructure : docker-compose up


Elasticsearch est une base de données NoSQL orientée colonnes (un mot = une colonne de documents avec
pour valeur le poids du mot dans chacun des documents) dont la particularité est de pouvoir indexer des
documents orientés textes. On pourrait le comparer à un moteur de recherche, mais qu’on pourrait
paramétrer pour qu’il colle exactement à nos besoins de recherche. En d’autres termes, c’est un moteur de
recherche capable de stocker une grande quantité de documents et que l’on peut interroger en temps réel. il
s’appuie sur Logstash, un logiciel de gestion de logs et Kibana, une plateforme d’exploration et de
visualisation des données, pour effectuer des analyses sur les données qu’Elasticsearch stocke. Elastic
propose la solution Logstash en tant qu’ETL (Extract Transform Load). Ce dernier permet de réaliser des
transformations de données puissantes, c’est-à-dire qu’il permet d’extraire des données brutes depuis une
base de données, pour ensuite les restructurer, et enfin les charger dans une base de données.

Le principe se déroule comme suit :


Le logstah collecte (Extract) les infos (les logs) que chaque filebeat aura récuperer sur les serveurs
applicatifs (serveur webs), il analyse ces journaux, les filtrent, les mets en forme (Transform) et les injecte
(Load) (ETL) dans le stack ELK c’est-à-dire Elasticsearch. Elastacsearch, après avoir indexé ces données
va les mettre à la disposition de Kibana pour les visualiser en temps réel.
3.4) Vérification de la la liste des images docker présentent sur la VM : docker images
Nous pouvons donc voir la liste des images avec la date de création, la taille, la version et l’Id de chaque
image

3.5) Vérification de la liste des conteneurs qui fonctionnent : docker ps

Il affiche la liste des conteneurs qui fonctionnent et leur date de création. Nous avons entre autres le
logstash, kibana, elasticsearch, filebeat, httpd etc.

3.6) Vérifier la liste des réseaux internes docker : docker network ls

Il affiche les 5 réseaux internes docker dont bridge, haproxy_public_net et bridge

3.7) Vérifier la liste des volumes : docker volume ls

Nous voyons donc que notre volume existe sous le pa8-docker_elasticsearch

Le conteneur elasticsearch possède du stockage persistent. Son volume restera sur disque même si le
conteneur est éteint.

4) Utilisation de l’infrastructure

Les différents services lancés dans des conteneurs écoutent sur les ports de la VM.
Ainsi, les serveur web sont accessibles avec l’ip de la VM sur les ports 80, 81 et 82 en TCP.
L’application Elasticsearch est accessible sur le port 5601 avec le login « elastic » et le mot de passe «
changeme »

4.1) Prise en main de kibana :


Commençons par faire des quelques requêtes sur les serveur web depuis un navigateur : 10.0.2.16:80 puis
10.0.2.16:81 et 10.0.2.16:82

Nous pouvons constater que notre server Apache est accessible depuis l’un de ces 3 ports.

Remarque : le port d’accès par défaut étant le port 80 que nous le renseignons ou pas il écoutera sur ce
port et n’affichera pas le numéro 80 du port.

4.2) Connection à l’aide d’un navigateur web à l’application Kibana : dans la barre de recherche
renseignons 10.0.2.16:5601 ou 127.0.0.1:5601 si nous lançons le navigateur sur la même machine
virtuelle. Renseignons, le login « elastic » et le mot de passe «changeme »
Ensuite, dans l’onglet discover : , Il est demandé de créer un index pattern permettant à Kibana de
savoir où aller chercher les logs dans la BDD Elasticsearch.
Utilisons la regex suivante : filebeat*

Puis indiquons le champ « @timestamp » comme valeur par défaut du timestamp pour les recherches.
On peut voir les premiers logs arriver dans l’onglet Discover de Kibana.
4.3) Génération des logs de serveurs web :

A l’aide d’un navigateur, faisons plusieurs requêtes sur les serveurs web :

10.0.2.16:80, 10.0.2.16:81 et 10.0.2.16:82

4.4) Ensuite rafraîchissons l’onglet Discover de Kibana pour voir les logs des serveurs web.
Appliquons maintenant un filtre de recherche pour n’avoir que les logs des serveurs web :

Dans la liste des champs à gauche, cliquons sur « log.file.path » les diférentes sources de logs s’affichent.
Cliquons sur la loupe avec le « + » à droite des lignes suivantes :
/usr/local/apache2/logs/error_log
/usr/local/apache2/logs/access_log

Seuls les logs des serveurs web sont maintenant affichés.


4.5 ) De la même façon, appliquons un filtre permettant d’afficher que les logs qui viennent d’un serveur
web donné.
4.6) Etudier la liste des champs présents dans les documents de logs.

C’est une liste des métadonnées extraites qui permet d'effectuer une recherche rapide dans les logs. En
fonction d’une métadonnée sélectionner, la partie Synthèse des logs de Kibana se met alors
automatiquement à jour.

Dans les document logs on peut


retrouver les champs suivants :

On peut y voir

@timestamp : il donne la date et l’heure


du log consulté

_id : contient l’id du log

_index : donne le conteneur docker


sollicité.

host.name : contient le nom d’hôte


propre à chaque serveur web

host.hostname : le hostname du filebeat

log.file.path : donne le chemin d’accès


au fichier du log et précise s’il s’agit
d’un log d’accès, d’erreur ou autre

message : contient la chaine de


traitement envoyé vers la machine sur laquelle l’adresse ip du serveur a
été entré dans un navigateur pour accéder à celui-ci ( dans notre cas la
machine hôte).

On peut remarquer que le champ message n’est pas parsé comme il pourrait l’être.

5) Partie visualisation de données.


5.1) Création d’une visualisation permettant d’afficher la répartition des logs par serveurs :

Cliquer sur l’onglet « Visualize » de Kibana :

Cliquer sur « Create a new


visualization »

Puis choisir un graphique de type «


Pie »

5.2) Configuration de la visualisation :Choisir l’index « filebeat* » comme source de données.

Dans la partie droite de la page, cliquer sur « Slice Size » et choisir l’aggregation « Count »
Une agrégation est une valeur extraite d’une donnée et triée comme une unité de mesure ou une statistique,
dans notre cas c’est une des fonctionnalités de recherche avancée qui permet d’effectuer des calculs sur des
données indexées pour par exemple, faire une répartition par date, faire une répartition par volume etc.

Dans notre cas, l’agrégation count est une agrégation d’unité de mesures métriques qui va compter le
nombres de valeur extraite d’un document agréger à savoir ici les logs du serveur.

5.3) Configuration les buckets de données :

Un bucket de données est une agrégation renvoyant plusieurs résultats, lesquels sont répartis dans un
tableau de valeurs en fonction des critères définis dans la requête.

Cliquer sur dans le menu Buckets : Puis « split slices ».


Choisir l’aggregation « Terms » qui permettra d’agréger les données par champs de texte.

Dans le champ filtre mettre Field, choisir « host.hostname » puis en haut du volet, cliquer sur

La visualisation sera alors mise à jour


5.4) Aller dans le menu « Options » puis décocher le paramètre « Donut » et cocher le paramètre «
Show Labels ». Recliquer sur La visualisation sera alors à jour :

5.5) Enregistrer la visualisation et la nommer


5.6) Faire une visualisation permettant d’afficher la répartition par sources de logs et l’enregistrer.
5.7) Faire une visualisation permettant d’afficher le ratio de nombre de logs générés par le fichier de logs
d’erreur d’Apache2 et le fichier de logs d’access d’Apache2.
6) Création d’un Dashboard.

Un Dashboard permet de regrouper plusieurs visualisations afin d’avoir accès rapidement à toutes les
informations importantes.

6.1) Cliquer sur l’onglet Dashboard de Kibana


Cliquer sur « Create new dashboard »
Cliquer sur « add an existing » Choisir une des 3 visualisations faites précédemment. Puis ajouter les 3
autres visualisations.

Remarque : l’écran de mon ordinateur étant trop petit toutes les 3 visualisations n’ont pas pu sortir mais
nous pouvons bien constater que les 3 visualisations que j’ai enregistré à savoir ‘’tierno_visu’’, ‘’tiernop
visu2’’ et ‘’visu_ratio’’ sont bien celles que mon dashboard a visualisé.

Vous aimerez peut-être aussi