Skydive — to analizator topologii sieci i protokołów z otwartym kodem źródłowym w czasie rzeczywistym. Jego celem jest dostarczenie kompleksowego sposobu zrozumienia, co dzieje się w infrastrukturze sieciowej.
Aby wzbudzić wasze zainteresowanie, przedstawiam kilka zrzutów ekranu dotyczących Skydive. Poniżej znajdziecie post wprowadzający do Skydive.


Post „” na Habrze.
Skydive wyświetla topologię sieci, uzyskując zdarzenia sieciowe od agentów Skydive. Czy kiedykolwiek zastanawialiście się, jak dodać lub wyświetlić na diagramie topologii komponenty sieci, które znajdują się poza agentami sieci Skydive lub nie-sieciowe obiekty, takie jak TOR, magazyn danych itd.? Już nie musicie się tym martwić, dzięki API reguły węzła.
Od wersji 0.20, Skydive oferuje API reguły węzła, które może być używane do tworzenia nowych węzłów i krawędzi oraz aktualizowania metadanych istniejących węzłów. API reguły węzła jest podzielone na dwa interfejsy API: interfejs API reguły węzła i interfejs API reguły krawędzi. Interfejs API reguły węzła jest używany do tworzenia nowego węzła i aktualizowania metadanych istniejącego węzła. Interfejs API reguły krawędzi jest używany do tworzenia krawędzi między dwoma węzłami, tj. łączy dwa węzły.
W tym blogu zaprezentujemy dwa przykłady użycia, z których jeden dotyczy komponentu sieciowego, który nie jest częścią sieci Skydive. Drugi przykład to komponent nie-sieciowy. Przed tym omówimy kilka podstawowych sposobów użycia API reguły topologii.
Tworzenie węzła Skydive
Aby stworzyć węzeł, należy wskazać unikalną nazwę węzła i dozwolony typ węzła. Możecie również podać dodatkowe parametry.
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": ""
}Aktualizacja metadanych węzłów Skydive
Aby zaktualizować metadane istniejącego węzła, należy dostarczyć zapytanie w języku gremlin, aby wybrać węzły, w których chcecie zaktualizować metadane. Zgodnie z waszym zapytaniem można zaktualizować metadane jednego lub kilku węzłów za pomocą reguły jednego węzła.
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')"
}Tworzenie krawędzi Skydive
Aby stworzyć krawędź, należy określić węzeł źródłowy, węzeł docelowy oraz typ połączenia. Dla utworzenia węzła podrzędnego typ połączenia powinien być ustawiony na ownership, a dla połączenia typu layer2 - na layer2. Można stworzyć więcej niż jedno połączenie między dwoma węzłami, ale typ połączenia musi być różny.
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"
}
}Pierwszy przypadek użycia
W tym przypadku omówimy, jak przedstawić urządzenie niebędące częścią sieci w topologii Skydive. Załóżmy, że mamy magazyn danych, który powinien być przedstawiony na diagramie topologii Skydive z pewnymi przydatnymi metadanymi.
Musimy tylko stworzyć regułę węzła, aby dodać urządzenie do topologii. Możemy dodać metadane urządzenia jako część polecenia create lub później stworzyć jedną lub kilka aktualizacji reguł węzła.
Uruchom poniższe polecenie reguły węzła, aby dodać pamięć masową do schematu topologii.
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"Uruchom poniższe polecenie reguły krawędzi, aby powiązać stworzony węzeł z węzłem hosta.
skydive client edge-rule create --src="G.V().Has('Name', 'node1')" --dst="G.V().Has('Name', 'sda')" --relationtype="ownership"Po wykonaniu powyższych poleceń, możesz teraz zobaczyć urządzenie widoczne w schemacie topologii Skydive z przypisanymi metadanymi, jak pokazano na rysunku poniżej.

Drugi przypadek użycia
W tym przypadku zobaczymy, jak dodać urządzenie sieciowe, które nie jest częścią sieci skydive. Rozważmy ten przykład. Mamy dwóch agentów skydive działających na dwóch różnych hostach, do połączenia tych dwóch hostów potrzebny jest przełącznik TOR. Nawet jeśli możemy to osiągnąć, definiując węzły struktury i linki w pliku konfiguracyjnym, zobaczmy, jak możemy to samo zrobić za pomocą API reguł topologii.
Bez przełącznika TOR dwaj agenci będą wyglądać jak dwa różne węzły bez żadnych linków, jak pokazano na poniższym rysunku.

Teraz wykonaj poniższe polecenia Reguły węzła, aby stworzyć przełącznik TOR i porty.
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"Jak widać, przełącznik TOR i porty zostały utworzone i dodane do topologii skydive, a teraz topologia będzie wyglądać tak, jak pokazano na poniższym rysunku.

Teraz wykonaj poniższe polecenia Reguły krawędzi, aby stworzyć połączenie między przełącznikiem TOR, portem 1 i publicznym interfejsem hosta 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"Wykonaj poniższe polecenia, aby stworzyć połączenie między przełącznikiem TOR, portem 2 i publicznym interfejsem hosta 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"Teraz tworzone są połączenia ownership i layer2 między przełącznikiem TOR a portem, a także połączenia layer2 między agentami a portami. Ostateczna topologia będzie wyglądać tak, jak pokazano na poniższym rysunku.

Teraz dwa hosty / agenci są odpowiednio połączeni, a Ty możesz sprawdzić połączenie lub utworzyć przechwycenie najkrótszej trasy między dwoma hostami.
P.S. Link do
Szukamy osób, które mogłyby pisać posty o innych możliwościach Skydive.
na skydive.network.
Źródło: habr.com
