vmware虛擬機監控數據


在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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM