Menu

Du dev et du monitoring : YaPLog

2 août 2016 - Développement, Tests, Tutoriels
Du dev et du monitoring : YaPLog

Bonjour à tous !

Aujourd’hui on va parler boulot, mais n’ayez pas peur, on parle du mien. Petite balade réseau et dev.

Ce que j’aime le plus avec mon stage courant, c’est les défis. J’ai 6 semaines pour réaliser un prototype et sa documentation, et je peux vous dire que c’est serré. À près de trois quarts du projet, faisons un point sur son avancement, ce qu’il reste à faire, les technos, etc.

I — Le cahier des charges

Le monitoring réseau c’est tout sauf un sujet original. Hyper intéressant, sa mise en pratique évolue au fur et à mesure que les outils, les pratiques, et les protocoles évoluent.

Vous vous demandez sûrement pourquoi je parle de développement dans ce cas. Il y a certes de nombreux programmes permettant de faire pas mal de choses. Voici pourquoi.

Que veut-on savoir ? La question initiale est « quand est-ce que ma ligne est saturée » ce qui est déjà visible sur les logs du FAI (Nagios-Cacti, exporté en petites images JPG) mais n’est pas suffisant pour plusieurs raisons :

On veut donc savoir quand est-ce que la ligne est saturée. C’est-à-dire, a priori, quand est-ce que la ligne atteint sont débit maximal.

Le but suivant est de déterminer si une saturation est gênante. Cela comprend plusieurs facteurs :

Une fois qu’on a déterminé si une saturation est gênante, on veut savoir qui elle gêne et pourquoi, afin de voir si on peut faire quelque chose pour améliorer l’utilisation des ressources.

II — Implémentation

Comme je sens que vous êtes des warriors,

cyclops_warrior_concept_by_masterfulmind-d4vi7mx

Un warrior, probablement.

je vous propose de rentrer dans le vif du sujet avec les détails techniques.

1. Unzip

Je pars avec une archive zip, gentiment déposée par mon FAI, dans laquelle il y a des logs au format nfcapd, défini par Cisco.

2. Nfdump

Nfcapd est un fichier binaire, pas très comestible pour l’œil humain. J’ai donc trouvé nfdump, un programme qui permet de transformer les logs binaires en texte ASCII. ça ressemble à peu près à ça :

3. csvify

C’est mieux, mais c’est toujours pas optimal. Il y a notamment trois problèmes :

J’ai donc créé un préparser en C (il s’agit en fait d’une spécification flex, puis flex génère le code C correspondant, à l’aide d’automates) (il y en a deux, l’un d’entre eux affiche des couleurs, utile pour visualiser, interdit pour l’utilisation en production, parce qu’il génère bien trop de caractères d’échappement).

En moyenne, mon préparser sort un fichier au format CSV qui fait 70% de la taille du fichier d’entrée, et est beaucoup plus normalisé. Il ne supprime cependant pas beaucoup d’informations (la flèche seulement).

4. Parse/Somme et plus si affinités

Maintenant qu’on s’est facilité la tâche, il ne reste plus qu’à analyser le tout.

C’est le but du programme C++ suivant, qui va itérer sur les entrées du CSV qu’on a produit, et ranger les paquets aux bons endroits.

Enfin, en théorie. Parce qu’on se retrouve devant quelques petits problèmes :

C++ n-multithread

Architecture du programme C++

Le thread lecteur en haut lit depuis le disque à gauche, range les éléments dans la std::queue fileQ protégée par un mutex (fileQmutex, je suis d’une originalité à toute épreuve), tandis que les n threads workers vont travailler à générer la donnée, puis vont passer leur résultat à la liste de résultats resQD. Finalement le thread écrivain va réunir la liste de résultats, et l’écrire sur disque (à droite).

Comme vous le voyez, beaucoup de choses ont été faites, beaucoup de choix, et j’en passe de très nombreux (j’en mettrai en PS), et il reste beaucoup à accomplir, notamment :

5. Des graphs. For free.

Une fois que l’on a écrit le CSV, il ne reste qu’à faire le graph. le programme gnuplot peut faire ça très bien.

6. Un chef d’orchestre

Tout cela est opéré depuis un script bash.

Voilà, j’espère que ça vous a plu, si ça vous amuse, le projet est libre, disponible ici. Comme d’habitude n’hésitez pas à commenter et à bientôt !

 

Motius

PS : j’ai appris plein de choses, mais qui sont de l’ordre du détail pour ce projet, alors je vais en lister quelques unes ici :

Laisser un commentaire