系统日志获取方法和装置与流程

文档序号:11971199阅读:192来源:国知局
系统日志获取方法和装置与流程
本发明实施例涉及计算机系统应用技术领域,尤其涉及一种系统日志获取方法和装置。

背景技术:
为使计算机的可靠性不断提高,各类系统通常配设有记录系统中硬件、软件和系统问题的系统日志,同时该系统日志还可以记录系统中发生的事件,则当计算机系统出现故障,用户可以通过系统日志来检查故障原因,为了在系统运行时可及时记录系统的运行状况,上述用于存储系统日志的存储空间所对应的存储地址被配置在内核镜像文件中,具体的,图1为现有技术中内核镜像文件的结构示意图。如图1所示,内核镜像文件包括代码段(.text),初始化数据段(.date)和未初始化的数据段(.bss),上述存储地址在内核镜像文件初始配置时被编译至内核镜像文件的未初始化数据段内,则系统运行时,可根据内核镜像文件中系统日志的存储地址将系统的运行状况,即系统日志存储在存储地址对应的存储空间中,由此也可以理解为系统日志放置在内核镜像文件的未初始化数据段内。系统的启动是通过加载内核镜像文件至系统内存并运行该内核镜像文件,以完成系统的启动。图2为现有技术中系统内存加载内核镜像文件的示意图。如图2所示,在由系统的重启时刻开始的启动过程中,是将内核镜像文件以压缩文件的形式加载到系统内存的镜像文件区,该压缩文件中仅包括内核镜像文件的代码段和初始化数据段,而内核镜像文件的未初始化数据段直接加载至系统内存中镜像文件区的对应位置;在系统内存中,用于加载未初始化数据段的位置之前,存在一段用于加载解压后的内核镜像文件的加载空间,即解压文件加载区;该解压文件加载区用于放置解压后的代码段和初始化数据段,即当上述压缩文件被解压后,则在系统内存中便存在如图1所示的内核镜像文件,此时在系统内存中完整的内核镜像文件占用的存储空间为镜像文件区。假设压缩文件直接被加载至解压文件加载区,则解压缩后的代码段和初始化数据段便与压缩文件在解压文件加载区中发生重叠现象,因此在系统的启动过程中,先使压缩文件加载至未初始化数据段所在的位置处,随后将对压缩文件解压后得到的代码段和初始化数据段加载至解压文件加载区,避免了解压缩后的代码段和初始化数据段与压缩文件在解压文件加载区中发生重叠现象,但如此一来,未初始化数据段中的系统日志的存储地址被压缩文件覆盖,且未初始化数据段在系统重启过程中被清零处理,也就是说系统日志会被清除,无法获知当前重启时刻之前系统的运行状况。为获取系统日志,现有技术中通常在用户态(即系统启动过程结束后进入的面向用户的应用空间)时开启守护进程,即在系统正常运行中,该守护进程从系统内存中的内核镜像文件中读取并保存了系统日志,从而即使系统发生重启并且启动过程结束后,用户依然可以查看该守护进程保存的、在系统重启时刻之前的系统日志。但是在用户态时开启守护进程增加了CPU(CentralProcessingUnit,中央处理器)的进程管理负担,加大了系统功耗,降低了计算机的工作性能。

