发明内容
本发明实施例提供一种日志的获取方法和日志服务器,以保证日志数据可以根据时间顺序进行排列。
根据本发明的一方面,提供一种日志的获取方法,包括:
接收多个日志采集器发送的日志数据,所述日志数据包括日志和日志的时间戳;
存储接收到的日志数据至多个缓冲区;
判断存储区的时间戳是否大于所述多个缓冲区的最大时间戳;
若判断所述存储区的时间戳大于缓冲区的最大时间戳,获取大于等于所述多个缓冲区的最大时间戳的日志数据,并进行排序存储至所述存储区。
根据本发明的另一方面,还提供一种日志服务器,所述日志服务器与日志采集器组通信连接,所述日志服务器包括:
接收模块,用于接收所述日志采集器组发送的日志数据,所述日志数据包括日志和日志的时间戳;
采集缓存模块,用于存储所述日志数据;
主缓存模块,用于存储已排序的日志数据;
判断模块,用于判断所述主缓存模块的时间戳是否大于所述采集缓存模块的最大时间戳;
临时缓存模块,用于当所述判断模块判断所述主缓存模块的时间戳大于所述采集缓存模块的最大时间戳时,获取大于等于所述采集缓存模块的最大时间戳的日志数据,并进行排序;
主缓存模块,用于存储已排序的日志数据。
采用上述提供的日志的获取方法和日志服务器,将日志采集器返回的日志数据进行缓存,并将存储区的时间戳与缓冲区的时间戳进行比较,当存储区的时间戳大于缓冲区的时间戳时,获取查询的时间段的日志数据,并进行排序,以保证日志数据可以根据时间顺序进行排列,从而可以使用户准确获得想要的日志数据。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明实施例的日志管理系统的结构图。在本实施例中,日志管理系统包括日志服务器10和日志采集器组30。日志服务器10通过网络20与日志采集器组30通信连接。在本实施例中,日志服务器10用于当用户需要查询某一时间段的M条日志数据时,发送查询请求至日采集器30以获取日志数据,该查询请求用于查询某一时间段的M条日志数据,其中每个日志采集器查询M/N条日志数据。在本实施例中,日志采集器组30包括第一日志采集器31、第二日志采集器32、...、第N日志采集器3N。为更好的说明,在本实施例中,假设用户需要查询21:00至18:00间的9条日志数据。假设日志采集器组30有三个日志采集器,分别为第一日志采集器31、第二日志采集器32、第三日志采集器33。当日志采集器组30接收到日志服务器10发送的查询请求后,每个日志采集器分别查询3条日志数据,并将查询后的日志数据返回至日志服务器10,日志数据包括日志和该日志的时间戳。
图2为本发明实施例的日志服务器的结构图。
在本实施例中,日志服务器10包括查询模块100、接收模块102、判断模块104、主缓存模块106、采集缓存模块108、临时缓存模块110。
查询模块100用于当用户需要查询某一时间段的M条日志数据时,发送查询请求至日志采集器组30,并通知接收模块102等待接收日志采集器组30发送的日志数据。
接收模块102用于接收日志采集器组30发送的有序的日志数据,并将日志数据发送于采集缓存模块108。
采集缓存模块108用于存储接收模块102发送的有序的日志数据。在本实施例中,采集缓存模块108包括第一采集缓存子模块1081、第二采集缓存子模块1082、第三采集缓存子模块1083、...、第N采集缓存子模块108N。在本实施倒中,由于接收模块102接收的日志数据是由第一日志采集器31、第二日志采集器32、...、第N日志采集器3N分别发送的日志数据,因此,为更好的区分存储由不同的日采集器发送的日志数据,第一采集缓存子模块1081存储第一日志采集器31发送的日志数据,第二采集缓存子模块1082存储第二日志采集器32发送的日志数据,依次类推。在本实施例中,第一日志采集器31、第二日志采集器32、...、第N日志采集器3N分别发送的日志数据为有序的。
主缓存模块106用于存储已排序的日志数据。
在本实施例中,主缓存模块106和采集缓存模块108的结构如图3所示,在本实施例中,以日志数据中的日志的时间戳为时间顺序进行排序,从下到上是时间的先后顺序。图中的每一小格存储日志数据,图中的最下面的小格为存储排序最后的日志数据。在本实施例中,Timestamp时间戳是主缓存模块106当前排序最后的日志数据的日志的时间戳。Timestamp#1表示第一采集缓存子模块1081的当前排序最后的日志数据的日志的时间戳,Timestamp#2表示第二采集缓存子模块1082的当前排序最后的日志数据的日志的时间戳,以此类推,此处不在描述。在本实施例中,主缓存模块106只能有一个时间戳,第一采集缓存子模块1081、第二采集缓存子模块1082、第三采集缓存子模块1083、...、第N采集缓存子模块108N中各自只能有一个时间戳。在本实施例中,主缓存模块106的时间戳的初始值为查询的时间段的上限值,也可以理解为查询的时间段的最大值,在本实施例中为查询的开始时间,比如用户需要查询21:00至18:00时间段的日志数据,则主缓存模块106的时间戳为21:00。
判断模块104用于判断主缓存模块106的时间戳是否大于采集缓存模块108中的最大时间戳。在本实施倒中,采集缓存模块108中的最大时间戳是第一采集缓存子模块1081、第二采集缓存子模块1082、第三采集缓存子模块1083、...、第N采集缓存子模块108N中的时间戳的值为最大的时间戳。
判断模块104还用于判断主缓存模块106的时间戳大于采集缓存模块108中的最大时间戳时,通知主缓存模块106更新当前的时间戳为采集缓存模块108中的最大时间戳。主缓存模块106还用于更新当前的时间戳为采集缓存模块108中的最大时间戳。
判断模块104还用于判断采集缓存模块108中是否有日志数据的时间戳大于该最大时间戳,当判断有大于该最大时间戳时,通知临时缓存模块110存储时间戳大于等于该最大时间戳的日志数据。临时缓存模块110用于存储采集缓存模块108中时间戳大于等于该最大时间戳的日志数据,并进行排序。在本实施例中,按日志数据的日志的时间戳的先后顺序进行排序。
主缓存模块106用于存储临时缓存模块110已排序的日志数据。
判断模块104还用于判断主缓存模块106中的日志数据的条数是否满足查询条数,当然也可以理解为判断主缓存模块106中的日志数据的条数是否匹配查询条数,并当判断不满足时,通知查询模块100发送查询请求至该最大时间戳对应的日志采集器以获取剩余条数的日志数据。查询模块100用于发送查询请求至该最大时间戳对应的日志采集器以获取剩余条数的日志数据。
在本实施例中,依然以用户需要查询21:00至18:00间的9条日志数据为例进行说明。如图4所示。第一采集缓存子模块1081存储第一日志采集器31发送的3条日志数据,以此类推。在本实施例中,三个采集缓存子模块中的当前时间戳分别为18:10,18:20,18:30,可知,采集缓存模块108的最大时间戳为18:30,将主缓存模块106的当前时间戳更新为18:30;由于时间戳大于18:30的有19:10,19:20,19:50,20:00,20:10,20:30,因此将18:30,19:10,19:20,19:50,20:00,20:10,20:30的日志数据存储在临时缓存模块110中,并进行排序。并将排序后的日志数据存储在主缓存模块106中。由于主缓存模块106存储的日志数据的条数为7条,没有符合查询条数,因此,还需要2条日志数据,发送查询请求至18:30对应的第三日志采集器33。在本实施例中,由于18:10,18:20皆小于18:30,相对于用户需要查询的时间段来说,其参考价值很小,因此,这两个时间戳的日志数据依然存储在采集缓存子模块中,当主缓存模块106获取的日志数据满足查询条数时,这两个时间戳的日志数据会被删除。
本发明实施例提供的日志服务器,先将日志采集器返回的日志数据进行缓存排序,并将所述主缓存模块的时间戳与采集缓存模块的最大时间戳进行比较,当所述主缓存模块的时间戳大于采集缓存模块的最大时间戳时,获取查询的时间段的日志数据,并进行排序,从而可以使用户准确获得想要的日志数据,由于使每个日志采集器查询M/N条日志数据,跟现有技术相比,可以缩短查询的时间,从而提高查询的效率。
图5为本发明实施例的日志的获取方法的流程图。
在本实施例中,步骤S500,发送查询请求至日志采集器以查询某一时间段的M条日志数据。在本实施例中,日志采集器包括第一日志采集器、第二日志采集器、...、第N日志采集器,即日志采集器中的每个日志采集器查询M/N条日志数据。
步骤S501,接收多个日志采集器发送的查询后的有序的日志数据。在本实施例中,接收多个日志采集器发送的查询后的日志数据,即接收第一日志采集器、第二日志采集器、...、第N日志采集器分别发送的查询后的日志数据。日志数据包括日志和日志的时间戳。
步骤S502,存储接收到的日志数据。在本实施例中,分开存储接收到的日志数据,即将第一日志采集器发送的查询后的日志数据存储在第一缓冲区,将第二日志采集器发送的查询后的日志数据存储在第二缓冲区,以此类推。可以理解为,将同一个日志采集器发送的日志数据存储在一起。在本实施例中,每一个缓冲区都有一个时间戳,并且每一个缓冲区按时间戳的先后顺序进行排序。该时间戳是当前排序最后的日志数据的日志的时间戳。
步骤S504,判断存储区的时间戳是否大于缓冲区的最大时间戳。在本实施例中,所述存储区的时间戳为查询的时间段的上限值,上限值为查询的时间段的最大值,也可以理解为查询的时间段的开始时间,缓冲区的最大时间戳为第一缓冲区、第二缓冲区、...、第N缓冲区中的时间戳的值为最大的时间戳。
若判断所述存储区的时间戳大于缓冲区的最大时间戳,进入步骤S506,若判断所述存储区的时间戳不大于缓冲区的最大时间戳,进入步骤S500。
步骤S506,更新所述存储区的时间戳为缓冲区的最大时间戳。
步骤S508,获取大于等于该缓冲区的最大时间戳的日志数据,并进行排序存储。在本实施例中,按时间戳的先后顺序进行排序。
步骤S510,判断排序后的日志数据的数据条数是否满足查询条数。
若判断满足查询条数,则进入步骤S514,若判断不满足查询条数,则进入步骤S512。
步骤S512,发送查询请求至该最大时间戳对应的日志采集器以获取剩余条数的日志数据。
步骤S514,查询结束。
本发明实施例提供的日志的获取方法,将存储区的时间戳与多个缓冲区的最大时间戳进行比较,当存储区的时间戳大于多个缓冲区的最大时间戳时,获取查询的时间段的日志数据,并进行排序,从而可以使用户准确获得想要的日志数据,同时,由于使每个日志采集器查询M/N条日志数据,跟现有技术相比,可以缩短查询的时间,从而提高查询的效率。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
最后应说明的是:以上实施例仅用以说明本发明的技术方案而非对其进行限制,尽管参照较佳实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对本发明的技术方案进行修改或者等同替换,而这些修改或者等同替换亦不能使修改后的技术方案脱离本发明技术方案的精神和范围。