Skydive est un analyseur de topologie réseau et de protocoles open source en temps réel. Il vise à fournir un moyen complet de comprendre ce qui se passe dans l'infrastructure réseau.
Pour susciter votre intérêt, voici quelques captures d'écran concernant Skydive. Juste en dessous, il y aura un article d'introduction à Skydive.


Article «» sur Habr.
Skydive affiche la topologie du réseau en obtenant des événements réseau des agents Skydive. Vous êtes-vous déjà demandé comment ajouter ou afficher sur un diagramme de topologie des composants réseau qui se trouvent en dehors du réseau des agents Skydive ou des objets non réseau, tels que TOR, des solutions de stockage de données, etc. ? Ne vous inquiétez plus, grâce à l'API Node rule.
À partir de la version 0.20, Skydive fournit une API Node rule, qui peut être utilisée pour créer de nouveaux nœuds et arêtes et pour mettre à jour les métadonnées des nœuds existants. L'API Node rule est divisée en deux interfaces : l'API de règle de nœud et l'API de règle d'arête. L'API de la règle de nœud est utilisée pour créer un nouveau nœud et mettre à jour les métadonnées d'un nœud existant. L'API de la règle d'arête est utilisée pour créer une liaison entre deux nœuds, c'est-à-dire relier deux nœuds.
Dans ce blog, nous allons voir deux cas d'utilisation, dont l'un est un composant réseau qui ne fait pas partie du réseau skydive. Le second cas est un composant non réseau. Avant cela, nous examinerons quelques manières fondamentales d'utiliser l'API des règles de topologie.
Création d'un nœud Skydive
Pour créer un nœud, vous devez spécifier un nom de nœud unique et un type de nœud valide. Vous pouvez également fournir quelques paramètres supplémentaires.
skydive client node-rule create --action="create" --node-name="node1" --node-type="fabric" --name="node rule1"
{
"UUID": "ea21c30f-cfaa-4f2d-693d-95159acb71ed",
"Name": "node rule1",
"Description": "",
"Metadata": {
"Name": "node1",
"Type": "fabric"
},
"Action": "create",
"Query": ""
}Mise à jour des métadatés des nœuds Skydive
Pour mettre à jour les métadonnées d'un nœud existant, vous devez fournir une requête en langage gremlin pour sélectionner les nœuds dont vous souhaitez mettre à jour les métadonnées. En fonction de votre requête, vous pouvez mettre à jour les métadonnées d'un ou plusieurs nœuds au moyen d'une règle de nœud.
skydive client node-rule create --action="update" --name="update rule" --query="G.V().Has('Name', 'node1')" --metadata="key1=val1, key2=val2"
{
"UUID": "3e6c0e15-a863-4583-6345-715053ac47ce",
"Name": "update rule",
"Description": "",
"Metadata": {
"key1": "val1",
"key2": "val2"
},
"Action": "update",
"Query": "G.V().Has('Name', 'node1')"
}Création d'un arête Skydive
Pour créer une arête, vous devez spécifier les nœuds source et destination ainsi que le type de relation de l'arête. Pour la création d'un nœud enfant, la valeur du type de relation doit être ownership et pour une relation de type layer2, le type de relation doit être layer2. Vous pouvez créer plus d'une relation entre deux nœuds, mais le type de relation doit être différent.
skydive client edge-rule create --name="edge" --src="G.v().has('TID', '2f6f9b99-82ef-5507-76b6-cbab28bda9cb')" --dst="G.V().Has('TID', 'd6ec6e2f-362e-51e5-4bb5-6ade37c2ca5c')" --relationtype="both"
{
"UUID": "50fec124-c6d0-40c7-42a3-2ed8d5fbd410",
"Name": "edge",
"Description": "",
"Src": "G.v().has('TID', '2f6f9b99-82ef-5507-76b6-cbab28bda9cb')",
"Dst": "G.V().Has('TID', 'd6ec6e2f-362e-51e5-4bb5-6ade37c2ca5c')",
"Metadata": {
"RelationType": "both"
}
}Première utilisation
Dans ce cas, nous allons voir comment afficher un appareil non réseau dans la topologie Skydive. Imaginons que nous avons un stockage de données qui doit être représenté dans le diagramme topologique Skydive avec certaines métadonnées utiles.
Il suffit de créer une règle de nœud pour ajouter l'appareil à la topologie. Nous pouvons ajouter les métadonnées de l'appareil comme partie de la commande de création ou créer ultérieurement une ou plusieurs commandes de mise à jour de la règle de nœud.
Exécutez la commande ci-dessous de la règle de nœud pour ajouter le périphérique de stockage au schéma de topologie.
skydive client node-rule create --action="create" --node-name="sda" --node-type="persistentvolume" --metadata="DEVNAME=\/dev\/sda,DEVTYPE=disk,ID.MODEL=SD_MMC, ID.MODEL ID=0316, ID.PATH TAG=pci-0000_00_14_0-usb-0_3_1_0-scsi-0_0_0_0, ID.SERIAL SHORT=20120501030900000, ID.VENDOR=Generic-, ID.VENDOR ID=0bda, MAJOR=8, MINOR=0, SUBSYSTEM=block, USEC_INITIALIZED=104393719727"Exécutez la commande ci-dessous de la règle d'arête pour lier le nœud créé au nœud hôte.
skydive client edge-rule create --src="G.V().Has('Name', 'node1')" --dst="G.V().Has('Name', 'sda')" --relationtype="ownership"Après les commandes ci-dessus, vous pouvez maintenant voir l'appareil visible dans le schéma topologique Skydive avec les métadonnées spécifiées, comme montré dans l'image ci-dessous.

