一種獲取Windows虛擬機內(nèi)部日志的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及云計算管理技術(shù)領(lǐng)域,特別是指一種獲取Windows虛擬機內(nèi)部日志的方法。
【背景技術(shù)】
[0002]在云計算環(huán)境下,虛擬機被廣泛使用,對于虛擬機的維護要求越來越高。當虛擬機出現(xiàn)故障,需要進行故障排查時,通常需要查看虛擬機內(nèi)部日志,一般只能通過跟客戶獲取虛擬機用戶名及密碼,進入虛擬機內(nèi)部查看日志,根據(jù)日志排查故障。
[0003]上述方法存在以下弊端:
[0004]1、對于客戶數(shù)據(jù)安全沒有保障,需要跟客戶獲取用戶名密碼,才能進入虛擬機內(nèi)部;
[0005]2、排查所花時間較長,需要獲取密碼及進入虛擬機內(nèi)部。
【發(fā)明內(nèi)容】
[0006]本發(fā)明解決的技術(shù)問題在于提供一種獲取Windows虛擬機內(nèi)部日志的方法,解決傳統(tǒng)方法存在的不足,保障客戶虛擬機數(shù)據(jù)安全,提高運維效率,為虛擬機運維提供一種可行的解決方案。
[0007]本發(fā)明解決上述技術(shù)問題的技術(shù)方案是:
[0008]所述的方法包括如下步驟:
[0009]步驟1:登錄云平臺管理端,選擇要查看日志的虛擬機;
[0010]步驟2:輸入查詢條件,查詢虛擬機系統(tǒng)日志;
[0011]步驟3:查詢命令發(fā)送到虛擬機客戶端;
[0012]步驟4:虛擬機客戶端讀取當天系統(tǒng)日志,返回結(jié)果。
[0013]所述的云平臺管理端,是統(tǒng)一的虛擬化管理平臺,能夠?qū)ν馓峁┙y(tǒng)一的管理接P ;
[0014]所述的日志,是虛擬機內(nèi)部日志,包含Windows的SecEvent.Evt、SysEvent.Evt、AppEvent.Evt三個日志文件;所述的SysEvent.Evt包括整體系統(tǒng)信息,其中也包含系統(tǒng)啟動期間的日志;所述SecEvent.Evt記錄所有等級用戶信息的日志,包含系統(tǒng)授權(quán)信息,包括用戶登錄和使用的權(quán)限機制等;所述的AppEvent.Evt記錄系統(tǒng)應用所產(chǎn)生的日志。
[0015]所述的輸入查詢條件,是指需要從虛擬機內(nèi)部要獲取的日志類型及時間。
[0016]所述的虛擬機客戶端,是安裝在虛擬機內(nèi)部的程序,通過串口通信協(xié)議與云平臺管理端通信;所述的串口通信協(xié)議,指串口按位(bit)發(fā)送和接收字節(jié)。
[0017]本發(fā)明的方法保障客戶數(shù)據(jù)安全,無需獲取虛擬機用戶名密碼;具有通用性,針對Windows操作系統(tǒng)都能使用;簡單快捷,無需進入虛擬機內(nèi)部即可查看最新系統(tǒng)日志。
【附圖說明】
[0018]下面結(jié)合附圖對本發(fā)明進一步說明:
[0019]圖1為本發(fā)明的流程圖;
[0020]圖2為本發(fā)明的技術(shù)原理圖。
【具體實施方式】
[0021]如圖1、2所示,本發(fā)明具體實施過程如下:
[0022]1、登錄云平臺管理端,選擇要查看日志的虛擬機;
[0023]2、輸入查詢條件,查詢虛擬機系統(tǒng)日志
[0024]/**
[0025]^searchVmEvent查詢虛擬機日志.
[0026]*@param beginTime 日志開始時間
[0027]*@param endTime 日志結(jié)束時間
[0028]^Oparam eventType日志類型:錯誤、告警、正常
[0029]*@param evList 查詢返回列表
[0030]*/
[0031]public List<VmEvent>searchVmEvent(Date beginTime, Date endTime, StringeventType)
[0032]{
[0033]List<VmEvent>evList = new ArrayList<VmEvent>();
[0034]evList = gComputerService.searchVmEvent(beginTime? endTime,eventType);
[0035]return evList ;
[0036]}
[0037]3、查詢命令發(fā)送到虛擬機客戶端;
[0038]windows系統(tǒng)日志的地址存在項目的address, properties配置里面
[0039]addressl = C:\WIND0WS\system32\config\AppEvent.Evt
[0040]address2 = C:\WIND0WS\System32\config\SecEvent.Evt
[0041]address3 = C:\WIND0WS\system32\config\SysEvent.Evt
[0042]在xml配置文件中,導入address, properities文件
[0043]〈beanid=〃 propertyConfigurer!!
[0044]class = " org.springframewornfig.PropertyPlaceholderConfigurer" >
[0045]〈property name = " ignoreResourceNotFound" value = " true" />
[0046]〈property name = " locat1ns" >
[0047]〈list〉
[0048]<value>/WEB-1NF/address.properties</value>
[0049]〈/list〉
[0050]</property)
[0051]</bean>
[0052]〈bean id = " proxyNameclass = " xxx.xxx.xxx.ProxyClass>
[0053]<value$amp ;> {addressl}〈/value〉
[0054]</bean>
[0055]4、虛擬機客戶端讀取當天系統(tǒng)日志,返回結(jié)果;
[0056]/*void Read—event (os—el*el)讀取系統(tǒng)的日志詳情
[0057]^Reads the event log.
[0058]*/
[0059]void Read—event(os_el*el, int printit)
[0060]{
[0061]DWORD nstr ;
[0062]DWORD user—size ;
[0063]DWORD domain—size ;
[0064]DWORD read,needed ;
[0065]int size—left ;
[0066]int str—size ;
[0067]char*mbuffer[BUFFER—SIZE];
[0068]LPSTR sstr = NULL ;
[0069]char*tmp—str = NULL ;
[0070]char^event—category ;// 事件類型
[0071]char^event—sourcename ;// 事件來源
[0072]char^event—computername ;// 事件計算機名
[0073]char*event—descriptive—msg ;// 事件描述
[0074]char event—el—user [257] ;//事件用戶
[0075]char event—el—domain [257] ;//事件域
[0076]char el—string
[1025];
[0077]char final—out—msg
[1024] ;// 最后輸出的信息
[0078]LPSTR el—sstring[57];
[0079]/氺Er must point to the mbuffer木/
[0080]el->er = (EVENTL0GREC0RD*)&mbuffer ;
[0081]/^Zeroing the last values*/
[0082]el_string
[1024] =' \0';
[0083]event—el—user [256] = ' \0f ;
[0084]event—el—domain [256] = ' \0f ;
[0085]final—out—msg
[1023] = ' \0f ;
[0086]el—sstring[56] = NULL ;
[0087]/^Reading the event log*/
[0088]while(ReadEventLog(el_>h,
[0089]EVENTL0G_F0RWARDS_READ|EVENTLOG_SEQUENTIAL_READ?
[0090]0,
[0091]el_>er,BUFFER—SIZE-1,&read,&needed))
[0092]{
[0093]while (read>0)
[0094]{
[0095]/*We need to initialize every variable before the loop*///得到事件的類型
[0096]event—category = el_GetCategory (el->er->EventType) ;// 得到事件來源
[0097]event—sourcename = (LPSTR)((LPBYTE)el->er+sizeof(EVENTL0GREC0RD)) ;//得到計算機名
[0098]event—computername = event—sourcename+strlen(event—sourcename)+1 ;// 給描述信息初始化
[0099]event—descriptive—msg = NULL ;
[0100]/* 初始化 domain/user 尺寸 */
[0101]user—size = 255 ;domain—size = 255 ;
[0102]event—el—domain