文章出處

在vsphere產品中內建一個監控所有虛機包括主機資源的插件,叫做vcenter servcie status,這個插件的主要功能是記錄當前虛擬機資源的cpu、硬盤、內存和網絡等相關信息。通過它可以查看24小時、周年月性能情況。而微軟則需要另外安裝scom產品。

那么,它究竟是如何工作的,如何記錄數據的,24小時的數據你可以看到sql server客戶端daily后綴的視圖,我們可以看到它是每5分鐘一個點,它的記錄24小時以內的數據,那么每5分鐘插入一段數據,再刪除一段過期數據,每周的數據在weekly后綴的視圖可以看到,它記錄的是每隔半小時的點,以此類推月年的數據間隔越長。vsphere所采用的是utc時間,比中國所在東八區格林威治時間晚8個小時。不過在api中時間為格林威治時間,不用作轉換。

當然我們可以直接通過sql語句去拿vsphere的數據獲取性能數據,這樣繞過api更直接快捷靈活,不過這里可能要手動配置vshpere數據庫連接,通過api沒有發現有接口可以拿到odbc的連接,那么通過第二種方法,就是通過api,貌似有點復雜,效率上肯定要低于直接sql,不過這樣不用考慮數據庫相關問題。

1

 

 1 private void GetPerformance()
 2 {
 3     DateTime edt = DateTime.Now;
 4     DateTime sdt = DateTime.Now.AddHours(-24);
 5     ManagedObjectReference pmMor = util.getConnection().ServiceContent.perfManager;
 6     ManagedObjectReference vmMor = util.getServiceUtil().getEntityByName("VirtualMachine", "linux13");
 7 
 8     //---拉取系統監控項目---
 9     List<PerfCounterInfo> perfCounterList = new List<PerfCounterInfo>();
10     PerfCounterInfo[] perfCounterInfos = (PerfCounterInfo[])util.getServiceUtil().GetDynamicProperty(pmMor, "perfCounter");
11     perfCounterInfos.ToList().ForEach(x =>
12     {
13         if (x.groupInfo.key.Equals("cpu") && x.nameInfo.key.Equals("usage") && x.rollupType == PerfSummaryType.average)
14         {
15             perfCounterList.Add(x);
16             return;
17         }
18     });
19     //---當前虛擬機條件內所有監控類型---
20     List<PerfMetricId> perfMetricIdList = new List<PerfMetricId>();
21     PerfMetricId[] perfMetricIds = util.getConnection().Service.QueryAvailablePerfMetric(pmMor, vmMor, sdt, true, edt, true, 300, true);
22     perfMetricIds.ToList().ForEach(x =>
23     {
24         if (perfCounterList.Where(item => item.key.Equals(x.counterId)).Count() > 0)
25         {
26             perfMetricIdList.Add(x);
27         }
28     });
29     PerfQuerySpec spec = new PerfQuerySpec()
30     {
31         metricId = perfMetricIdList.ToArray(),
32         entity = vmMor,
33         startTime = sdt,
34         endTime = edt,
35         startTimeSpecified = true,
36         endTimeSpecified = true,
37         //---時間間隔5分鐘---
38         intervalId = 300,
39         intervalIdSpecified = true,
40     };
41      PerfEntityMetricBase[] metrics = util.getConnection().Service.QueryPerf(pmMor, new PerfQuerySpec[] { spec });
42 }

 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()