技术实现要素:
本发明实施例提供一种系统日志获取方法和装置,用于在不增加系统功耗的情况下获取系统日志。第一方面,本发明实施例提供一种系统日志获取方法,在系统的当前重启时刻,将内核镜像文件加载到系统内存中的镜像文件区;其中,所述内核镜像文件与系统日志之间具有关联性;在所述当前重启时刻之后的预设时刻,判断所述当前重启是否为非正常重启,若是,则根据所述内核镜像文件与所述系统日志之间的关联性获取所述系统日志,并将所述系统日志存储至系统的预留内存。结合第一方面,在第一实施方式中,在所述系统的当前重启时刻之前,所述方法还包括:在配置所述内核镜像文件时,将所述系统日志的存储地址关联至所述内核镜像文件的初始化数据段;则所述根据内核镜像文件与系统日志之间的关联性获取所述系统日志,包括:从所述内核镜像文件的初始化数据段中获取所述系统日志的存储地址,根据所述系统日志的存储地址从与所述系统日志的存储地址对应的存储空间中获取所述系统日志。结合第一方面,在第二实施方式中,所述预留内存位于系统内存中的非镜像文件区。结合第一方面的第二实施方式,在第三实施方式中,所述判断所述重启是否为非正常重启,包括:识别所述预留内存中的复位标识变量的值;根据所述复位标识变量的值判断所述当前重启是否为非正常重启。结合第一方面至第一方面的第三实施方式,在第四实施方式中,所述将所述系统日志存储至系统的预留内存之后,所述方法还包括:运行所述内核镜像文件以启动内核空间;通过所述内核空间启动用户空间,并将所述预留内存存储的系统日志导出至永久存储设备。第二方面,本发明实施例提供一种系统日志获取装置,包括:加载模块,用于在系统的当前重启时刻,将内核镜像文件加载到系统内存中的镜像文件区;其中,所述内核镜像文件与系统日志之间具有关联性;判断模块,用于在所述当前重启时刻之后的预设时刻,判断所述重启状态是否为非正常重启,若是,则触发导出模块;所述导出模块用于根据内核镜像文件与系统日志之间的关联性获取所述系统日志,并将所述系统日志存储至系统的预留内存。结合第二方面,在第一实施方式中,所述系统日志获取装置还包括关联模块,用于在配置所述内核镜像文件时,将所述系统日志的存储地址关联至所述内核镜像文件的初始化数据段;则所述导出模块具体用于从所述内核镜像文件的初始化数据段中获取所述系统日志的存储地址,根据所述系统日志的存储地址从与所述系统日志的存储地址对应的存储空间中获取所述系统日志。结合第二方面,在第二实施方式中,所述预留内存位于系统内存中的非镜像文件区。结合第二方面的第二实施方式,在第三实施方式中,所述判断模块具体用于识别所述预留内存中的复位标识变量的值;还用于根据所述复位标识变量的值判断所述当前重启是否为非正常重启。结合第二方面至第二方面第三实施方式,在第四实施方式中,所述系统日志获取装置还包括:运行模块,用于运行所述内核镜像文件以启动内核空间;通过所述内核空间启动用户空间,触发所述导出模块将所述预留内存存储的系统日志导出至永久存储设备。本发明各实施例中,在当前重启时刻之后的预设时刻,可将系统日志存储至系统内存的预留内存,不用开启专用于获取系统日志的进程便可获取本次重启时刻之前系统详细准确的系统日志,减小了系统功耗。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1为现有技术中内核镜像文件的结构示意图;图2为现有技术中系统内存加载内核镜像文件的示意图;图3为本发明系统日志获取方法实施例一的流程图;图4为本发明实施例一中函数M关于α的函数曲线图;图5为本发明系统日志获取方法实施例二的流程图;图6为本发明系统日志获取装置实施例一的结构图;图7为本发明系统日志获取装置实施例二的结构图。具体实施方式为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。图3为本发明系统日志获取方法实施例一的流程图。本实施例的方法可以由系统日志获取装置来实现,该获取装置可以采用硬件和/或软件方式来实现,优选设置在终端内来完成系统日志的处理。如图3所示,该方法包括:S101,在系统的当前重启时刻,将内核镜像文件加载到系统内存中的镜像文件区。上述内核镜像文件与系统日志之间具有关联性。具体的,终端内系统正常运行直至当前重启时刻之前的过程中,其运行状况被记录在循环缓存中,例如Linux系统中,通过静态数组定义的一段存储空间作为循环缓存,用于存储系统运行状况,所述存储空间中存储的系统运行状况即为系统日志;如图1所示,在现有技术中,循环缓存的物理地址以虚拟化地址的形式被配置在内核镜像文件中的未初始化的数据段(.bss),而在系统重启时刻开始的启动过程中,未初始化数据段会被压缩文件形式的内核镜像文件覆盖,则系统启动完成后,无法获取循环缓存的物理地址,从而用户无法获取本次重启之前的系统过日志,具体如图2所示,在此不再赘述。为了在系统启动的过程中及时获取该系统日志,本发明实施例通过建立内核镜像文件与系统日志的关联性来及时导出系统日志,具体的,由于考虑到内核镜像文件的未初始化数据段中的用于存储系统日志的循环缓存的地址在加载内核镜像文件的过程中会被清除,则在本发明实施例中,选择在内核镜像文件编译并初始化时,使循环缓存的物理地址以虚拟化地址的形式配置至内核镜像文件的初始化数据段,对比现有技术,可理解为本发明实施例中将循环缓存放置在初始化数据段中,以建立内核镜像文件与系统日志的关联性,用于及时导出系统日志。将循环缓存放置在内核镜像文件的初始化数据段中便可确保循环缓存不会被清除,具体原因如下:假设未将循环缓存放置在初始化数据段中,则代码段和初始化数据段的总大小为S,内核镜像文件的压缩率为α,循环缓存的大小为s,则放置了循环缓存的初始化数据段后,压缩初始化数据段和代码段生成的压缩文件的大小为(1-α)(S+s);当大小为(1-α)(S+s)的压缩文件被加载至未初始化数据段后,随即压缩文件被解压至解压文件加载区;若保证初始化数据段中循环缓存不与压缩文件发生重叠,则需要保证(1-α)(S+s)≤S;即满足s/S≤α/(1-α);令M=α/(1-α),则可绘制出函数M关于α的函数曲线图。图4为本发明实施例一中函数M关于α的函数曲线图。如图4所示,压缩率α越大,则M越大;压缩率越小,M就越小,则当α等于0的时候M为0,无法保证s/S≤α/(1-α),则循环缓存与压缩文件发生重叠,使得循环缓存被覆盖,但实际使用中α的值一般都会大于等于0.5,即压缩率不低于50%,将0.5代入α,可得s/S≤1,即在实际中,为使循环缓存与压缩文件不发生重叠,则需保证条件s/S≤1成立,即在未将循环缓存放置在初始化数据段中时,循环缓存的大小小于代码段和初始化数据段的总大小,可以确定的是,实际应用中代码段和初始化数据段的总大小远大于循环缓存的大小,则满足条件(1-α)(S+s)≤S,说明将循环缓存放置在内核镜像文件的初始化数据段中便可确保加载内核镜像文件的过程中,循环缓存不会被清除。需要说明的是,内核镜像文件的结构及内核镜像文件的加载过程与现有技术类似,即内核镜像文件在本实施例中仍然以压缩文件的形式被加载至系统内存的镜像文件区,该压缩文件中仅包括内核镜像文件的代码段和初始化数据段,而内核镜像文件的未初始化数据段直接加载至系统内存中镜像文件区的对应位置,但在本实施例中,与现有技术相区别的是内核镜像文件的初始化数据段中配置有系统日志的存储地址。S102,在当前重启时刻之后的预设时刻,判断当前重启是否为非正常重启,若是,则根据内核镜像文件与系统日志之间的关联性获取系统日志,并将系统日志存储至系统的预留内存。由于上述S101中加载内核镜像文件的形式与现有技术类似,即内核镜像文件是以压缩文件的形式被加载,因此,为保证系统日志可及时导出,S102中所述的预设时刻具体为当前重启时刻之后、对内核镜像文件解压缩之前的一个时刻,也可以理解为,上述S102发生在重启时刻之后、且系统调用解压缩函数对压缩文件形式的内核镜像文件进行解压之前。系统内存中的非镜像文件区中存在预留内存,该预留内存中包含复位标识变量,则系统日志获取装置可根据该复位标识变量的值判断当前重启是否为非正常重启;具体的,当复位标识变量的值为1,则表示当前重启为非正常重启;当复位标识变量的值为0,则表示当前重启为正常重启。系统日志获取装置获知重启为非正常重启,则从内核镜像文件的初始化数据段中获取系统日志的存储地址,根据该系统日志的存储地址从与系统日志的存储地址对应的存储空间中获取系统日志。更具体的,由于如S101中所述,存储上述系统日志的存储空间为循环缓存,而循环缓存的存储地址以虚拟化地址的形式配置至内核镜像文件的初始化数据段,则获取系统日志时,可从内核镜像文件初始化数据段中获取循环缓存的虚拟化地址,并将该虚拟化地址转化为物理地址,根据该物理地址从对应的存储空间获取系统日志,并将该系统日志存储至系统内存中的预留内存,实现在系统启动过程中及时导出系统日志。本实施例中,为了获取系统日志,可在将上述压缩文件形式的内核镜像文件加载到镜像文件区之后,并在将压缩文件形式的内核镜像文件解压之前的预设时刻,将循环缓存中存储的用于记录当前重启时刻之前系统运行状况的系统日志导出至预留内存;不需在当前重启时刻之前、系统正在运行过程中开启专用于获取系统日志的进程,仅在由当前重启时刻开始的启动过程中便可获取当前重启时刻之前系统详细准确的系统日志,减小了CPU的进程管理负担,减低了系统功耗。图5为本发明系统日志获取方法实施例二的流程图。如图5所示,该方法包括:S201,在系统的当前重启时刻,将内核镜像文件加载到系统内存的镜像文件区,内核镜像文件与系统日志之间具有关联性。如S101,此时内核镜像文件在本实施例中仍然以压缩文件的形式被加载至系统内存的镜像文件区。S202,判断当前重启是否为非正常重启,若是,执行S203,否则,执行S204。上述S202的执行时间是在当前重启时刻之后的预设时刻,该预设时刻具体为当前重启时刻之后、对内核镜像文件解压缩之前的一个时刻,也可以理解为,上述S202发生在当前重启时刻之后、系统调用解压缩函数对压缩文件形式的内核镜像文件进行解压之前,系统内存中的非镜像文件区中存在预留内存,且该预留内存中包含复位标识变量。则系统日志获取装置可根据该复位标识变量的值判断当前重启是否为非正常重启。其中,复位标识变量的取值是根据当前重启之前,引起系统当前重启的原因来赋值,并且该赋值保持至由当前重启时刻开始的系统启动过程结束之前;具体的,在第一次重启时刻,内核镜像文件被加载到系统内存中的镜像文件区以使系统实施第一次启动过程,当系统第一次启动过程结束之前,预留内存中的复位标识变量的值被置为1;随后在系统正常运行过程中,若系统根据预设可知原因引起第二次重启时,例如系统调用重启函数、或接收到上报的故障等,则预留内存中的复位标识变量由1置为0,并在由第二次重启时刻开始的系统第二次启动过程中保持为0,当系统第二次启动过程结束,该复位标识变量再次被置为1;若系统根据不可知原因触发第二次重启时,例如异常断电,则预留内存中存储的复位标识变量的值不变,即仍然为1;由此可知,在系统当前重启时刻开始的启动过程中,系统日志获取装置识别预留内存中的复位标识变量的值,根据该复位标识变量的值判断当前重启是否为非正常重启,即识别出复位标识变量的值为1时,则确定当前重启为非正常重启;当复位标识变量的值为0时,则确定当前重启为正常重启。需要说明的是,上述第一次和第二次为相对概念,举例来说,系统在时间点S1被引起重启,且由时间点S1开始的启动过程结束后系统正常运行了一段时间后,在时间点S5再次被引起重启,则将系统在时间点S1被引起的重启为第一次重启,时间点S1为第一次重启时刻,且由时间点S1开始的启动过程为第一次启动;而系统在时间点S5再次被引起的重启为第二次重启,时间点S5为第二次重启时刻,且由时间点S5开始的启动过程为第二次启动;以此类推,可以理解的,若在时间点S5之后的时间点S7系统再次被引起重启,则时间点S5相对于时间点S7为第一次重启时刻,而S7则为第二次重启时刻。S203,将系统日志存储至系统的预留内存。具体的,从内核镜像文件的初始化数据段中获取系统日志的存储地址,根据该系统日志的存储地址从与该系统日志的存储地址对应的存储空间中获取所述系统日志,并存储在系统的预留内存中,具体如S102,在此不再赘述。另外,预留内存中还存储了包含多个成员的结构体,上述复位标识变量即为该结构体中的一个成员,而其他成员用于告知系统日志获取装置该预留内存中系统日志存储的起始地址和结束地址等信息,即预留内存中存储了系统日志后,上述其他成员的负值会相应的发生变化,以准确告知系统日志的获取装置该预留内存中系统日志存储的起始地址和结束地址等信息。将系统日志存储至系统的预留内存之后,系统继续实时启动过程,即继续执行S204。S204,调用解压缩函数。由于在S201时系统的内核镜像文件的代码段和初始化数据段为压缩文件,因此,在S204中调用解压缩函数将该压缩文件进行解压缩,获得完整的,未被压缩的内核镜像文件。S205,运行内核镜像文件以启动内核空间。具体的,系统运行解压缩后的内核镜像文件的内核代码,调用相关启动函数启动内核空间。S206,通过内核空间启动用户空间。上述用户空间即为系统重启完成后,面向用户的应用空间。S207,判断预留内存中是否存储了系统日志,若是,执行S208;若否,则结束。用户空间启动完成之后,系统日志获取装置可根据上述结构体中的成员,获知预留内存中是否存储了系统日志,若存储了系统日志,则执行S207,否则,本实施例提供的系统日志获取方法至此结束,用户可通过用户空间进行任意操作,且本次重启之后系统的运行状况再次被循环缓存存储。S208,将预留内存存储的系统日志导出至永久存储设备。系统日志获取装置在获知预留内存中存储了系统日志后,可自动将该系统日志保存至永久存储设备,如计算机上的C盘、D盘等,以便工作人员随时查看系统在一段时间内的运行状况,及各次引起非正常重启的原因;或者,根据用户指示将系统日志导出至永久存储设备,例如在系统日志获取装置在获知预留内存中存储了系统日志后,可通过用户空间向用户询问是否保存该系统日志及保存地址,随后根据用户指示将系统日志保存在永久存储设备,则本实施例提供的系统日志获取方法至此结束,用户可通过用户空间进行任意操作,本次重启之后系统的运行状况再次被循环缓存存储。本实施例中,为了获取系统日志,可在将上述压缩文件形式的内核镜像文件加载到镜像文件区之后,并在将压缩文件形式的内核镜像文件解压之前的预设时刻,将循环缓存中存储的用于记录当前重启时刻之前系统运行状况的系统日志导出至系统内存的预留内存,并且还可存储在永久存储设备中,便于用户统计分析系统运行状态;并且在本实施例中,为了获取系统日志,可不需在当前重启时刻之前、系统正在运行过程中开启专用于获取系统日志的进程,仅在由当前重启时刻开始的启动过程中便可获取当前重启时刻之前系统详细准确的系统日志,减低了系统功耗。图6为本发明系统日志获取装置实施例一的结构图。如图6所示,该装置包括:加载模块501,用于在系统的当前重启时刻,将内核镜像文件加载到系统内存中的镜像文件区;其中,内核镜像文件与系统日志之间具有关联性;判断模块502,在所述当前重启时刻之后的预设时刻,用于判断当前重启是否为非正常重启,若是,则触发导出模块503;该导出模块503用于根据内核镜像文件与系统日志之间的关联性获取所述系统日志,并将系统日志存储至系统的预留内存。本实施例中,系统日志获取装置为了获取系统日志,可在将上述压缩文件形式的内核镜像文件加载到镜像文件区之后,并在将压缩文件形式的内核镜像文件解压之前的预设时刻,将循环缓存中存储的用于记录当前重启时刻之前系统运行状况的系统日志导出至预留内存;不需在当前重启时刻之前、系统正在运行过程中开启专用于获取系统日志的进程,仅在由当前重启时刻开始的启动过程中便可获取当前重启时刻之前系统详细准确的系统日志,减小了CPU的进程管理负担,减低了系统功耗。图7为本发明系统日志获取装置实施例二的结构图。如图7所示,该系统日志获取装置还包括关联模块505,用于在配置内核镜像文件时,将系统日志的存储地址关联至内核镜像文件的初始化数据段;则导出模块503具体用于从内核镜像文件的初始化数据段中获取系统日志的存储地址,根据系统日志的存储地址从与系统日志的存储地址对应的存储空间中获取系统日志。上述预留内存位于系统内存中的非镜像文件区,并包含复位标识变量。由上可知,根据复位标识变量可知系统的当前重启是否为非正常重启,具体的,判断模块502具体用于识别预留内存中的复位标识变量的取值;还用于根据复位标识变量的值判断当前重启是否为非正常重启。更具体的,系统日志获取装置还包括:运行模块506,用于运行内核镜像文件以启动内核空间;需要说明的是,由于内核镜像文件中的代码段和初始化数据段被压缩,以压缩文件的形式加载至系统内存中的镜像文件区,因此在运行内核镜像文件以启动内核空间之前,需通过解压模块504调用解压缩函数,对压缩文件进行解压。通过内核空间启动用户空间,并触发导出模块503,该导出模块503还用于将预留内存存储的系统日志导出至永久存储设备。需要说明的是,各装置实施例中,各模块对应上述各方法实施例,在此不再赘述。本实施例中,系统日志获取装置为了获取系统日志,可在将上述压缩文件形式的内核镜像文件加载到镜像文件区之后,并在将压缩文件形式的内核镜像文件解压之前的预设时刻,将循环缓存中存储的用于记录当前重启时刻之前系统运行状况的系统日志导出至系统内存的预留内存,并且还可存储在永久存储设备中,便于用户统计分析系统运行状态;并且在本实施例中,为了获取系统日志,可不需在当前重启时刻之前、系统正在运行过程中开启专用于获取系统日志的进程,仅在由当前重启时刻开始的启动过程中便可获取当前重启时刻之前系统详细准确的系统日志,减低了系统功耗。本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1