Skydive er en open source netværk- og protokoltopologianalysator i realtid. Den har til formål at give en omfattende måde at forstå, hvad der sker i netværksinfrastrukturen.
For at vække din interesse, vil jeg give et par skærmbilleder af Skydive. Længere nede vil der være et indlæg om introduktionen til Skydive.


Indlæg "" på Habr.
Skydive viser netværkstopologien ved at modtage netværkshændelser fra Skydive-agenter. Har du nogensinde undret dig over, hvordan man tilføjer eller viser netværkskomponenter, der er uden for agentnetværket Skydive, eller ikke-netværksobjekter som TOR, datalagring osv.? Du behøver ikke at bekymre dig mere om det, takket være Node rule API.
Siden version 0.20 giver Skydive Node rule API, som kan bruges til at oprette nye noder og kanter og til at opdatere metadata for eksisterende noder. Node rule API er opdelt i to API'er: node-regel API og kant-regel API. Node-regel API bruges til at oprette en ny node og opdatere metadata for en eksisterende node. Kant-regel API bruges til at skabe en grænse mellem to noder, dvs. forbinder to noder.
I denne blog vil vi se to anvendelsesscenarier, hvoraf den ene er en netværkskomponent, der ikke er en del af skydive-netværket. Det andet scenarie er en ikke-netværkskomponent. Før dette vil vi se på nogle grundlæggende anvendelsesmetoder for API'erne i topologi-regler.
Oprettelse af en Skydive-node
For at oprette en node skal du angive et unikt nodenavn og en gyldig nodetype. Du kan også give nogle yderligere parametre.
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": ""
}Opdatering af Metadata for Skydive-noder
For at opdatere metadata for en eksisterende node skal du angive en forespørgsel i gremlin-sprog for at vælge de noder, du vil opdatere metadata for. I overensstemmelse med din forespørgsel kan du opdatere metadata for en eller flere noder ved hjælp af en node-regel.
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')"
}Oprettelse af Skydive-kanten
For at oprette en kant skal du angive kilde- og destinationsnoderne samt typen af forbindelse. For at oprette en underordnet node skal forbindelsestypen være ownership, ligesom for at oprette en forbindelse af typen layer2 skal forbindelsestypen være layer2. Du kan oprette mere end én forbindelse mellem to noder, men forbindelsestypen skal være forskellig.
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"
}
}Første anvendelsestilfælde
I dette tilfælde vil vi vise, hvordan man præsenterer en ikke-netværksenhed i Skydive-topologien. Lad os se på, at vi har et datalager, som skal vises i den topologiske diagram i Skydive med nogle nyttige metadata.
Vi skal blot oprette en node-regel for at tilføje enheden til topologien. Vi kan tilføje metadata for enheden som en del af create-kommandoen eller senere oprette en eller flere update node rules.
Udfør nedenstående node-regelkommando for at tilføje det hukommelsesbaserede enhed til topologiskemaet.
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"Udfør den følgende kantregelkommando for at forbinde den oprettede node med værtens node.
skydive client edge-rule create --src="G.V().Has('Name', 'node1')" --dst="G.V().Has('Name', 'sda')" --relationtype="ownership"Efter de tidligere nævnte kommandoer kan du nu se enheden, der er synlig i Skydive-topologiskemaet med de angivne metadata, som vist på billedet nedenfor.

Andet anvendelsestilfælde
I dette tilfælde vil vi se, hvordan man tilføjer et netværksenhed, der ikke er en del af netværket skydive. Lad os tage dette eksempel. Vi har to skydive-agenter, der kører på to forskellige værter, og for at forbinde disse to værter har vi brug for en TOR-switch. Selvom vi kan gøre dette ved at definere nodernes struktur og relationer i konfigurationsfilen, lad os se, hvordan vi kan gøre det samme ved hjælp af API-regler for topologi.
Uden TOR-switchen vil de to agenter se ud som to forskellige noder uden nogen relationer, som vist på billedet nedenfor.

Udfør nu følgende kommandoer for node-reglerne for at oprette TOR-switchen og portene.
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"Som du kan se, er TOR-switchen og portene oprettet og tilføjet til skydive-topologien, og nu vil topologien se sådan ud, som vist på billedet nedenfor.

Udfør nu de følgende Edge Rule-kommandoer for at oprette forbindelse mellem TOR-switchen, port 1 og den offentlige grænseflade på vært 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"Udfør følgende kommandoer for at oprette forbindelse mellem TOR-switchen, port 2 og den offentlige grænseflade på vært 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"Nu oprettes der ownership- og layer2-relationer mellem TOR-switchen og porten samt layer2-relationer mellem agenterne og portene. Den endelige topologi vil nu se sådan ud, som vist på billedet nedenfor.

Nu er de to værter/agenter korrekt forbundet, og du kan kontrollere forbindelsen eller oprette en korteste sti mellem de to værter.
P.S. Link til
Der søges folk, der kan skrive posts om andre muligheder i Skydive.
om skydive.network.
Kilde: habr.com
