Vmware Vsphere WebService之vijava 開發(二)一性能信息的採集(實時監控)

最近一直沒有更新這部分的內容,會利用五一時間完成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());
    }
}

原文地址:https://www.cnblogs.com/xiaodige/p/6774413.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章