Skydive es un analizador de topología de red y protocolos de código abierto en tiempo real. Está diseñado para proporcionar una manera integral de entender qué sucede en la infraestructura de red.
Para interesarte, aquí tienes un par de capturas de pantalla sobre Skydive. Más abajo habrá un post de introducción a Skydive.


Post «» en Habr.
Skydive visualiza la topología de la red al recibir eventos de red de los agentes de Skydive. ¿Alguna vez te has preguntado cómo agregar o mostrar en el diagrama de topología componentes de red que están fuera de la red del agente de Skydive o objetos no de red, como TOR, almacenamiento de datos, etc.? Ya no tienes que preocuparte por esto gracias a la API de reglas de nodos.
A partir de la versión 0.20, Skydive proporciona una API de reglas de nodos, que se puede utilizar para crear nuevos nodos y bordes y para actualizar los metadatos de nodos existentes. La API de reglas de nodos se divide en dos interfaces: la interfaz de la regla de nodo y la interfaz de la regla de borde. La API de reglas de nodo se utiliza para crear un nuevo nodo y actualizar los metadatos de un nodo existente. La API de reglas de borde se utiliza para crear un límite entre dos nodos, es decir, conecta dos nodos.
En este blog veremos dos casos de uso, uno de los cuales es un componente de red que no forma parte de la red de skydive. El segundo caso es un componente no de red. Antes de eso, examinaremos algunas formas básicas de usar la API de reglas de topología.
Creación de un nodo en Skydive
Para crear un nodo, es necesario especificar un nombre único para el nodo y un tipo de nodo válido. También puedes proporcionar algunos parámetros adicionales.
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": ""
}Actualización de Metadatos de los Nodos de Skydive
Para actualizar los metadatos de un nodo existente, es necesario proporcionar una consulta en lenguaje gremlin para seleccionar los nodos en los que deseas actualizar los metadatos. De acuerdo con tu consulta, puedes actualizar los metadatos de uno o más nodos utilizando una regla de un nodo.
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')"
}Creación de un borde Skydive
Para crear un borde, es necesario especificar los nodos de origen y destino y el tipo de relación del borde. Para crear un nodo hijo, el valor del tipo de relación debe ser ownership; de manera similar, para crear una relación del tipo layer2, el tipo de relación debe ser layer2. Puede crear más de una relación entre dos nodos, pero el tipo de relación debe ser diferente.
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"
}
}Primera opción de uso
En este caso, veremos cómo mostrar un dispositivo no conectado en la topología de Skydive. Supongamos que tenemos un almacenamiento de datos que debe ser representado en el diagrama topológico de Skydive con algunos metadatos útiles.
Solo necesitamos crear una regla de nodo para agregar el dispositivo a la topología. Podemos añadir los metadatos del dispositivo como parte del comando create o crear una o varias reglas de actualización de nodo más tarde.
Ejecute el siguiente comando de la regla de nodo para agregar el dispositivo de almacenamiento al esquema de topología.
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"Ejecute el siguiente comando de la regla de borde para enlazar el nodo creado con el nodo host.
skydive client edge-rule create --src="G.V().Has('Name', 'node1')" --dst="G.V().Has('Name', 'sda')" --relationtype="ownership"Después de los comandos anteriores, ahora puede ver el dispositivo visible en el esquema de topología de Skydive con los metadatos proporcionados, como se muestra en la imagen a continuación.

Segunda opción de uso
En este caso, veremos cómo agregar un dispositivo de red que no es parte de la red skydive. Tomemos este ejemplo. Tenemos dos agentes skydive funcionando en dos hosts diferentes, y para conectar estos dos hosts necesitamos un conmutador TOR. Aunque podemos lograr esto definiendo los nodos de la estructura y los enlaces en el archivo de configuración, veamos cómo podemos hacer lo mismo utilizando la API de reglas de topología.
Sin el conmutador TOR, los dos agentes aparecerán como dos nodos diferentes sin ningún enlace, como se muestra en la imagen a continuación.

Ahora ejecute los siguientes comandos de la Regla del nodo para crear el conmutador TOR y los puertos.
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"Como pueden ver, el conmutador TOR y los puertos han sido creados y añadidos a la topología skydive, y ahora la topología se verá así como se muestra en la imagen a continuación.

Ahora ejecute los siguientes comandos de Regla de borde para crear un enlace entre el conmutador TOR, el puerto 1 y la interfaz pública del host 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"Ejecute los siguientes comandos para crear un enlace entre el conmutador TOR, el puerto 2 y la interfaz pública del host 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"Ahora se están creando enlaces de propiedad y layer2 entre el conmutador TOR y el puerto, así como enlaces layer2 entre los agentes y los puertos. Ahora la topología final se verá así como se muestra en la imagen a continuación.

Ahora los dos hosts / agentes están correctamente conectados y puedes verificar la conexión o crear una captura del camino más corto entre los dos hosts.
P.D. Enlace a
Se buscan personas que puedan escribir publicaciones sobre otras posibilidades de Skydive.
sobre skydive.network.
Fuente: habr.com
