XML VMware SDK获取网络使用信息应该用什么
What XML should I use to obtain network usage information from the VMware SDK
我已经尝试过多次迭代,但我希望我完全看错了东西,否则我可能只是瞎了眼。 :-) 所以从SDK抓取信息的基本参数是:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:vim25" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Body>
<ns1:RetrieveProperties>
<ns1:_this type="PropertyCollector">propertyCollector</ns1:_this>
<ns1:specSet>
<ns1:propSet>
<ns1:type>DistributedVirtualSwitch</ns1:type>
<ns1:all>true</ns1:all>
</ns1:propSet>
<ns1:objectSet>
<ns1:obj type="Folder">group-d1</ns1:obj>
<ns1:skip>false</ns1:skip>
<ns1:selectSet xsi:type="TraversalSpec">
<name>FolderTraversalSpec</name>
<type>Folder</type>
<path>childEntity</path>
<skip>false</skip>
<selectSet>
<name>FolderTraversalSpec</name>
</selectSet>
<selectSet>
<name>DataCenterVMTraversalSpec</name>
</selectSet>
</ns1:selectSet>
<ns1:selectSet xsi:type="TraversalSpec">
<name>DataCenterVMTraversalSpec</name>
<type>Datacenter</type>
<path>networkFolder</path>
<skip>false</skip>
<selectSet>
<name>FolderTraversalSpec</name>
</selectSet>
</ns1:selectSet>
</ns1:objectSet>
</ns1:specSet>
</ns1:RetrieveProperties>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
这应该会为我提供每个定义的虚拟交换机的所有数据。确实如此……但是在应该有一些关于网络利用率的指标的地方,我得到的都是 0。具体在 runtime.resourceRuntimeInfo。
我尝试通过从 networkFolder 获取所有数据并获取 DistributedVirtualPortgroup 条目来获取它...我已将其切换到 vmFolder 并从 VirtualMachine 获取了相当多的有用数据。具体在以下路径集中:guest 和 summary。我什至尝试从 hostFolder 获取某种网络统计信息并获取 ComputeResource 类型。
None 它产生流量 in/out/total 类型统计...理想情况下我想通过端口获取它...但在这一点上我会满足于卷起虚拟交换机当前数据。
我愿意使用 SNMP,但我需要提供有关如何设置虚拟交换机进行监控的说明...我唯一不能做的就是使用命令行。
任何帮助将不胜感激,因为有关 VMware 网络使用统计细节的任何知识似乎都被埋藏得很深。
不明白为什么上面的 XML 给了我所有的 0,看起来应该有一个性能总结,但我终于在弄清楚如何正确查询 VMWare API.不幸的是,使用 PHP 有点尝试,因为 VMWare 的实现倾向于不完整的一面并且没有很好的记录。
所以我制作了一个基于 PHP 的 API,它使用 RAW XML(因为我无法让各种 SOAP 库始终如一地提供我需要的东西)。
https://github.com/matt-o-matic/PHP-VMWare-API-Class
具体来说,回答我上面的问题......这是一个多步骤的过程,可以在 VMWare 中获取任何设备上的网络使用情况。首先,您必须找出设备的 ID。上面问题中的 XML 做得很好。只需在输出中查找 obj_id,您就会得到对象 ID。
从那里开始有点棘手。您还必须了解 VMWare 中的对象类型。就我而言:
- VM 来宾 = 虚拟机
- VM 主机 = ComputeResource
- 虚拟交换机 = DistributedVirtualSwitch
获取该对象支持的指标 ID 列表:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:vim25">
<soapenv:Header/>
<soapenv:Body>
<urn:QueryAvailablePerfMetric>
<urn:_this>PerfMgr</urn:_this>
<urn:entity type="VirtualMachine">vm-1844</urn:entity>
</urn:QueryAvailablePerfMetric>
</soapenv:Body>
</soapenv:Envelope>
您将获得一组 ID 和实例对。您最终将需要两者……但现在让我们只看一下 ID。您可以通过调用下面描述的函数来详细了解指标是什么:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:vim25">
<soapenv:Header/>
<soapenv:Body>
<urn:QueryPerfCounter>
<urn:_this>PerfMgr</urn:_this>
<urn:counterId>125</urn:counterId>
<urn:counterId>133</urn:counterId>
<urn:counterId>143</urn:counterId>
</urn:QueryPerfCounter>
</soapenv:Body>
</soapenv:Envelope>
您可以输入任意数量的 counterIds...或者只输入 1。无论哪种方式都可以。在我的实例中,143 是该 VM 对象的整个网络进出的 ID。获取该对象的 ID/instance(在本例中实例为空)的遥测数据非常简单:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:vim25">
<soapenv:Header/>
<soapenv:Body>
<urn:QueryPerf>
<urn:_this>PerfMgr</urn:_this>
<urn:querySpec>
<urn:entity type="VirtualMachine">vm-1844</urn:entity>
<urn:startTime>2020-05-22T22:30:00Z</urn:startTime>
<urn:startTime>2020-05-22T23:30:00Z</urn:startTime>
<urn:metricId>
<urn:counterId>143</urn:counterId>
<urn:instance></urn:instance>
</urn:metricId>
<urn:format>csv</urn:format>
</urn:querySpec>
</urn:QueryPerf>
</soapenv:Body>
</soapenv:Envelope>
请注意,日期为格林威治标准时间。除此之外,相当直接地取回一些数据。如果您想勇敢面对这一切,可以在 VMWare 文档中找到更多信息。此外,对 SoapUI 的详细了解确实帮助我解决了很多问题(老实说,比文档更重要)。
请记住在登录 SoapUI 中进行任何其他调用后设置 vmware_soap_session cookie。
希望这对搜索此答案的其他人有所帮助。
我已经尝试过多次迭代,但我希望我完全看错了东西,否则我可能只是瞎了眼。 :-) 所以从SDK抓取信息的基本参数是:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:vim25" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Body>
<ns1:RetrieveProperties>
<ns1:_this type="PropertyCollector">propertyCollector</ns1:_this>
<ns1:specSet>
<ns1:propSet>
<ns1:type>DistributedVirtualSwitch</ns1:type>
<ns1:all>true</ns1:all>
</ns1:propSet>
<ns1:objectSet>
<ns1:obj type="Folder">group-d1</ns1:obj>
<ns1:skip>false</ns1:skip>
<ns1:selectSet xsi:type="TraversalSpec">
<name>FolderTraversalSpec</name>
<type>Folder</type>
<path>childEntity</path>
<skip>false</skip>
<selectSet>
<name>FolderTraversalSpec</name>
</selectSet>
<selectSet>
<name>DataCenterVMTraversalSpec</name>
</selectSet>
</ns1:selectSet>
<ns1:selectSet xsi:type="TraversalSpec">
<name>DataCenterVMTraversalSpec</name>
<type>Datacenter</type>
<path>networkFolder</path>
<skip>false</skip>
<selectSet>
<name>FolderTraversalSpec</name>
</selectSet>
</ns1:selectSet>
</ns1:objectSet>
</ns1:specSet>
</ns1:RetrieveProperties>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
这应该会为我提供每个定义的虚拟交换机的所有数据。确实如此……但是在应该有一些关于网络利用率的指标的地方,我得到的都是 0。具体在 runtime.resourceRuntimeInfo。
我尝试通过从 networkFolder 获取所有数据并获取 DistributedVirtualPortgroup 条目来获取它...我已将其切换到 vmFolder 并从 VirtualMachine 获取了相当多的有用数据。具体在以下路径集中:guest 和 summary。我什至尝试从 hostFolder 获取某种网络统计信息并获取 ComputeResource 类型。
None 它产生流量 in/out/total 类型统计...理想情况下我想通过端口获取它...但在这一点上我会满足于卷起虚拟交换机当前数据。
我愿意使用 SNMP,但我需要提供有关如何设置虚拟交换机进行监控的说明...我唯一不能做的就是使用命令行。
任何帮助将不胜感激,因为有关 VMware 网络使用统计细节的任何知识似乎都被埋藏得很深。
不明白为什么上面的 XML 给了我所有的 0,看起来应该有一个性能总结,但我终于在弄清楚如何正确查询 VMWare API.不幸的是,使用 PHP 有点尝试,因为 VMWare 的实现倾向于不完整的一面并且没有很好的记录。
所以我制作了一个基于 PHP 的 API,它使用 RAW XML(因为我无法让各种 SOAP 库始终如一地提供我需要的东西)。
https://github.com/matt-o-matic/PHP-VMWare-API-Class
具体来说,回答我上面的问题......这是一个多步骤的过程,可以在 VMWare 中获取任何设备上的网络使用情况。首先,您必须找出设备的 ID。上面问题中的 XML 做得很好。只需在输出中查找 obj_id,您就会得到对象 ID。
从那里开始有点棘手。您还必须了解 VMWare 中的对象类型。就我而言:
- VM 来宾 = 虚拟机
- VM 主机 = ComputeResource
- 虚拟交换机 = DistributedVirtualSwitch
获取该对象支持的指标 ID 列表:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:vim25">
<soapenv:Header/>
<soapenv:Body>
<urn:QueryAvailablePerfMetric>
<urn:_this>PerfMgr</urn:_this>
<urn:entity type="VirtualMachine">vm-1844</urn:entity>
</urn:QueryAvailablePerfMetric>
</soapenv:Body>
</soapenv:Envelope>
您将获得一组 ID 和实例对。您最终将需要两者……但现在让我们只看一下 ID。您可以通过调用下面描述的函数来详细了解指标是什么:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:vim25">
<soapenv:Header/>
<soapenv:Body>
<urn:QueryPerfCounter>
<urn:_this>PerfMgr</urn:_this>
<urn:counterId>125</urn:counterId>
<urn:counterId>133</urn:counterId>
<urn:counterId>143</urn:counterId>
</urn:QueryPerfCounter>
</soapenv:Body>
</soapenv:Envelope>
您可以输入任意数量的 counterIds...或者只输入 1。无论哪种方式都可以。在我的实例中,143 是该 VM 对象的整个网络进出的 ID。获取该对象的 ID/instance(在本例中实例为空)的遥测数据非常简单:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:vim25">
<soapenv:Header/>
<soapenv:Body>
<urn:QueryPerf>
<urn:_this>PerfMgr</urn:_this>
<urn:querySpec>
<urn:entity type="VirtualMachine">vm-1844</urn:entity>
<urn:startTime>2020-05-22T22:30:00Z</urn:startTime>
<urn:startTime>2020-05-22T23:30:00Z</urn:startTime>
<urn:metricId>
<urn:counterId>143</urn:counterId>
<urn:instance></urn:instance>
</urn:metricId>
<urn:format>csv</urn:format>
</urn:querySpec>
</urn:QueryPerf>
</soapenv:Body>
</soapenv:Envelope>
请注意,日期为格林威治标准时间。除此之外,相当直接地取回一些数据。如果您想勇敢面对这一切,可以在 VMWare 文档中找到更多信息。此外,对 SoapUI 的详细了解确实帮助我解决了很多问题(老实说,比文档更重要)。
请记住在登录 SoapUI 中进行任何其他调用后设置 vmware_soap_session cookie。
希望这对搜索此答案的其他人有所帮助。