TraceViz : Visualisation traceroute sortie avec graphivz

Original: http://www.hokstad.com/traceviz-visualizing-traceroute-output-with-graphivz

À Edgeio, nous avons eu une configuration réseau assez complexe, et à un moment donné que j’ai piraté rapidement ensemble un script Ruby pour fusionner les chemins d’accès générés par plusieurs traceroute heurte ensemble dirigées graphiques, montrant le routage de l’ordinateur hôte sélectionné quelques dans notre environnement à tous nos autres hôtes. J’ai généré pour Graphviz dot-fichiers d’elle.
C’était une façon utile de chercher des incohérences bizarres de routage, en particulier entre nos deux succursales.
Malheureusement, lorsque Edgeio fermé je pense que le script a été perdu, et en tout cas si ce n’est pas je ne serais pas en mesure d’obtenir la permission de le libérer sans tracas plus qu’il me faudrait pour la recréer à partir de zéro. Alors recréer ce à partir de zéro n’est exactement ce que j’ai fait.
Voici un exemple d’un traceroute de www.hokstad.com à www.gmail.com, docs.google.com et www.google.com (réduite) :

(Gradients et ombres avec la permission de ma transformation XSL pour embellir la sortie graphviz)
Il y a quelques bémols : J’ai juste supprimer les sondes ayant échouées, et je ne cherche pas à concilier les noms des points de terminaison (que j’ai préféré à inclure pour la lisibilité) avec les adresses IP de la trace, donc premier/dernier nœud gris avant les nœuds nommés/bleu peut être redondant.
Ce script par défaut exécute traceroute 3 fois pour chaque cible, et c’est la raison pour laquelle il existe des chemins plus possibles que les points de terminaison, et il illustre le basculement et/ou d’équilibrage pour la plupart, mais peut également être affectée par les fluctuations de routage dynamique. Il est généralement assez stable, et en fait à Edgeio, j’ai trouvé plusieurs problèmes de réseau de re-exécuter le script lorsque quelque chose est en hausse et en regardant comment le routage avait changé. 3 pistes semblaient suffisantes pour mon usage, mais pour les grands réseaux, ajoutant plus peut donner une meilleure image de l’acheminement.
Le script Ruby
Vous pouvez trouver le script complet ici, mais voici les tripes :
Tout d’abord, j’ai défini une méthode pratique pour exécuter traceroute et capturer la sortie. Ceci est destiné à un système d’exploitation POSIX (Linux / Unix / BSD), mais nécessite principalement un travail traceroute la sortie est un nombre de lignes commençant par un nombre de tronçons, puis l’adresse ip. TRACEROUTE doit être défini sur une commande traceroute valide.


La classe TraceViz fait le gruntwork. @edges contient les arêtes du graphe, en d’autres termes, quelles paires d’adresses ip représentent un saut de plus dans le réseau. @nodes contient un ensemble d’adresses ip trouvé. @targets contient les noms d’hôte du début et les critères d’évaluation il est utilisé uniquement pour les styliser différemment :


La méthode #trace exécute la détermination d’itinéraire et impose un délai d’attente :



#process_trace gère l’analyse de la trace, en divisant la sortie en lignes, extraire les adresses IP et puis ajoutant chacun d’eux à @nodes, chaque paire de @edges. Je n’aime pas si nous avons vus avant, depuis que j’utilise du jeu donc les nœuds/bords (identiques) précédentes effacera simplement les mêmes valeurs :



Enfin, #to_dot génère un graphe graphviz compatible :


Exécutez et génération de l’image
Tout d’abord exécuter le script pour générer les fichiers de point et puis de générer un fichier SVG d’elle :



Vous pouvez également traiter le script avec ma transformation XSL pour la rendre plus jolie (en ajoutant les gradients par dessus etc.) j’utilise xsltproc de libxslt :

Ensuite, j’ai utilisé « rsvg » de librsvg2 pour la transformer en une image PNG :


Bien sûr, ces étapes sont assez facilement enveloppés dans un script.

Comments are closed.