我应该使用什么XML从VMware SDK获取网络使用信息

我应该使用什么XML从VMware SDK获取网络使用信息,xml,soap,sdk,vmware,Xml,Soap,Sdk,Vmware,我已经尝试了多次重复,我希望我只是完全看错了东西,否则我可能只是瞎了眼。:-)因此,从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-

我已经尝试了多次重复,我希望我只是完全看错了东西,否则我可能只是瞎了眼。:-)因此,从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>

属性收集器
分布式虚拟开关
真的
d1组
假的
FolderTraversalSpec
文件夹
儿童实体
假的
FolderTraversalSpec
DataCenterVMTraversalSpec
DataCenterVMTraversalSpec
数据中心
网络文件夹
假的
FolderTraversalSpec
这应该给我定义的每个虚拟交换机的所有数据。而且它确实。。。但是应该有一些关于网络利用率的指标,我得到的都是0。特别是在runtime.resourceRuntimeInfo中

我试着通过从networkFolder中获取所有数据并抓取DistributedVirtualPortgroup条目来获取它。。。我已将其切换到vmFolder,并从VirtualMachine中获取了大量有用的数据。特别是在路径集中:guest和summary。我甚至尝试从hostFolder中获取一些网络统计数据,并获取计算机资源类型

所有这些都不会生成传入/传出/总类型统计信息。。。理想情况下,我想通过港口得到它。。。但在这一点上,我会满足于目前只获取汇总的虚拟交换机数据

我愿意使用SNMP,但我需要提供有关如何设置虚拟交换机以进行监视的说明,然后。。。我唯一不能做的就是使用命令行


任何帮助都将不胜感激,因为有关VMware中网络使用情况统计信息的任何知识似乎都被深深地埋藏了起来

我一直不明白为什么上面的XML给了我所有的0,看起来应该有一个性能总结,但我最终在弄清楚如何正确查询VMWare API方面取得了一些进展。不幸的是,使用PHP有点困难,因为VMWare的实现往往有不完整的一面,而且没有很好的文档记录

因此,我制作了一个基于PHP的API,它使用原始XML(因为我无法让各种SOAP库一致地提供我需要的东西)

具体来说,要回答我上面的问题。。。了解VMWare内任何设备上的网络使用情况是一个多步骤的过程。首先,您必须找到设备的ID。上述问题中的XML很好地做到了这一点。只要在输出中查找obj_id,就可以得到对象id

从这里开始,它变得有点棘手。您还必须了解VMWare中的对象类型。就我而言:

  • VM来宾=虚拟机
  • VM主机=计算机资源
  • 虚拟交换机=分布式虚拟交换机
要获取该对象支持的度量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>

绩效经理
vm-1844
您将得到一组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>

绩效经理
125
133
143
你可以放入任意数量的计数器ID。。。或者只加1。这两种方式都会奏效。在我的实例中,143是该VM对象的总网络进出的ID。为该对象获取该ID/实例(在本例中,该实例为空)的遥测数据非常简单,如下所示:

<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>

绩效经理
vm-1844
2020-05-22T22:30:00Z
2020-05-22T23:30:00Z
143
csv
请注意,日期以格林尼治标准时间为单位。除此之外,还可以直接获取一些数据。如果您想了解更多信息,请参阅VMWare文档。此外,通过SoapUI的详细查看确实帮助我解决了很多问题(老实说,这比文档更重要)

只要记住在登录到SoapUI中的任何其他调用后设置vmware_soap_会话cookie

希望这能帮助其他人寻找这个答案