Skydive é um analisador de topologia de rede e protocolos de código aberto em tempo real. O objetivo é fornecer uma maneira abrangente de entender o que está acontecendo na infraestrutura de rede.
Para despertar seu interesse, aqui estão algumas capturas de tela sobre o Skydive. Um pouco mais abaixo, haverá uma postagem introdutória sobre o Skydive.


Post "" no Habr.
O Skydive exibe a topologia da rede, obtendo eventos de rede de agentes Skydive. Você já se perguntou como adicionar ou representar em um diagrama de topologia componentes de rede que estão fora da rede de agentes do Skydive ou objetos não relacionados à rede, como TOR, armazenamento de dados, etc.? Não se preocupe mais com isso, graças à API de regras de nó.
A partir da versão 0.20, o Skydive fornece a API de regra de nó, que pode ser usada para criar novos nós e arestas e atualizar os metadados dos nós existentes. A API de regra de nó é dividida em duas interfaces de API: a interface de API de regra de nó e a interface de API de regra de aresta. A API de regra de nó é utilizada para criar um novo nó e atualizar os metadados de um nó existente. A API de regra de aresta é utilizada para criar uma borda entre dois nós, ou seja, conectar dois nós.
Neste blog, veremos dois casos de uso, um dos quais é um componente de rede que não faz parte da rede do skydive. O segundo é um componente não relacionado à rede. Antes disso, vamos abordar algumas das principais maneiras de usar a API de regras de topologia.
Criar um nó Skydive
Para criar um nó, você deve especificar um nome de nó exclusivo e um tipo de nó permitido. Você também pode fornecer alguns parâmetros adicionais.
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": ""
}Atualização de Metadados dos Nós Skydive
Para atualizar os metadados de um nó existente, você deve fornecer uma consulta em gremlin para selecionar os nós cujos metadados deseja atualizar. De acordo com sua consulta, você pode atualizar os metadados de um ou mais nós usando a regra de um único nó.
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')"
}Criação de aresta Skydive
Para criar uma aresta, é necessário especificar os nós de origem e destino e o tipo de relação da aresta. Para criar um nó filho, o valor do tipo de relação deve ser ownership. De forma similar, para criar uma relação do tipo layer2, o valor do tipo de relação deve ser layer2. Você pode criar mais de uma relação entre dois nós, mas o tipo de relação deve 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"
}
}Primeira opção de uso
Neste caso, vamos ver como mostrar um dispositivo não conectado na topologia do skydive. Digamos que temos um armazenamento de dados que deve ser exibido no diagrama topológico do skydive com algumas metainformações úteis.
Precisamos apenas criar uma regra de nó para adicionar o dispositivo à topologia. Podemos adicionar metadados do dispositivo como parte do comando create ou depois criar um ou mais comandos update node rule.
Execute o comando abaixo da regra do nó para adicionar o dispositivo de armazenamento ao esquema da topologia.
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"Execute o comando abaixo da regra da aresta para vincular o nó criado ao nó do host.
skydive client edge-rule create --src="G.V().Has('Name', 'node1')" --dst="G.V().Has('Name', 'sda')" --relationtype="ownership"Após os comandos acima, agora você pode ver o dispositivo visível no esquema topológico do skydive com os metadados fornecidos, como mostrado na figura abaixo.

Segunda opção de uso
Neste caso, veremos como adicionar um dispositivo de rede que não faz parte da rede skydive. Vamos considerar este exemplo. Temos dois agentes skydive trabalhando em dois hosts diferentes; para conectar esses dois hosts, precisamos de um switch TOR. Mesmo que possamos alcançar isso definindo nós da estrutura e links no arquivo de configuração, vamos ver como podemos fazer o mesmo usando a API de regras de topologia.
Sem o switch TOR, os dois agentes aparecerão como dois nós diferentes sem quaisquer links, conforme mostrado na figura abaixo.

Agora execute os seguintes comandos de Regras de Nó para criar o switch TOR e portas.
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 você pode ver, o switch TOR e as portas foram criados e adicionados à topologia skydive, e agora a topologia ficará assim, conforme mostrado na figura abaixo.

Agora execute os comandos abaixo da Regra de Aresta para criar a conexão entre o switch TOR, porta 1 e a interface pública do 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"Execute os seguintes comandos para criar uma conexão entre o switch TOR, porta 2 e a interface pública do 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"Agora estão sendo criadas conexões ownership e layer2 entre o switch TOR e a porta, bem como conexões layer2 entre os agentes e as portas. A topologia final agora ficará assim, conforme mostrado na figura abaixo.

Agora, os dois hosts / agentes estão corretamente conectados, e você pode verificar a conexão ou criar uma captura do caminho mais curto entre os dois hosts.
P.S. Link para
Procuramos pessoas que possam escrever posts sobre outras funcionalidades do Skydive.
sobre skydive.network.
Fonte: habr.com
