最近一直沒有更新這部分的內容,會利用五一時間完成vcenter這一個系列。
這裏先給大家一本關於vijava開發的書,比較實用。
地址:http://pan.baidu.com/s/1gfkl9mj。密碼:t1y3
有網友評論要數據存儲讀寫速度及延遲之後時間的實現。今天就先介紹關於java實現實時監控vcenter狀態的內容,包括CPU、內存、網絡、存儲等。
在看這篇前如果還是新手,建議先看下我的第一篇 http://www.cnblogs.com/xiaodige/p/6721517.html(vijava基本連接和數據中心信息獲取)
先說一下我之前是怎麼發現,CPU、內存、網絡、存儲等可以監控的內容。我用vsphere client連接vcenter查看客戶端所能監控的屬性.
建議大家在實現功能前,先看下官方文檔關於性能監控的知識。貼上連接vcenter6.0的官方文檔連接。http://pubs.vmware.com/vsphere-60/index.jsp
比如要監控虛擬機的性能信息:首先得保證虛擬機開機,選擇“性能選項”,點擊“圖標選項”,這樣就能看到它所支持的性能監控信息。下面貼圖:
下圖左邊就是該對象具體能監控的信息,右邊就是具體性能,使用率啊等等。
做性能監控這塊,如果不知道具體能監控對象的哪些屬性就打開客戶端看看。下面就貼上具體的java實現代碼。
package com.iking.vmware.performance;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.iking.vmware.bean.PerformanceManage;
import com.iking.vmware.bean.VsphereConst;
import com.iking.vmware.connection.ConnectedVimServiceBase;
import com.iking.vmware.vim25.PerfCounterInfo;
import com.iking.vmware.vim25.PerfEntityMetric;
import com.iking.vmware.vim25.PerfEntityMetricBase;
import com.iking.vmware.vim25.PerfMetricId;
import com.iking.vmware.vim25.PerfMetricIntSeries;
import com.iking.vmware.vim25.PerfMetricSeries;
import com.iking.vmware.vim25.PerfQuerySpec;
import com.iking.vmware.vim25.PerfSampleInfo;
import com.iking.vmware.vim25.mo.Folder;
import com.iking.vmware.vim25.mo.HostSystem;
import com.iking.vmware.vim25.mo.InventoryNavigator;
import com.iking.vmware.vim25.mo.ManagedEntity;
import com.iking.vmware.vim25.mo.PerformanceManager;
/**
* @description 監控統計vcenter所有對象性能數據
* @date 2017年2月9日11:46:35
* @version 1.1
* @author DiWk
*/
public class PerformanceCounter {
private ConnectedVimServiceBase cs = null;
public ConnectedVimServiceBase getCs() {
return cs;
}
public void setCs(ConnectedVimServiceBase cs) {
this.cs = cs;
}
/**
* @description 根據屬性名稱、類型、對象、採集間隔獲取所有的性能數據
* @date 2017年2月8日14:37:58
* @return PerformanceMap 性能數據map對象
* @version 1.1
* @author DiWk
*/
public Map<String, PerformanceManage> getPerfData(String nameInfo, List<String> groupInfo, ManagedEntity mo,
Integer interval) {
Map<String, PerformanceManage> PerformanceMap = null;
Date date = new Date();
Date sTime = new Date(date.getTime() - 24 * 60 * 60 * 1000);
Calendar calBegin = Calendar.getInstance();
calBegin.setTime(sTime);
Calendar calEnd = Calendar.getInstance();
calEnd.setTime(date);
try {
PerformanceMap = new HashMap<String, PerformanceManage>();
if (mo != null) {
PerformanceManager performanceManager = cs.si.getPerformanceManager();
PerfCounterInfo[] cInfo = performanceManager.getPerfCounter();
Map<Integer, PerfCounterInfo> counters = new HashMap<Integer, PerfCounterInfo>();
for (PerfCounterInfo pcInfo : cInfo) {
counters.put(new Integer(pcInfo.getKey()), pcInfo);
}
PerfMetricId[] listpermeid = performanceManager.queryAvailablePerfMetric(mo, null, null, interval);
ArrayList<PerfMetricId> mMetrics = new ArrayList<PerfMetricId>();
if (listpermeid != null) {
for (int index = 0; index < listpermeid.length; ++index) {
if (counters.containsKey(new Integer(listpermeid[index].getCounterId()))) {
mMetrics.add(listpermeid[index]);
}
}
}
PerfQuerySpec qSpec = new PerfQuerySpec();
qSpec.setEntity(mo.getMOR());
qSpec.setMetricId(listpermeid);
qSpec.setStartTime(calBegin);
qSpec.setEndTime(calEnd);
qSpec.setIntervalId(interval);
qSpec.setFormat("normal");
PerfQuerySpec[] arryQuery = { qSpec };
PerfEntityMetricBase[] pValues = performanceManager.queryPerf(arryQuery);
if (pValues == null || pValues.length <= 0) {
return null;
}
PerfSampleInfo[] listperfsinfo = ((PerfEntityMetric) pValues[0]).getSampleInfo();
for (int i = 0; i < pValues.length; i++) {
PerfMetricSeries[] listpems = ((PerfEntityMetric) pValues[i]).getValue();
for (int vi = 0; vi < listpems.length; ++vi) {
PerfCounterInfo pci = (PerfCounterInfo) counters
.get(new Integer(listpems[vi].getId().getCounterId()));
if (pci != null) {
for (String Info : groupInfo) {
PerformanceManage performanceManage = new PerformanceManage();
performanceManage.setStartTime(listperfsinfo[0].getTimestamp().getTime());
performanceManage
.setEndTime((listperfsinfo[listperfsinfo.length - 1]).getTimestamp().getTime());
if (pci.getNameInfo().getKey().equalsIgnoreCase(nameInfo)
&& pci.getGroupInfo().getKey().equalsIgnoreCase(Info)) {
if (listpems[vi] instanceof PerfMetricIntSeries) {
PerfMetricIntSeries val = (PerfMetricIntSeries) listpems[vi];
long[] lislon = val.getValue();
List<Long> asList = new ArrayList<Long>();
for (Long k : lislon) {
asList.add(k);
}
performanceManage.setPerformanceValues(asList);
PerformanceMap.put(Info, performanceManage);
}
}
}
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return PerformanceMap;
}
/** main測試方法 */
public static void main(String[] args) throws Exception {
PerformanceCounter performanceCounter2 = new PerformanceCounter();
ConnectedVimServiceBase cs = new ConnectedVimServiceBase();
cs.connect("192.168.1.253", "[email protected]", "Iking!@#456");
performanceCounter2.setCs(cs);
Folder rootFolder = cs.si.getRootFolder();
HostSystem dataCenter = (HostSystem) new InventoryNavigator(rootFolder)
.searchManagedEntity(VsphereConst.HOSTSYSTEM, "192.168.1.254");
List<String> listNm = new ArrayList<String>();
listNm.add("datastore");
Map<String, PerformanceManage> perfData = performanceCounter2.getPerfData("write", listNm, dataCenter, 20);
PerformanceManage performanceManage = perfData.get("datastore");
List<Long> performanceValues = performanceManage.getPerformanceValues();
System.out.println(performanceValues.toString());
}
}