Skydive — анализатор на топологията на мрежата и протоколите с отворен код в реално време. Той е предназначен да предостави изчерпателен начин за разбиране на това, което се случва в мрежовата инфраструктура.
За да ви заинтригувам, ще покажа няколко скрийншота за Skydive. По-долу ще намерите пост за въвеждане в Skydive.


Постът „“ на Хабър.
Skydive визуализира топологията на мрежата, получавайки мрежови събития от агенти на Skydive. Чудили ли сте се как да добавите или визуализирате на диаграмата топологията мрежови компоненти, които са извън агенцията на Skydive или несетеви обекти, като TOR, хранилища на данни и т.н.? Не се притеснявайте за това повече, благодарение на Node rule API.
Започвайки от версия 0.20, Skydive предоставя Node rule API, който може да се използва за създаване на нови възли и ребра и за обновяване на метаданните на съществуващите възли. Node rule API се разделя на два интерфейса: интерфейс за правилото на възела и интерфейс за правилото на реброто. Интерфейсът за правилото на възела се използва за създаване на нов възел и обновяване на метаданните на съществуващия възел. Интерфейсът за правилото на реброто се използва за създаване на връзка между два възла, т.е. свързва два възла.
В този блог ще разгледаме два сценария, единият от които е мрежов компонент, който не е част от мрежата на Skydive. Вторият вариант е несетеви компонент. Преди това ще разгледаме някои основни начини за използване на API правилата на топологията.
Създаване на възел Skydive
За да създадете възел, трябва да посочите уникално име на възела и допустим тип възел. Можете също да предоставите някои допълнителни параметри.
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": ""
}Обновление на метаданните на възлите на Skydive
За да обновите метаданните на съществуващ възел, трябва да предоставите запитване на език gremlin, за да изберете възлите, в които искате да обновите метаданните. В съответствие с вашето запитване можете да обновите метаданните на един или няколко възла с правилото на един възел.
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')"
}Създаване на ръб Skydive
За да създадете ръб, трябва да посочите изходния и крайния възел, както и типа на връзката. За да създадете дъщерен възел, стойността на типа на връзката трябва да бъде ownership, а за създаване на връзка с тип layer2 - типът на връзката трябва да бъде layer2. Можете да създадете повече от една връзка между два възела, но типът на връзката трябва да бъде различен.
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"
}
}Първи вариант на използване
В този случай ще разгледаме как да покажем мрежово устройство в топологията на skydive. Нека разгледаме, че имаме хранилище на данни, което трябва да бъде показано в топологичната диаграма на skydive с полезни метаданни.
Просто трябва да създадем правило за възел, за да добавим устройството в топологията. Можем да добавим метаданти на устройството като част от командата за създаване или по-късно да създадем една или няколко команди за актуализиране на правилото за възел.
Изпълнете командата по-долу за правило на възела, за да добавите запомнящо устройство в схемата на топологията.
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"Изпълнете командата по-долу за правило на ръба, за да свържете създадения възел с възела хост.
skydive client edge-rule create --src="G.V().Has('Name', 'node1')" --dst="G.V().Has('Name', 'sda')" --relationtype="ownership"След горепосочените команди сега можете да видите устройството, видимо в схемата на топологията на skydive с определените метаданти, както е показано на изображението по-долу.

Втори вариант на използване
В този случай ще видим как да добавим мрежово устройство, което не е част от мрежата skydive. Нека разгледаме този пример. Имаме два агента skydive, работещи на два различни хоста, и за свързването на тези два хоста ни трябва комутатор TOR. Дори и да можем да постигнем това, определяйки възлите на структурата и връзките в конфигурационния файл, нека видим как можем да направим същото с помощта на API на правилата за топология.
Без комутатор TOR, двата агента ще изглеждат като два различни възла без никакви връзки, както е показано на изображението по-долу.

Сега изпълнете следните команди за правилата на възлите, за да създадете комутатор TOR и портовете.
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"Както виждате, комутаторът TOR и портовете са създадени и добавени към топологията skydive, и сега топологията ще изглежда както е показано на изображението по-долу.

Сега изпълнете следните команди на правилата за ръбовете, за да създадете връзка между комутатора TOR, порт 1 и публичния интерфейс на хост 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"Изпълнете следните команди, за да създадете връзка между комутатора TOR, порт 2 и публичния интерфейс на хост 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"Сега се създават връзки ownership и layer2 между комутатора TOR и порта, както и връзки layer2 между агентите и портовете. Сега окончателната топология ще изглежда както е показано на изображението по-долу.

Сега двата хоста / агента са свързани правилно, и можете да проверите връзката или да създадете захват на краткия път между двата хоста.
P.S. Линк към
Търсят се хора, които могат да пишат постове за други възможности на Skydive.
по skydive.network.
Източник: habr.com
