使用vshere Mangement SDK6.5 查询虚拟机CPU利用率和内存利用率
public OssVm getVmByUuid(final String uuid, final String ip) throws Exception {
final Connector conn = Connector.getConnector(ip);
final ObjectRetriever objRef = new ObjectRetriever(conn);
final ServiceContent serviceContent = objRef.getServiceContent();
final OssVm ossVm = new OssVm();
try {
final ManagedObjectReference vmMor = VMwareUtil.getVmMor(uuid, objRef);
final String vmUuid = VMwareUtil.composeObjectUuid(getIdByIp(ip), vmMor.getValue());
ossVm.setUuid(vmUuid);
ossVm.setName(objRef.getSingleProperty("name", vmMor));
final VirtualMachineConfigInfo config = (VirtualMachineConfigInfo) objRef.getObjectProperty(vmMor, "config");
final VirtualMachineSummary summary = (VirtualMachineSummary) objRef.getObjectProperty(vmMor, "summary");
final VirtualMachineStorageSummary virtualMachineStorageSummary = summary.getStorage();
final VirtualMachineGuestSummary guest = summary.getGuest();
final ManagedObjectReference perfManger = serviceContent.getPerfManager();
ossVm.setOs(guest.getGuestFullName());
ossVm.setIp(guest.getIpAddress());
ossVm.setVmToolStatus(VMwareUtil.getVmToolStatus(guest));
ossVm.setUseSize(virtualMachineStorageSummary.getCommitted() / 1073741824L);
ossVm.setFreeSize(virtualMachineStorageSummary.getUncommitted() / 1073741824L);
ossVm.setSize(ossVm.getFreeSize() + ossVm.getUseSize());
ossVm.setLongUuid(config.getUuid());
ossVm.setVcpu(config.getHardware().getNumCPU());
ossVm.setVmemory((long) config.getHardware().getMemoryMB());
List<PerfQuerySpec> perfQuerySpecList = new ArrayList<>();
PerfQuerySpec perfQuerySpec = createPerfQuerySpec(vmMor, 1, 20, "csv");
perfQuerySpecList.add(perfQuerySpec);
List<PerfEntityMetricBase> perfEntityMetricList = conn.getVimPort().queryPerf(perfManger, perfQuerySpecList);
for (int i = 0; i < perfEntityMetricList.size(); i++) {
PerfEntityMetricCSV perfEntityMetricCSV = (PerfEntityMetricCSV) perfEntityMetricList.get(i);
List<PerfMetricSeriesCSV> perfMetricSeriesCSVList = perfEntityMetricCSV.getValue();
List<Integer> perfCounterIdList = new ArrayList<>();
for (PerfMetricSeriesCSV perfMetricSeriesCSV : perfMetricSeriesCSVList) {
perfCounterIdList.add(perfMetricSeriesCSV.getId().getCounterId());
}
List<PerfCounterInfo> perfCounterInfoList = conn.getVimPort().queryPerfCounter(perfManger, perfCounterIdList);
for (int n = 0; n < perfMetricSeriesCSVList.size(); n++) {
String strName = perfCounterInfoList.get(n).getNameInfo().getKey();
String groupName = perfCounterInfoList.get(n).getGroupInfo().getKey();
if (null != groupName && groupName.equals("mem")) {
if (strName.equals("consumed")) {
long memoryUsage = (Integer.parseInt(perfMetricSeriesCSVList.get(n).getValue())/1024*100)/ossVm.getVmemory();
ossVm.setMemoryUsage((int)memoryUsage);
}
}else if (null != groupName && groupName.equals("cpu")){
if (strName.equals("usagemhz")){
ossVm.setCpuUsage(Integer.parseInt(perfMetricSeriesCSVList.get(n).getValue()));
}
}
}
}
return ossVm;
} catch (Exception e) {
e.printStackTrace();
}
return ossVm;
}
其中一部分使用的是自定义的类,主要用来记录查询cpu利用率和内存利用率的代码
附官方API地址