Skydive 是一款开源的实时网络拓扑和协议分析器。 它旨在提供一种全面的方法来了解网络基础设施中发生的情况。
为了引起您的兴趣,我将给您一些有关 Skydive 的屏幕截图。 下面会有一篇介绍跳伞的帖子。
邮政 ”
Skydive 通过接收来自 Skydive 代理的网络事件来显示网络拓扑。 您是否想知道如何在拓扑图中添加或显示 Skydive 代理网络之外的网络组件或非网络对象(例如 TOR、数据存储等)。借助 Node 规则 API,无需再担心这一点。
从0.20版本开始,Skydive提供了节点规则API,可用于创建新节点和边以及更新现有节点的元数据。 节点规则API分为两个API:节点规则API和边缘规则API。 节点规则 API 用于创建新节点并更新现有节点的元数据。 边缘规则 API 用于在两个节点之间创建边界,即连接两个节点。
在本博客中,我们将看到两个用例,其中之一是不属于跳伞网络的网络组件。 第二个选项是非网络组件。 在此之前,我们将了解使用拓扑规则 API 的一些基本方法。
创建跳伞节点
要创建节点,您必须提供唯一的节点名称和有效的节点类型。 您还可以提供一些附加选项。
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": ""
}
更新跳伞节点元数据
要更新现有节点的元数据,您必须提供 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')"
}
创建跳伞边缘
创建边时,必须指定源节点、目的节点以及边的链路类型;创建子节点时,链路类型值必须为ownership;同样,创建链路类型layer2时,链路类型值必须为第2层。 您可以在两个节点之间创建多个链接,但链接的类型必须不同。
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 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"
执行上述命令后,您现在可以在跳伞拓扑图中看到带有给定元数据的设备,如下图所示。
第二个用例
在本例中,我们将了解如何添加不属于跳伞网络的网络设备。 让我们看一下这个例子。 我们有两个跳伞代理运行在两个不同的主机上,为了连接这两个主机,我们需要一个 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 拓扑中,拓扑现在如下图所示。
现在运行以下 Edge Rule 命令在 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"
现在,在 TOR 交换机和端口之间以及代理和端口之间创建了所有权和第 2 层关联。 现在最终的拓扑如下图所示。
现在,两个主机/代理已正确连接,您可以测试连接或创建两个主机之间的最短路径捕获。
PS 链接到
我们正在寻找可以撰写有关其他跳伞功能的帖子的人。
来源: habr.com