一种获取Windows虚拟机内部日志的方法

文档序号:9581530阅读:1019来源:国知局
一种获取Windows虚拟机内部日志的方法
【技术领域】
[0001]本发明涉及云计算管理技术领域,特别是指一种获取Windows虚拟机内部日志的方法。
【背景技术】
[0002]在云计算环境下,虚拟机被广泛使用,对于虚拟机的维护要求越来越高。当虚拟机出现故障,需要进行故障排查时,通常需要查看虚拟机内部日志,一般只能通过跟客户获取虚拟机用户名及密码,进入虚拟机内部查看日志,根据日志排查故障。
[0003]上述方法存在以下弊端:
[0004]1、对于客户数据安全没有保障,需要跟客户获取用户名密码,才能进入虚拟机内部;
[0005]2、排查所花时间较长,需要获取密码及进入虚拟机内部。

【发明内容】

[0006]本发明解决的技术问题在于提供一种获取Windows虚拟机内部日志的方法,解决传统方法存在的不足,保障客户虚拟机数据安全,提高运维效率,为虚拟机运维提供一种可行的解决方案。
[0007]本发明解决上述技术问题的技术方案是:
[0008]所述的方法包括如下步骤:
[0009]步骤1:登录云平台管理端,选择要查看日志的虚拟机;
[0010]步骤2:输入查询条件,查询虚拟机系统日志;
[0011]步骤3:查询命令发送到虚拟机客户端;
[0012]步骤4:虚拟机客户端读取当天系统日志,返回结果。
[0013]所述的云平台管理端,是统一的虚拟化管理平台,能够对外提供统一的管理接P ;
[0014]所述的日志,是虚拟机内部日志,包含Windows的SecEvent.Evt、SysEvent.Evt、AppEvent.Evt三个日志文件;所述的SysEvent.Evt包括整体系统信息,其中也包含系统启动期间的日志;所述SecEvent.Evt记录所有等级用户信息的日志,包含系统授权信息,包括用户登录和使用的权限机制等;所述的AppEvent.Evt记录系统应用所产生的日志。
[0015]所述的输入查询条件,是指需要从虚拟机内部要获取的日志类型及时间。
[0016]所述的虚拟机客户端,是安装在虚拟机内部的程序,通过串口通信协议与云平台管理端通信;所述的串口通信协议,指串口按位(bit)发送和接收字节。
[0017]本发明的方法保障客户数据安全,无需获取虚拟机用户名密码;具有通用性,针对Windows操作系统都能使用;简单快捷,无需进入虚拟机内部即可查看最新系统日志。
【附图说明】
[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 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、查询命令发送到虚拟机客户端;
[0038]windows系统日志的地址存在项目的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、虚拟机客户端读取当天系统日志,返回结果;
[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_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
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1