从vmware.vim.vimclient获取网络使用情况

时间:2018-11-27 19:53:58

标签: vmware

我正在使用基础PowerCLI dll来获取某些C#功能,但我似乎找不到有关如何获取统计信息的文档。

这是我要在C#中重新创建的PowerCLI。

$vm | Get-Stat -stat 'net.usage.average'

我能够通过VMware.Vim.VimClientImpl#connect方法登录,并且能够通过VMware.Vim.VimClient#FindEntityViews方法获取虚拟机,但是从那里我不知道如何拉网络使用情况信息,我也无法通过Google找到有关该文件的信息。

如果有这些API的文档,我很想拥有它们,但是与此同时,有人知道如何获取此信息吗?

1 个答案:

答案 0 :(得分:0)

我通过盯着SOAP请求并做出一些直观的飞跃来找出答案。

我相信VMWare API是基于状态的,类似于X11 API基于状态的方式(您可以处理服务器内存中的各种对象)。

具体来说,您首先将会话连接到服务器,然后使用该会话登录。当您连接到会话时,vmware将返回“管理器对象”及其后续MoRef的列表。因此,查询此信息的正确方法如下:

VimClient vimClient = new VMware.Vim.VimClientImpl();
var serviceContent = vimClient.Connect(hostname, VMware.Vim.CommunicationProtocol.Https, null);
var userSession = vimClient.Login(un, pwd);

NameValueCollection filter = new NameValueCollection();
filter.Add("Name", vmName2LookFor);

String[] viewProperties = null;

var VMs = vimClient.FindEntityViews(typeof(VMware.Vim.VirtualMachine), null, filter, viewProperties);
              .Cast<VMware.Vim.VirtualMachine>()
              .ToList();
var vm = VMs.FirstOrDefault(); // blindly grab for example purposes

var pm = new VMware.Vim.PerformanceManager(vimClient, serviceContent.PerfManager);
pm.QueryAvailablePerfMetric(vm.MoRef, DateTime.Now.AddDays(-1), DateTime.Now, null)

请注意,在创建PerformanceManager对象时,会将其从最初连接到VMWare API时创建的 ServiceContent 对象中移交给MoRef。

我相信可以通过这种方式对内部管理器进行版本控制,但这只是一个猜测。

还请注意,出于说明目的,我使用了vimClient.FindEntityViews,我也可以使用单个vimClient.FindEntityView。

第三注:MoRef代表“托管对象引用”。

第四点:出于性能原因,vimClient.FindEntityViews中的viewProperties告知vmware仅发送指定的属性。例如,通过IP查找VM涉及获取所有VM,并在所有VM中进行搜索以查找具有您要查找的IP的VM。您无需关心其他任何属性,因此可以告诉vmware不要发送其他属性。如果您拥有大量基础架构,那么这将极大地提高性能。在上述情况下,如果我对IP地址感兴趣,我会这样做

String[] viewProperties = new[]{ "Guest.Net" };