Deuxième utilisation
Dans ce cas, nous verrons comment ajouter un appareil réseau qui ne fait pas partie du réseau skydive. Prenons cet exemple. Nous avons deux agents skydive fonctionnant sur deux hôtes différents, pour connecter ces deux hôtes, nous avons besoin d'un switch TOR. Même si nous pouvons y parvenir en définissant les structures de nœuds et les liens dans le fichier de configuration, voyons comment nous pouvons faire la même chose en utilisant l'API des règles de topologie.
Sans le switch TOR, deux agents apparaîtront comme deux nœuds distincts sans aucun lien, comme indiqué dans l'image ci-dessous.

Maintenant, exécutez les commandes ci-dessous pour créer des règles de nœud, afin de créer le switch TOR et les ports.
skydive client node-rule create --node-name="TOR" --node-type="fabric" --action="create"
skydive client node-rule create --node-name="port1" --node-type="port" --action="create"
skydive client node-rule create --node-name="port2" --node-type="port" --action="create"Comme vous pouvez le voir, le switch TOR et les ports ont été créés et ajoutés à la topologie skydive, et maintenant la topologie ressemblera à ceci, comme montré dans l'image ci-dessous.

Exécutez maintenant les commandes ci-dessous pour créer un lien entre le switch TOR, le port 1 et l'interface publique de l'hôte 1.
skydive client edge-rule create --src="G.V().Has('Name', 'TOR')" --dst="G.V().Has('Name', 'port1')" --relationtype="ownership"
skydive client edge-rule create --src="G.V().Has('Name', 'TOR')" --dst="G.V().Has('Name', 'port1')" --relationtype="layer2"
skydive client edge-rule create --src="G.V().Has('TID', '372c254d-bac9-50c2-4ca9-86dcc6ce8a57')" --dst="G.V().Has('Name', 'port1')" --relationtype="layer2"Exécutez les commandes suivantes pour créer un lien entre le switch TOR, le port 2 et l'interface publique de l'hôte 2.
skydive client edge-rule create --src="G.V().Has('Name', 'TOR')" --dst="G.V().Has('Name', 'port2')" --relationtype="layer2"
skydive client edge-rule create --src="G.V().Has('Name', 'TOR')" --dst="G.V().Has('Name', 'port2')" --relationtype="ownership"
skydive client edge-rule create --src="G.V().Has('TID', '50037073-7862-5234-4996-e58cc067c69c')" --dst="G.V().Has('Name', 'port2')" --relationtype="layer2"Les liens ownership et layer2 entre le switch TOR et le port sont maintenant créés, ainsi que les liens layer2 entre les agents et les ports. Maintenant, la topologie finale ressemblera à ceci, comme montré dans l'image ci-dessous.

Les deux hôtes / agents sont maintenant correctement connectés, et vous pouvez vérifier la connexion ou établir une capture du chemin le plus court entre les deux hôtes.
P.S. Lien vers
Nous recherchons des personnes capables d'écrire des posts sur d'autres fonctionnalités de Skydive.
sur skydive.network.
Source : habr.com
