一種獲取Linux虛擬機內部日志的方法
【技術領域】
[0001]本發明涉及云計算管理技術領域,特別是指一種獲取Linux虛擬機內部日志的方法。
【背景技術】
[0002]在云計算環境下,虛擬機被廣泛使用,對于虛擬機的維護要求越來越高,當虛擬機出現故障,需要進行故障排查時,通常需要查看虛擬機內部日志,一般只能通過跟客戶獲取虛擬機用戶名及密碼,進入虛擬機內部查看日志,根據日志排查故障。
[0003]上述方法存在以下弊端:
[0004]1、對于客戶數據安全沒有保障,需要跟客戶獲取用戶名密碼,才能進入虛擬機內部;
[0005]2、排查所花時間較長,需要獲取密碼及進入虛擬機內部。
【發明內容】
[0006]本發明解決的技術問題在于提供一種獲取Linux虛擬機內部日志的方法,解決傳統方法存在的不足,保障客戶虛擬機數據安全,提高運維效率,為虛擬機運維提供一種可行的解決方案。
[0007]本發明解決上述技術問題的技術方案是:
[0008]所述的方法包括如下步驟:
[0009]步驟1:登錄云平臺管理端,選擇要查看日志的虛擬機
[0010]步驟2:輸入查詢條件,查詢虛擬機系統日志
[0011]步驟3:查詢命令發送到虛擬機客戶端
[0012]步驟4:虛擬機客戶端讀取當天系統日志,返回結果。
[0013]所述的云平臺管理端,是統一的虛擬化管理平臺,能夠對外提供統一的管理接P ;
[0014]所述的日志,是虛擬機內部日志,包含linux的/var/log/messages、/var/log/syslog、/var/log/user.log、/var/log/auth.log 四個文件;所述的 /var/log/messages 包括整體系統信息,其中也包含系統啟動期間的日志;所述的/var/log/syslog只記錄警告信息,常常是系統出問題的信息;所述/var/log/user.log記錄所有等級用戶信息的日志;所述的/var/log/auth.log包含系統授權信息,包括用戶登錄和使用的權限機制等。
[0015]所述的輸入查詢條件,是指需要從虛擬機內部要獲取的日志類型及時間。
[0016]所述的虛擬機客戶端,是安裝在虛擬機內部的程序,通過串口通信協議與云平臺管理端通信;所述的串口通信協議,指串口按位(bit)發送和接收字節。
[0017]本發明的方法保障客戶數據安全,無需獲取虛擬機用戶名密碼;具有通用性,針對Linux操作系統都能使用;簡單快捷,無需進入虛擬機內部即可查看最新系統日志。
【附圖說明】
[0018]下面結合附圖對本發明進一步說明:
[0019]圖1為本發明的流程圖;
[0020]圖2為本發明的技術原理圖;
【具體實施方式】
[0021]如圖1、2所示,本發明具體實施過程如下:
[0022]1、登錄云平臺管理端,選擇要查看日志的虛擬機;
[0023]2、輸入查詢條件,查詢虛擬機系統日志
[0024]/**
[0025]^searchVmEvent查詢虛擬機日志.
[0026]*@param beginTime 日志開始時間
[0027]*@param endTime 日志結束時間
[0028]^Oparam eventType日志類型:錯誤、告警、正常
[0029]*@param evList 查詢返回列表
[0030]*/
[0031]public ListsearchVmEvent(Date beginTime, Date endTime, StringeventType)
[0032]{
[0033]ListevList = new ArrayList();
[0034]evList = gComputerService.searchVmEvent(beginTime? endTime,eventType);
[0035]return evList ;
[0036]}
[0037]3、查詢命令發送到虛擬機客戶端;
[0038]windows系統日志的地址存在項目的address, properties配置里面
[0039]addressl = /var/log/messages
[0040]address2 = /var/log/syslog
[0041]address3 = /var/log/user.log
[0042]address3 = /var/log/auth.log
[0043]在xml配置文件中,導入address, properities文件
[0044]〈bean id=" propertyConf igurer!! class =" org.springframewornf ig.PropertyPlaceholderConfigurer" >
[0045]〈property name = " ignoreResourceNotFound" value = " true" />
[0046]〈property name = " locat1ns" >
[0047]〈list〉
[0048]/WEB-1NF/address.properties
[0049]〈/list〉
[0050]
[0051]
[0052]〈bean id = " proxyNameclass = " xxx.xxx.xxx.ProxyClass>
[0053] {addressl}〈/value〉
[0054]
[0055]4、虛擬機客戶端讀取當天系統日志,返回結果;
[0056]/*void Read—event (os—el*el)讀取系統的日志詳情
[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—FORWARDS—READ|EVENTL0G—SEQUENT IAL—READ, 0,
[0090]el_>er,BUFFER—SIZE-1,&read,&needed))
[0091]{
[0092]while (read>0)
[0093]{
[0094]/氺We need to initialize every variable before the loop氺/
[0095]//得到事件的類型
[0096]event_category = el—GetCategory(el_>er_>EventType);
[0097]//得到事件來源
[0098]event—sourcename = (LPSTR)((LPBYTE)el->er+sizeof(EVENTL0GREC0RD));
[0099]//得到計算機名
[0100]event_computername = event_sourcename + strlen (event_sourcename)+1 ;
[0101]//給描述信息初始化
[0102]event_descriptive_msg = NULL ;
[0103]/* 初始化 domain/user 尺寸 */
[0104]user—size = 255 ;domain—size = 255 ;
[0105]event—el—domain [0] =