XenAPI中查詢虛擬機器或主機的CPU、記憶體等一些資訊
因為公司需要做這方面的介面所以自己在網上查了好久才發現方法做了出來,其中遇到了不少的坑寫一下以便以後再次遇到。
1、首先在xenAPI給的一些介面中雖然有關於這方面的介面但是現在的版本不能直接得到,如果直接呼叫VM_guest_metrics中的方法返回的資料是空的。
3、說一下獲得的過程:
大致分三步 1、首先登陸要獲取的伺服器 2、得到RRD中的資料 3、解析資料
剛開始遇到最大的坑 就是登入認證不通過 原因在獲取登入伺服器 session_id是用session.handle處理一下就OK了基本上就沒什麼問題了。
python的參考程式碼
#!/usr/bin/python # Example code for reading RRDs # Contact: Jon Ludlam (
[email protected]) # # Mostly this script is taken from perfmon, by Alex Zeffert # import XenAPI import urllib from xml.dom import minidom from xml.parsers.expat import ExpatError import time # Per VM dictionary (used by RRDUpdates to look up column numbers by variable names) class VMReport(dict): """Used internally by RRDUpdates""" def __init__(self, uuid): self.uuid = uuid # Per Host dictionary (used by RRDUpdates to look up column numbers by variable names) class HostReport(dict): """Used internally by RRDUpdates""" def __init__(self, uuid): self.uuid = uuid class RRDUpdates: """ Object used to get and parse the output the http://localhost/rrd_udpates?... """ def __init__(self): # params are what get passed to the CGI executable in the URL self.params = dict() self.params['start'] = int(time.time()) - 1000 # For demo purposes!#開始獲取資料的時間 self.params['host'] = 'true' # include data for host (as well as for VMs) self.params['cf'] = 'AVERAGE' # consolidation function, each sample averages 12 from the 5 second RRD #可以獲取max average min 型別的資料 self.params['interval'] = '60'#獲取資料的間隔 def get_nrows(self): return self.rows def get_vm_list(self): return self.vm_reports.keys() def get_vm_param_list(self, uuid): report = self.vm_reports[uuid] if not report: return [] return report.keys() def get_vm_data(self, uuid, param, row): report = self.vm_reports[uuid] col = report[param] return self.__lookup_data(col, row) def get_host_uuid(self): report = self.host_report if not report: return None return report.uuid def get_host_param_list(self): report = self.host_report if not report: return [] return report.keys() def get_host_data(self, param, row): report = self.host_report col = report[param] return self.__lookup_data(col, row) def get_row_time(self,row): return self.__lookup_timestamp(row) # extract float from value (<v>) node by col,row def __lookup_data(self, col, row): # Note: the <rows> nodes are in reverse chronological order, and comprise # a timestamp <t> node, followed by self.columns data <v> nodes node = self.data_node.childNodes[self.rows - 1 - row].childNodes[col+1] return float(node.firstChild.toxml()) # node.firstChild should have nodeType TEXT_NODE # extract int from value (<t>) node by row def __lookup_timestamp(self, row): # Note: the <rows> nodes are in reverse chronological order, and comprise # a timestamp <t> node, followed by self.columns data <v> nodes node = self.data_node.childNodes[self.rows - 1 - row].childNodes[0] return int(node.firstChild.toxml()) # node.firstChild should have nodeType TEXT_NODE def refresh(self, session, override_params = {}): params = override_params params['session_id'] = session params.update(self.params) paramstr = "&".join(["%s=%s" % (k,params[k]) for k in params]) # this is better than urllib.urlopen() as it raises an Exception on http 401 'Unauthorised' error # rather than drop into interactive mode sock = urllib.URLopener().open("http://localhost/rrd_updates?%s" % paramstr) xmlsource = sock.read() sock.close() xmldoc = minidom.parseString(xmlsource) self.__parse_xmldoc(xmldoc) # Update the time used on the next run self.params['start'] = self.end_time + 1 # avoid retrieving same data twice def __parse_xmldoc(self, xmldoc): # The 1st node contains meta data (description of the data) # The 2nd node contains the data self.meta_node = xmldoc.firstChild.childNodes[0] self.data_node = xmldoc.firstChild.childNodes[1] def lookup_metadata_bytag(name): return int (self.meta_node.getElementsByTagName(name)[0].firstChild.toxml()) # rows = number of samples per variable # columns = number of variables self.rows = lookup_metadata_bytag('rows') self.columns = lookup_metadata_bytag('columns') # These indicate the period covered by the data self.start_time = lookup_metadata_bytag('start') self.step_time = lookup_metadata_bytag('step') self.end_time = lookup_metadata_bytag('end') # the <legend> Node describes the variables self.legend = self.meta_node.getElementsByTagName('legend')[0] # vm_reports matches uuid to per VM report self.vm_reports = {} # There is just one host_report and its uuid should not change! self.host_report = None # Handle each column. (I.e. each variable) for col in range(self.columns): self.__handle_col(col) def __handle_col(self, col): # work out how to interpret col from the legend col_meta_data = self.legend.childNodes[col].firstChild.toxml() # vm_or_host will be 'vm' or 'host'. Note that the Control domain counts as a VM! (cf, vm_or_host, uuid, param) = col_meta_data.split(':') if vm_or_host == 'vm': # Create a report for this VM if it doesn't exist if not self.vm_reports.has_key(uuid): self.vm_reports[uuid] = VMReport(uuid) # Update the VMReport with the col data and meta data vm_report = self.vm_reports[uuid] vm_report[param] = col elif vm_or_host == 'host': # Create a report for the host if it doesn't exist if not self.host_report: self.host_report = HostReport(uuid) elif self.host_report.uuid != uuid: raise PerfMonException, "Host UUID changed: (was %s, is %s)" % (self.host_report.uuid, uuid) # Update the HostReport with the col data and meta data self.host_report[param] = col else: raise PerfMonException, "Invalid string in <legend>: %s" % col_meta_data def main(): xapi = XenAPI.xapi_local(); xapi.login_with_password("","") session=xapi._session rrd_updates = RRDUpdates() rrd_updates.refresh(session,{}) for uuid in rrd_updates.get_vm_list(): print "Got values for VM: "+uuid for param in rrd_updates.get_vm_param_list(uuid): print "param: "+param data="" for row in range(rrd_updates.get_nrows()): data=data+"(%d,%f) " % (rrd_updates.get_row_time(row), rrd_updates.get_vm_data(uuid,param,row)) print data main()
相關推薦
XenAPI中查詢虛擬機器或主機的CPU、記憶體等一些資訊
因為公司需要做這方面的介面所以自己在網上查了好久才發現方法做了出來,其中遇到了不少的坑寫一下以便以後再次遇到。 1、首先在xenAPI給的一些介面中雖然有關於這方面的介面但是現在的版本不能直接得到,如果直接呼叫VM_guest_metrics中的方法返回的資料是空的。
#Centos7.4#Linux虛擬機器KVM配置CPU、記憶體
【修改kvm虛擬機器的資源大小cpu、記憶體、硬碟】 # virsh list --all Id Name State-------------------------------------
VMware中Linux虛擬機器掛載主機共享資料夾的方法
注意:要在主機與虛擬機器中設定共享資料夾,需要安裝VMware Tools或open-vm-tools工具。open-vm-tools可能不能自動掛載共享資料夾。自動掛載點是“/mnt/hgfs”。 1、進入VMware選單欄中的虛擬機器設定選項——共享資料夾設定中新增主機中用來給客戶機共享的目錄。
win10 Hyper_v中Ubuntu虛擬機器和主機共享檔案
具體步驟如下: 計算機管理 磁碟管理 建立VHD(右鍵) 選擇VHD檔案儲存位置(瀏覽) 設定虛擬硬碟引數 選擇虛擬硬碟格式(VHD和VHDX都行) 虛擬硬碟型別(固定大小和動態
虛擬機器一覽——VMware Workstation、vSphere等
我們都知道,虛擬化技術目前有基於虛擬機器和容器兩種,前者已經有40多年的歷史,非常的成熟。接下來我們就看一看常用的虛擬機器技術。 虛擬機器又分為兩種,一種是直接安裝在裸機上,另一種是安裝在作業系統上。 1、裸機上的虛擬機器: Xen和VMware vsphere是可以直
將 Oracle VirtualBox 中執行的虛擬機器匯入 VMware Fusion、Workstation 或 Player
1、從virtualbox種匯出電腦為 .ova格式映象 要匯入 Oracle VirtualBox 中執行的虛擬機器,必須將該虛擬機器從 VirtualBox 匯出到開放虛擬化格式存檔( .ova 檔案), 然後再將此檔案匯入 VMware Fusion、Workstation 或
window10系統中vmware虛擬機器mac在安裝vmwareTools後共享檔案消失怎麼查詢
這些前提是已在虛擬機器_設定_選項中啟動共享檔案並新增路徑下,準確的說是找不到共享檔案,這時候你隱藏所有開啟的應用,在finder視窗中選擇前往選項卡下邊的電腦按鈕就可以看到下圖共享檔案就出現了(vmware shared folders)如有其他問題可提出疑問(非我所能,
【已解決】Android studio中ADB啟動失敗,導致找不到虛擬機器或真機
adb server version (31) doesn't match this client (36); killing... error: could not install *smartsocket* listener: cannot bind to 127.0.0.1:5037: 通常每個套接字
vmware中的Linux虛擬機器連通主機與外網
本例中使用的是red hat 6.71.開啟VMware ,開啟“編輯”--“虛擬網路編輯器”,選擇“vmnet8 NAT 模式”2.然後分別設定NAT引數與DHCP引數,NAT閘道器ip設定為子網ip末尾改成2.DHCP按系統預設值設定即可。3.在建立的虛擬機器中設定“點選
openstack中有關虛擬機器cpu繫結總結
The flavor extra specs will be enhanced to support twonew parameters hw:cpu_policy=shared|dedicated hw:cpu_threads_policy=avoid|separate|isolate|preferIf
virtualbox中虛擬機器和主機之間剪貼簿共享
將VBoxGuestAdditions_4.3.12.iso檔案載入到虛擬機器裡的虛擬光碟機,然後進入虛擬系統裡,在裡面開啟虛擬光碟機,然後執行光碟機或者開啟光碟機執行檔案VBoxLinuxAdditions.run
【Azure Developer】通過Azure提供的Azue Java JDK 查詢虛擬機器的CPU使用率和記憶體使用率
問題描述 在Azure上建立虛擬機器(VM)後,在門戶上可以檢視監控指標(Metrics),如CPU Usage,Memory,Disk I/O等。那如何通過Java 程式碼獲取到這些指標呢? 關於VM 的記憶體使用率,虛擬機器本身並沒有提供這個指標,需要開啟診斷後去Azure Storage表中獲取,欄位
區域網訪問電腦中VMware虛擬機器
場景 你在自己的桌上型電腦或筆記本中使用VMware Workstation搭建了一個虛擬機器系統,如Debian、Fedora等Linux系統。現在你希望使用區域網中另一臺電腦訪問你電腦上的虛擬機器系統,怎麼辦呢? 措施 這是需要使用VMware Workstation提供的NAT功能
VMware虛擬機器共享主機無線網路聯網的設定方法
本人電腦的設定是把網路1和網路2同時設定為nat模式,就可虛擬機器同時上網 https://blog.csdn.net/guoduhua/article/details/51898519 一、在主機上操作部分 1,在裝置管理器中看是否有這個Vmnet8,如果沒有重新修復安裝VMware。 2
VirtualBox 虛擬機器和宿主機之間的網路連線,虛擬機器和主機都可以上網
本篇目的:實現了宿主機與虛擬機器,虛擬機器與虛擬機器互通,宿主機可上網,虛擬機器可上網 第一步:VirtualBox安裝centos7 第一步比較簡單,本篇就不多贅述,本篇重點在於對虛擬機器網路進行配置,下圖是安裝好的centos:
VMware中linux虛擬機器找不到VMware Tools的壓縮包
說在前面 裝完CentOS 感覺桌面解析度太小,需要裝 VMware Tools。 移除CD驅動 右鍵虛擬機器,找到安裝VMware Tools,但是桌面死活找不到安裝包,只有一個 Vmware Tools虛擬光碟機. 檢視原因是因為在安裝 CentOS的時候安裝
虛擬機器與主機互相ping通且共享資料夾,且虛擬機器連線外網
在網上查詢了一天,感覺內容不是很完整,所以經過兩天無數次的失敗與摸索,終於完成了主機與虛擬機器互相ping通、共享資料夾且能連線外網,開心ing。虛擬機器版本為VirtualBox,linux版本為centos7。 1、虛擬機器與主機互相ping
啟動vmware中的虛擬機器的時候,提示Failed to lock the file
http://www.vixual.net/blog/archives/842 VMware Server 當掉後重新啟動 Guest OS 時,出現 cannot open the disk '*.vmdk' or one of the snapshot disk is depends on. Rea
虛擬機器與主機之間共享檔案和剪下板的方法
VMware tools是虛擬機器中自帶的一款超級增強工具,這個工具可以使我們使用虛擬機器更加方便,比如說安裝VMware tools之後,我們在虛擬機器和主機之間傳輸檔案可以直接通過拖拽就可完成,又比如說,我們的滑鼠可以在虛擬機器和主機之間自由移動,還可以實現剪下板共享。接下來,介紹一下如何安裝V
linux CentOS 7虛擬機器(僅主機模式) 安裝編譯Nginx 流程二(安裝編譯環境)
在上一篇進行了網路的配置:linux CentOS 7虛擬機器(僅主機模式) 安裝編譯Nginx 流程一(網路配置) 有了網路就好辦事了,要安裝Nginx就要有安裝包,安裝包可以到官網下載 我用的穩定版本的 nginx-1.14.0.tar.gz 用上傳工具上傳到CentOS上(工具網上