日志文件的保存方法和装置与流程

文档序号:12464749阅读:449来源:国知局
本申请涉及数据处理领域,具体而言,涉及一种日志文件的保存方法和装置。
背景技术
::Javaweb应用中有一个非常出名的应用服务器-tomcat,javaweb应用可以跑在tomcat里对外提供服务,每个用户访问该tomcat的日志是非常有价值的,有必要将这些日志记录并保存起来。Tomcat已经提供了两种方式保存这些访问日志,一种是基于文件的log方式AccessLogValve,另外一种是tomcat7.0版本提供的JDBCAccessLogValve。如果使用基于文件的log方式AccessLogValve保存日志,需要将原始日志文件进行转化,而且这些日志文件都是写在本地的,会受到磁盘容量大小的限制。为了避免受到磁盘容量大小的限制这个问题,可以使用基于JDBC方式的JDBCAccessLogValve保存日志,但是该方式具有以下缺点:(1)JDBCAccessLogValve中的JDBC的连接不是从连接池拿的,建立连接时消耗资源,(2)JDBCAccessLogValve没有采用批量插入,(3)JDBCAccessLogValve采用了同步插入,(4)在数据量大的时候,对数据库做分库分表比较麻烦,导致无法快速高效地保存服务器的日志文件。针对上述的问题,目前尚未提出有效的解决方案。技术实现要素:本申请实施例提供了一种日志文件的保存方法和装置,以至少解决无法快速高效地保存服务器的日志文件的技术问题。根据本申请实施例的一个方面,提供了一种日志文件的保存方法,包括:获取服务器记录的日志文件;在分布式数据库中创建目标文件,其中,所述目标文件用于存储所述日志文件;获取所述服务器与所述分布式数据库之间的数据传输资源;以及利用所述数据传输资源,将所述日志文件保存至所述分布式数据库的所述目标文件中。进一步地,在利用所述数据传输资源,将所述日志文件保存至所述分布式数据库的所述目标文件中之前,所述方法还包括:将所述日志文件存储至所述服务器的缓冲 区;判断所述缓冲区的缓冲量是否达到预设值;利用所述数据传输资源,将所述日志文件保存至所述分布式数据库的所述目标文件中包括:在判断出所述缓冲区的缓冲量达到所述预设值的情况下,通过所述数据传输资源,将存储在所述缓冲区中的所述日志文件保存至所述分布式数据库的所述目标文件中。进一步地,在获取所述服务器与所述分布式数据库之间的数据传输资源之前,所述方法还包括:建立所述服务器与所述分布式数据库之间的连接池,其中,所述连接池中包含多个连接,所述数据传输资源为所述连接;在判断出所述缓冲区的缓冲量达到所述预设值的情况下,通过所述数据传输资源,将存储在所述缓冲区中的所述日志文件保存至所述分布式数据库的所述目标文件中包括:在判断出所述缓冲区的缓冲量达到所述预设值的情况下,从所述连接池中获取多个目标连接,其中,所述目标连接是所述连接池中的空闲连接;利用所述多个目标连接,将所述日志文件保存至所述分布式数据库的所述目标文件中。进一步地,所述服务器为多个,获取服务器记录的日志文件包括:获取服务器Sj记录的日志文件,其中,j依次取1至n,n为所述服务器的数量,在分布式数据库中创建目标文件包括:在所述分布式数据库中创建子目标文件D1至子目标文件Dn,其中,所述子目标文件D1至所述子目标文件Dn构成所述目标文件,建立所述服务器与所述分布式数据库之间的连接池包括:建立所述服务器Sj与所述分布式数据库之间的连接池Pj,利用所述多个目标连接,将所述日志文件保存至所述分布式数据库的所述目标文件中包括:利用从所述连接池Pj中获取到的所述目标连接,将所述服务器Sj记录的日志文件保存至所述分布式数据库的子目标文件Dj中。进一步地,利用所述数据传输资源,将所述日志文件保存至所述分布式数据库的所述目标文件中还包括:利用所述数据传输资源,以异步传输方式将所述日志文件中的多条数据批量保存至所述分布式数据库的所述目标文件中。根据本申请实施例的另一方面,还提供了一种日志文件的保存装置,包括:第一获取单元,用于获取服务器记录的日志文件;创建单元,用于在分布式数据库中创建目标文件,其中,所述目标文件用于存储所述日志文件;第二获取单元,用于获取所述服务器与所述分布式数据库之间的数据传输资源;以及保存单元,用于利用所述数据传输资源,将所述日志文件保存至所述分布式数据库的所述目标文件中。进一步地,所述装置还包括:存储单元,用于在所述保存单元利用所述数据传输资源,将所述日志文件保存至所述分布式数据库的所述目标文件中之前,将所述日志文件存储至所述服务器的缓冲区;判断单元,用于判断所述缓冲区的缓冲量是否达到预设值;所述保存单元包括:第一保存子单元,用于当所述判断单元判断出所述缓冲 区的缓冲量达到所述预设值时,通过所述数据传输资源,将存储在所述缓冲区中的所述日志文件保存至所述分布式数据库的所述目标文件中。进一步地,所述装置还包括:建立单元,用于在所述第二获取单元获取所述服务器与所述分布式数据库之间的数据传输资源之前,建立所述服务器与所述分布式数据库之间的连接池,其中,所述连接池中包含多个连接,所述数据传输资源为所述连接;所述第一保存子单元包括:获取模块,用于当所述判断单元判断出所述缓冲区的缓冲量达到所述预设值时,从所述连接池中获取多个目标连接,其中,所述目标连接是所述连接池中的空闲连接;保存模块,用于利用所述获取模块获取的所述多个目标连接,将所述日志文件保存至所述分布式数据库的所述目标文件中。进一步地,所述服务器为多个,所述第一获取单元包括:第一获取子单元,用于获取服务器Sj记录的日志文件,其中,j依次取1至n,n为所述服务器的数量,所述创建单元包括:创建子单元,用于在所述分布式数据库中创建子目标文件D1至子目标文件Dn,其中,所述子目标文件D1至所述子目标文件Dn构成所述目标文件,所述建立单元包括:建立子单元,用于建立所述服务器Sj与所述分布式数据库之间的连接池Pj,所述保存模块包括:保存子模块,用于利用所述获取模块从所述连接池Pj中获取到的所述目标连接,将所述服务器Sj记录的日志文件保存至所述分布式数据库的子目标文件Dj中。进一步地,所述保存单元还包括:第二保存子单元,用于利用所述数据传输资源,以异步传输方式将所述日志文件中的多条数据批量保存至所述分布式数据库的所述目标文件中。在本申请实施例中,采用获取服务器记录的日志文件,在分布式数据库中创建目标文件,其中,目标文件用于存储日志文件,获取服务器与分布式数据库之间的数据传输资源,以及利用数据传输资源,将日志文件保存至分布式数据库的目标文件中。通过获取服务器记录的日志文件,在分布式数据库中创建用于存储日志文件的目标文件,获取服务器和分布式数据库之间的数据传输资源,利用该数据传输资源,将日志文件保存至分布式数据库的目标文件中,由于该方法避免了对数据库做分库分表,因此能够将服务器记录的日志文件快速高效地保存至分布式数据库中,实现了将服务器记录的日志文件快速高效地保存至分布式数据库中的技术效果,进而解决了现有技术中无法快速高效地保存服务器的日志文件的技术问题。附图说明此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申 请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:图1是根据本申请实施例的日志文件的保存方法的流程图;以及图2是根据本申请实施例的日志文件的保存装置的示意图。具体实施方式为了使本
技术领域
:的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。首先对本申请实施例所涉及的技术术语作如下解释:Tomcat:Tomcat是一个免费的开源的Web应用服务器,属于轻量级服务器,普遍应用于中小型系统中。HBase:HBase是一个可靠性高、性能好,面向列、可伸缩的分布式存储系统。根据本申请实施例,提供了一种日志文件的保存方法的实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。图1是根据本申请实施例的日志文件的保存方法的流程图,如图1所示,该方法包括如下步骤:步骤S102,获取服务器记录的日志文件。服务器记录的日志文件可以为用户的访问日志,也可以为服务器的运行日志。步骤S104,在分布式数据库中创建目标文件,其中,目标文件用于存储日志文件。分布式数据库可以为HBase、Cassandra、HyperTable等。在需要存储的文件的数据量非常大的情况下,对数据库做分库分表十分麻烦,使用HBase等分布式数据库,避免了对数据库做分库分表,从而提高了保存数据的效率。目标文件可以为表。步骤S106,获取服务器与分布式数据库之间的数据传输资源。步骤S108,利用数据传输资源,将日志文件保存至分布式数据库的目标文件中。HBase是一个分布式的、面向列的数据库,它和一般关系型数据库的最大区别是:HBase很适合于存储非结构化的数据,还有它是基于列而不是基于行的模式。Rowkey是一段二进制码流,最大长度为64KB,内容可以由使用的用户自定义。数据加载时,一般也是根据Rowkey(行键)的二进制序由小到大进行的。HBase是根据Rowkey来进行检索的,系统通过找到某个Rowkey(或者某个Rowkey范围)所在的Region(区域),然后将查询数据的请求路由到该Region获取数据。HBase的检索支持3种方式:(1)通过单个Rowkey访问,即按照某个Rowkey键值进行get操作,这样获取唯一一条记录;(2)通过Rowkey的范围进行扫描,即通过设置startRowKey(开始行键)和endRowKey(结束行键),在这个范围内进行扫描,这样可以按指定的条件获取一批记录;(3)全表扫描,即直接扫描整张表中所有行记录。HBase按单个Rowkey检索的效率是很高的,耗时在1毫秒以下,每秒钟可获取1000-2000条记录。通过巧妙地设计Rowkey,使获取的文件中的数据挨在一起(应该在同一个Region下),可以在遍历结果时获得很好的性能。通过获取服务器记录的日志文件,在分布式数据库中创建用于存储日志文件的目标文件,获取服务器和分布式数据库之间的数据传输资源,利用该数据传输资源,将日志文件保存至分布式数据库的目标文件中,由于该方法避免了对数据库做分库分表,因此能够将服务器记录的日志文件快速高效地保存至分布式数据库中,实现了将服务器记录的日志文件快速高效地保存至分布式数据库中的技术效果,进而解决了现有技术中无法快速高效地保存服务器的日志文件的技术问题。可选地,在利用数据传输资源,将日志文件保存至分布式数据库的目标文件中之前,本申请实施例所提供的日志文件的保存方法还包括:将日志文件存储至服务器的缓冲区;判断缓冲区的缓冲量是否达到预设值;利用数据传输资源,将日志文件保存至分布式数据库的目标文件中包括:在判断出缓冲区的缓冲量达到预设值的情况下,通过数据传输资源,将存储在缓冲区中的日志文件保存至分布式数据库的目标文件中。在利用数据传输资源,将日志文件保存至分布式数据库的目标文件中之前,先将日志文件存储至服务器的缓冲区,并在缓冲区的缓冲量达到预设值之后,利用数据传输资源,将日志文件保存至分布式数据库的目标文件中。预设值可预先设置,在缓冲区的最大缓冲量为M单位时,可以设置预设值为0.5M、0.6M、0.7M或0.8M等。预设值同时也是阈值,即当缓冲区的缓冲量达到该阈值后,将缓冲区中的日志文件存储至分布式数据库。例如,设置预设值为最大缓冲量的60%,将日志文件存储至缓冲区,在缓冲区的缓冲量达到最大缓冲量的60%之后,利用数据传输资源,将日志文件保存至分布式数据库的目标文件中。由于CPU的速度快,而I/O(输入/输出端口,英文全称为input/output)设备速度慢,因此容易由于通道不足而产生“瓶颈”现象。通过使用缓冲区,可以改善CPU和I/O设备之间速度不匹配的问题,减少I/O设备对CPU的中断次数,从而提升了CPU的工作效率,因此提升了服务器的性能,使用户访问服务器更加高效,提升了用户体验。为缓冲区的缓冲量设置阈值,可以在缓冲量达到阈值时及时将缓冲区中存储的日志文件传输至分布式数据库,避免缓冲区的缓冲量达到最大值后日志文件中的数据不能被保存下来而丢失。可选地,在获取服务器与分布式数据库之间的数据传输资源之前,本申请实施例所提供的日志文件的保存方法还包括:建立服务器与分布式数据库之间的连接池,其中,连接池中包含多个连接,数据传输资源为连接;在判断出缓冲区的缓冲量达到预设值的情况下,通过数据传输资源,将存储在缓冲区中的日志文件保存至分布式数据库的目标文件中包括:在判断出缓冲区的缓冲量达到预设值的情况下,从连接池中获取多个目标连接,其中,目标连接是连接池中的空闲连接;利用多个目标连接,将日志文件保存至分布式数据库的目标文件中。建立服务器与分布式数据库之间的连接池,连接池中包含多个连接,上述数据传输资源即为连接。当缓冲区的缓冲量达到预设值时,从连接池中获取空闲连接,获取到的空闲连接即为目标连接,利用多个目标连接,将日志文件保存至分布式数据库的 目标文件中。连接是一种关键的有限的昂贵的资源,对连接的管理能显著地影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。连接池负责分配、管理和释放连接,它允许应用程序重复使用一个现有的数据库连接,而不是再建立一个,避免了资源浪费,且能提升应用程序的性能。可选地,服务器为多个,获取服务器记录的日志文件包括:获取服务器Sj记录的日志文件,其中,j依次取1至n,n为服务器的数量,在分布式数据库中创建目标文件包括:在分布式数据库中创建子目标文件D1至子目标文件Dn,其中,子目标文件D1至子目标文件Dn构成目标文件,建立服务器与分布式数据库之间的连接池包括:建立服务器Sj与分布式数据库之间的连接池Pj,利用多个目标连接,将日志文件保存至分布式数据库的目标文件中包括:利用从连接池Pj中获取到的目标连接,将服务器Sj记录的日志文件保存至分布式数据库的子目标文件Dj中。本申请实施例所提供的日志文件的保存方法可同时保存不同服务器记录的日志文件,具体说明如下。服务器S1至服务器Sn为n个不同的服务器,需要将这n个服务器记录的日志文件保存至分布式数据库中。在分布式数据库中的目标文件下建立n个子目标文件,这n个子目标文件分别为子目标文件D1至子目标文件Dn。子目标文件D1用来保存服务器S1的日志文件,子目标文件D2用来保存服务器S2的日志文件,子目标文件D3用来保存服务器S3的日志文件,以此类推,子目标文件Dn用来保存服务器Sn的日志文件。在每个服务器与分布式数据库之间都建立一个连接池,一共建立了n个连接池,这n个连接池分别为连接池P1、连接池P2、……、连接池Pn。其中,连接池P1是服务器S1与分布式数据库之间的连接池,连接池P2是服务器S2与分布式数据库之间的连接池,连接池P3是服务器S3与分布式数据库之间的连接池,以此类推,连接池Pn是服务器Sn与分布式数据库之间的连接池。这n个连接池中,每个连接池均包含至少一个连接。连接池Pi中包含m(i)个连接,分别为连接C1-i、连接Ci-2、连接Ci-3、......、连接Ci-m(i)。例如,假设一共有3个不同的服务器,则n为3,连接池P1是服务器S1与分布式数据库之间的连接池,连接池P1中包含了6个连接,即m(1)=6,这6个连接分别为连接C1-1、连接C1-2、连接C1-3、连接C1-4、连接C1-5和连接C1-6。连接池P2是服务器S2与分布式数据库之间的连接池,连接池P2中包含了3个连接,即m(2)=3,这3个连接分别为连接C2-1、连接C2-2和连接C2-3。连接池P3是服务器S3与分布式数据库之间的连接池,连接池P3中包含了4个连接,即m(3)=4,这4个连接分别为连接C3-1、连接C3-2、连接C3-3和连接C3-4。连接池P1中的6个连接中均包含了服务器S1的标识信息,连接池P2中的3个连接中均包含了服务器S2的标识信息,连接池P3中的4个连接中均包含了服务器S3的标识信息,根据连接中包含的标识信息,可以判断出该连接是哪个服务器与分布式数据库之间的连接,然后将该服务器记录的日志文件保存至分布式数据库中相应的子目标文件中,即把服务器S1记录的日志文件保存至子目标文件D1,把服务器S2记录的日志文件保存至子目标文件D2,把服务器S3记录的日志文件保存至子目标文件D3。通过将不同服务器记录的日志文件保存至相应的子目标文件,使得日志文件的保存清楚有条理,在以后查询日志文件时,也非常方便。例如,当需要查询某一个服务器的日志文件,只需要查询该服务器对应的子目标文件,不需要再对整个目标文件进行查询,可以加快查询速度,提高查询效率。可选地,利用数据传输资源,将日志文件保存至分布式数据库的目标文件中包括:利用数据传输资源,以异步传输方式将日志文件中的多条数据批量保存至分布式数据库的目标文件中。将日志文件中的多条数据进行异步批量处理,能够大大加快数据处理的速度,从而更加高效地将日志文件保存至分布式数据库。例如,可以设置批大小BatchSize为2000,即每次数据交互,处理2000条数据。在建立服务器与分布式数据库之间的连接时,有两个实现方法:(1)一个方法是publicvoidinvoke(Requestrequest,Responseresponse),这个负责将请求转发下去;(2)另外一个方法:publicvoidlog(Requestrequest,Responseresponse,longtime)。将实现的HbaseAccessLogValve打成jar包放到tomcat目录下的lib里,将Hbase客户端jar包及其依赖的jar包也放进tomcat目录下的lib里。在Tomcat的conf文件夹中的server.xml标签<Host></Host>中增加以下配置<ValveclassName="com.gridsum.tomcat.valves.HbaseAccessLogValve"zkQuorum="192.168.1.100"zkClientPort="2181"maxConnections="10"batchSize="1000"tableName="access_log"columeFamily="logInfo"/>其中,maxConnections="10"表示最大连接数是10。batchSize="1000"表示批大小为1000,即每次数据交互,处理1000条数据。tableName="access_log"表示在HBase中创建的表的表名是"access_log"。columeFamily="logInfo"表示在HBase中创建的表的列族的名字是"logInfo"。根据本发明实施例,还提供了一种日志文件的保存装置。该日志文件的保存装置可以执行上述日志文件的保存方法,上述日志文件的保存方法也可以通过该日志文件的保存装置实施。图2是根据本申请实施例的日志文件的保存装置的示意图。如图2所示,该装置包括第一获取单元22、创建单元24、第二获取单元26和保存单元28。第一获取单元22用于获取服务器记录的日志文件。服务器记录的日志文件可以为用户的访问日志,也可以为服务器的运行日志。创建单元24用于在分布式数据库中创建目标文件,其中,目标文件用于存储日志文件。分布式数据库可以为HBase、Cassandra、HyperTable等。在需要存储的文件的数据量非常大的情况下,对数据库做分库分表十分麻烦,使用HBase等分布式数据库,避免了对数据库做分库分表,从而提高了保存数据的效率。目标文件可以为表。第二获取单元26用于获取服务器与分布式数据库之间的数据传输资源。保存单元28用于利用数据传输资源,将日志文件保存至分布式数据库的目标文件中。HBase是一个分布式的、面向列的数据库,它和一般关系型数据库的最大区别是:HBase很适合于存储非结构化的数据,还有它是基于列而不是基于行的模式。Rowkey是一段二进制码流,最大长度为64KB,内容可以由使用的用户自定义。数据加载时,一般也是根据Rowkey(行键)的二进制序由小到大进行的。HBase是根据Rowkey来进行检索的,系统通过找到某个Rowkey(或者某个Rowkey范围)所在的Region(区域),然后将查询数据的请求路由到该Region获取数据。HBase的检索支持3种方式:(1)通过单个Rowkey访问,即按照某个Rowkey键值进行get操作,这样获取唯一一条记录;(2)通过Rowkey的范围进行扫描,即通过设置startRowKey(开始行键)和 endRowKey(结束行键),在这个范围内进行扫描,这样可以按指定的条件获取一批记录;(3)全表扫描,即直接扫描整张表中所有行记录。HBase按单个Rowkey检索的效率是很高的,耗时在1毫秒以下,每秒钟可获取1000-2000条记录。通过巧妙地设计Rowkey,使获取的文件中的数据挨在一起(应该在同一个Region下),可以在遍历结果时获得很好的性能。通过获取服务器记录的日志文件,在分布式数据库中创建用于存储日志文件的目标文件,获取服务器和分布式数据库之间的数据传输资源,利用该数据传输资源,将日志文件保存至分布式数据库的目标文件中,由于避免了对数据库做分库分表,因此能够将服务器记录的日志文件快速高效地保存至分布式数据库中,实现了将服务器记录的日志文件快速高效地保存至分布式数据库中的技术效果,进而解决了现有技术中无法快速高效地保存服务器的日志文件的技术问题。可选地,本申请实施例所提供的日志文件的保存装置还包括存储单元和判断单元。存储单元用于在保存单元利用数据传输资源,将日志文件保存至分布式数据库的目标文件中之前,将日志文件存储至服务器的缓冲区。判断单元用于判断缓冲区的缓冲量是否达到预设值。保存单元包括第一保存子单元。该第一保存子单元用于当判断单元判断出缓冲区的缓冲量达到预设值时,通过数据传输资源,将存储在缓冲区中的日志文件保存至分布式数据库的目标文件中。在利用数据传输资源,将日志文件保存至分布式数据库的目标文件中之前,先将日志文件存储至服务器的缓冲区,并在缓冲区的缓冲量达到预设值之后,利用数据传输资源,将日志文件保存至分布式数据库的目标文件中。预设值可预先设置,在缓冲区的最大缓冲量为M单位时,可以设置预设值为0.5M、0.6M、0.7M或0.8M等。预设值同时也是阈值,即当缓冲区的缓冲量达到该阈值后,将缓冲区中的日志文件存储至分布式数据库。例如,设置预设值为最大缓冲量的60%,将日志文件存储至缓冲区,在缓冲区的缓冲量达到最大缓冲量的60%之后,利用数据传输资源,将日志文件保存至分布式数据库的目标文件中。由于CPU的速度快,而I/O(输入/输出端口,英文全称为input/output)设备速度慢,因此容易由于通道不足而产生“瓶颈”现象。通过使用缓冲区,可以改善CPU和I/O设备之间速度不匹配的问题,减少I/O设备对CPU的中断次数,从而提升了CPU的 工作效率,因此提升了服务器的性能,使用户访问服务器更加高效,提升了用户体验。为缓冲区的缓冲量设置阈值,可以在缓冲量达到阈值时及时将缓冲区中存储的日志文件传输至分布式数据库,避免缓冲区的缓冲量达到最大值后日志文件中的数据不能被保存下来而丢失。可选地,本申请实施例所提供的日志文件的保存装置还包括建立单元。该建立单元用于在第二获取单元获取服务器与分布式数据库之间的数据传输资源之前,建立服务器与分布式数据库之间的连接池,其中,连接池中包含多个连接,数据传输资源为连接。第一保存子单元包括获取模块和保存模块。获取模块用于当判断单元判断出缓冲区的缓冲量达到预设值时,从连接池中获取多个目标连接,其中,目标连接是连接池中的空闲连接。保存模块用于利用获取模块获取的多个目标连接,将日志文件保存至分布式数据库的目标文件中。建立服务器与分布式数据库之间的连接池,连接池中包含多个连接,上述数据传输资源即为连接。当缓冲区的缓冲量达到预设值时,从连接池中获取空闲连接,获取到的空闲连接即为目标连接,利用多个目标连接,将日志文件保存至分布式数据库的目标文件中。连接是一种关键的有限的昂贵的资源,对连接的管理能显著地影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。连接池负责分配、管理和释放连接,它允许应用程序重复使用一个现有的数据库连接,而不是再建立一个,避免了资源浪费,且能提升应用程序的性能。可选地,服务器为多个。第一获取单元包括第一获取子单元。该第一获取子单元用于获取服务器Sj记录的日志文件,其中,j依次取1至n,n为服务器的数量。创建单元包括创建子单元。该创建子单元,用于在分布式数据库中创建子目标文件D1至子目标文件Dn,其中,子目标文件D1至子目标文件Dn构成目标文件。建立单元包括建立子单元。该建立子单元,用于建立服务器Sj与分布式数据库之间的连接池Pj。保存模块包括保存子模块。该保存子模块用于利用获取模块从连接池Pj中获取到的目标连接,将服务器Sj记录的日志文件保存至分布式数据库的子目标文件Dj中。本申请实施例所提供的日志文件的保存装置可同时保存不同服务器记录的日志文件,具体说明如下。服务器S1至服务器Sn为n个不同的服务器,需要将这n个服务器记录的日志文件保存至分布式数据库中。在分布式数据库中的目标文件下建立n个子目标文件,这n个子目标文件分别为子目标文件D1至子目标文件Dn。子目标文件D1用来保存服务器S1的日志文件,子目标文件D2用来保存服务器S2的日志文件, 子目标文件D3用来保存服务器S3的日志文件,以此类推,子目标文件Dn用来保存服务器Sn的日志文件。在每个服务器与分布式数据库之间都建立一个连接池,一共建立了n个连接池,这n个连接池分别为连接池P1、连接池P2、……、连接池Pn。其中,连接池P1是服务器S1与分布式数据库之间的连接池,连接池P2是服务器S2与分布式数据库之间的连接池,连接池P3是服务器S3与分布式数据库之间的连接池,以此类推,连接池Pn是服务器Sn与分布式数据库之间的连接池。这n个连接池中,每个连接池均包含至少一个连接。连接池Pi中包含m(i)个连接,分别为连接C1-i、连接Ci-2、连接Ci-3、......、连接Ci-m(i)。例如,假设一共有3个不同的服务器,则n为3,连接池P1是服务器S1与分布式数据库之间的连接池,连接池P1中包含了6个连接,即m(1)=6,这6个连接分别为连接C1-1、连接C1-2、连接C1-3、连接C1-4、连接C1-5和连接C1-6。连接池P2是服务器S2与分布式数据库之间的连接池,连接池P2中包含了3个连接,即m(2)=3,这3个连接分别为连接C2-1、连接C2-2和连接C2-3。连接池P3是服务器S3与分布式数据库之间的连接池,连接池P3中包含了4个连接,即m(3)=4,这4个连接分别为连接C3-1、连接C3-2、连接C3-3和连接C3-4。连接池P1中的6个连接中均包含了服务器S1的标识信息,连接池P2中的3个连接中均包含了服务器S2的标识信息,连接池P3中的4个连接中均包含了服务器S3的标识信息,根据连接中包含的标识信息,可以判断出该连接是哪个服务器与分布式数据库之间的连接,然后将该服务器记录的日志文件保存至分布式数据库中相应的子目标文件中,即把服务器S1记录的日志文件保存至子目标文件D1,把服务器S2记录的日志文件保存至子目标文件D2,把服务器S3记录的日志文件保存至子目标文件D3。通过将不同服务器记录的日志文件保存至相应的子目标文件,使得日志文件的保存清楚有条理,在以后查询日志文件时,也非常方便。例如,当需要查询某一个服务器的日志文件,只需要查询该服务器对应的子目标文件,不需要再对整个目标文件进行查询,可以加快查询速度,提高查询效率。可选地,保存单元还包括第二保存子单元。该第二保存子单元用于利用数据传输资源,以异步传输方式将日志文件中的多条数据批量保存至分布式数据库的目标文件中。将日志文件中的多条数据进行异步批量处理,能够大大加快数据处理的速度,从 而更加高效地将日志文件保存至分布式数据库。例如,可以设置批大小BatchSize为2000,即每次数据交互,处理2000条数据。在建立服务器与分布式数据库之间的连接时,有两个实现方法:(1)一个方法是publicvoidinvoke(Requestrequest,Responseresponse),这个负责将请求转发下去;(2)另外一个方法:publicvoidlog(Requestrequest,Responseresponse,longtime)。将实现的HbaseAccessLogValve打成jar包放到tomcat目录下的lib里,将Hbase客户端jar包及其依赖的jar包也放进tomcat目录下的lib里。在Tomcat的conf文件夹中的server.xml标签<Host></Host>中增加以下配置<ValveclassName="com.gridsum.tomcat.valves.HbaseAccessLogValve"zkQuorum="192.168.1.100"zkClientPort="2181"maxConnections="10"batchSize="1000"tableName="access_log"columeFamily="logInfo"/>其中,maxConnections="10"表示最大连接数是10。batchSize="1000"表示批大小为1000,即每次数据交互,处理1000条数据。tableName="access_log"表示在HBase中创建的表的表名是"access_log"。columeFamily="logInfo"表示在HBase中创建的表的列族的名字是"logInfo"。所述日志文件的保存装置包括处理器和存储器,上述第一获取单元22、创建单元24、第二获取单元26和保存单元28等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元来实现相应的功能。处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数来保存日志文件。存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM),存储器包括至少一个存储芯片。本申请还提供了一种计算机程序产品,当在数据处理设备上执行时,适于执行初始化有如下方法步骤的程序代码:获取服务器记录的日志文件;在分布式数据库中创建目标文件,其中,目标文件用于存储日志文件;获取服务器与分布式数据库之间的 数据传输资源;以及利用数据传输资源,将日志文件保存至分布式数据库的目标文件中。上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,RandomAccessMemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。以上所述仅是本申请的优选实施方式,应当指出,对于本
技术领域
:的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1