Skydive ist ein Open-Source-Analysetool für Netzwerk- und Protokolltopologien in Echtzeit. Es zielt darauf ab, umfassende Einblicke in die Netzwerk-Infrastruktur zu ermöglichen.
Um Ihr Interesse zu wecken, möchte ich Ihnen ein paar Screenshots von Skydive zeigen. Weiter unten finden Sie einen Einführungspost zu Skydive.


Post „“ auf Habr.
Skydive visualisiert die Netzwerk-Topologie, indem es Netzwerkereignisse von Skydive-Agenten abruft. Haben Sie sich jemals gefragt, wie Sie Netzwerkkomponenten, die sich außerhalb des Agentennetzwerks von Skydive befinden, oder nicht-netzwerkbezogene Objekte wie TOR, Datenspeicher usw. in der Topologie-Diagramm hinzufügen oder darstellen können? Sorgen darüber gehören der Vergangenheit an, dank der Node-Rule-API.
Mit der Version 0.20 bietet Skydive eine Node Rule API, die zur Erstellung neuer Knoten und Kanten sowie zur Aktualisierung der Metadaten vorhandener Knoten verwendet werden kann. Die Node Rule API ist in zwei Schnittstellen unterteilt: die Knotenregel-API und die Kantenregel-API. Die Knotenregel-API wird zur Erstellung eines neuen Knotens und zur Aktualisierung der Metadaten eines bestehenden Knotens verwendet. Die Kantenregel-API wird zur Erstellung einer Verbindung zwischen zwei Knoten verwendet, d.h. sie verbindet zwei Knoten.
In diesem Blog sehen wir zwei Anwendungsfälle, von denen einer ein Netzwerkkomponente ist, die nicht Teil des Skydive-Netzwerks ist. Der zweite Fall ist eine nicht-netzwerkgebundene Komponente. Davor betrachten wir einige grundlegende Nutzungsmöglichkeiten der Topologie-API.
Erstellung eines Skydive-Knotens
Um einen Knoten zu erstellen, müssen Sie einen eindeutigen Knotennamen und einen gültigen Knotentyp angeben. Sie können auch einige zusätzliche Parameter bereitstellen.
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": ""
}Aktualisierung der Metadaten von Skydive-Knoten
Um die Metadaten eines bestehenden Knotens zu aktualisieren, müssen Sie eine Anfrage in der Sprache Gremlin bereitstellen, um die Knoten auszuwählen, deren Metadaten Sie aktualisieren möchten. Gemäß Ihrer Anfrage können Sie die Metadaten eines oder mehrerer Knoten entsprechend der Regel für einen Knoten aktualisieren.
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')"
}Erstellen einer Kante in Skydive
Um eine Kante zu erstellen, müssen Sie den Ausgangs- und Endknoten sowie den Typ der Kante angeben. Für die Erstellung eines Kindknotens sollte der Typ der Beziehung 'ownership' sein. Analog dazu sollte der Typ der Beziehung für eine Schicht-2-Verbindung 'layer2' sein. Sie können mehr als eine Verbindung zwischen zwei Knoten erstellen, aber der Verbindungstyp muss unterschiedlich sein.
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"
}
}Erste Anwendungsoption
In diesem Fall betrachten wir, wie ein nicht-netzwerkgebundenes Gerät in der Topologie von Skydive angezeigt werden kann. Lassen Sie uns annehmen, dass wir einen Datenspeicher haben, der mit einigen nützlichen Metadaten in der Skydive-Topologiediagramm dargestellt werden soll.
Wir müssen lediglich eine Knotenregel erstellen, um das Gerät in die Topologie einzufügen. Wir können die Metadaten des Geräts als Teil des Befehls 'create' hinzufügen oder später einen oder mehrere Befehle zur 'update node rule' erstellen.
Führen Sie den untenstehenden Befehl für die Knotenregel aus, um das Speichergerät in das Topologieschema einzufügen.
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"Führen Sie den folgenden Kantenregel-Befehl aus, um den erstellten Knoten mit dem Hostknoten zu verknüpfen.
skydive client edge-rule create --src="G.V().Has('Name', 'node1')" --dst="G.V().Has('Name', 'sda')" --relationtype="ownership"Nach den oben genannten Befehlen können Sie nun das Gerät in der Skydive-Topologie mit den angegebenen Metadaten sichtbar sehen, wie in der folgenden Abbildung dargestellt.

Zweite Verwendungsmöglichkeit
In diesem Fall sehen wir uns an, wie man ein Netzgerät hinzufügt, das nicht Teil des Skydive-Netzwerks ist. Lassen Sie uns dieses Beispiel betrachten. Wir haben zwei Skydive-Agenten, die auf zwei verschiedenen Hosts arbeiten, und um diese beiden Hosts zu verbinden, benötigen wir einen TOR-Switch. Auch wenn wir dies erreichen können, indem wir die Strukturknoten und Links in der Konfigurationsdatei definieren, schauen wir uns an, wie wir dasselbe mit der API für die Topologieregeln tun können.
Ohne den TOR-Switch werden die beiden Agenten wie zwei separate Knoten ohne jegliche Verlinkung erscheinen, wie auf dem Bild unten dargestellt.

Führen Sie nun die folgenden Befehle der Knotenregel aus, um den TOR-Switch und die Ports zu erstellen.
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"Wie Sie sehen, wurde der TOR-Switch sowie die Ports erstellt und zur Skydive-Topologie hinzugefügt. Die Topologie wird nun wie im Bild unten dargestellt aussehen.

Führen Sie nun die folgenden Befehle der Edge-Regel aus, um eine Verbindung zwischen dem TOR-Switch, Port 1 und der öffentlichen Schnittstelle von Host 1 herzustellen.
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"Führen Sie die folgenden Befehle aus, um die Verbindung zwischen dem TOR-Switch, Port 2 und dem öffentlichen Interface des Hosts 2 herzustellen.
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"Jetzt werden die Beziehungen ownership und layer2 zwischen dem TOR-Switch und dem Port sowie die Beziehungen layer2 zwischen den Agenten und den Ports erstellt. Die endgültige Topologie sieht nun wie in der folgenden Abbildung aus.

Jetzt sind die beiden Hosts / Agenten korrekt verbunden, und Sie können die Verbindung überprüfen oder einen Capture des kürzesten Weges zwischen den beiden Hosts erstellen.
P.S. Link zum
Es werden Personen gesucht, die Beiträge über weitere Möglichkeiten von Skydive schreiben können.
zu skydive.network.
Quelle: habr.com
