一种应用程序的日志管理方法及系统的制作方法

文档序号:10655161阅读:206来源:国知局
一种应用程序的日志管理方法及系统的制作方法
【专利摘要】本发明实施例公开了一种应用程序的日志管理方法及系统。该方法包括:日志消费者向日志服务器发送日志订阅请求,日志订阅请求中包括目标日志主题;日志生产者以发布的方式向日志服务器发送所产生的当前日志;当日志服务器确定接收到的当前日志与目标日志主题相匹配时,将当前日志发送至日志消费者。本发明实施例通过采用上述技术方案,可有效提高日志消费者获取所需日志的速度及时效,方便日志消费者及时对所获取的日志进行分析等处理,改善了日志管理的实时性。
【专利说明】
一种应用程序的日志管理方法及系统
技术领域
[0001]本发明实施例涉及互联网技术领域,尤其涉及一种应用程序的日志管理方法及系统。【背景技术】
[0002]为了清楚的了解互联网上的应用程序的运行情况,开发人员需要将应用程序的运行数据收集到一起,以便进行集中查看及分析等操作。应用程序的运行数据一般被记录在应用程序的日志中,可借助日志服务器对应用程序的日志进行收集,开发人员可通过访问日志服务器来获取所需要的应用程序的日志,进而及时了解业务以及运维等各方面的相关情况。
[0003]通常,生成日志的一方可被称为日志生产者,获取日志的并对日志进行分析等处理的一方可被称为日志消费者。对于日志消费者来说,为了及时的了解应用程序的运行情况,日志获取的实时性非常重要。然而,随着网站的用户数量不断增长,应用程序运行在越来越多的终端上,使应用程序日志的收集变得越来越困难,此外,现有的日志管理方案一般会在日志服务器中将日志转化为本地文件,日志消费者需要通过主动读取该本地文件来获取日志内容,影响了日志获取以及后续的日志分析等操作的实时性。
【发明内容】

[0004]本发明实施例的目的是提供一种应用程序的日志管理方法及系统,以解决现有的应用程序的日志管理方案中日志管理的实时性较差的问题。
[0005]第一方面,本发明实施例提供了一种应用程序的日志管理方法,包括:
[0006]日志消费者向日志服务器发送日志订阅请求,所述日志订阅请求中包括目标日志主题;
[0007]日志生产者以发布的方式向所述日志服务器发送所产生的当前日志;
[0008]当所述日志服务器确定接收到的所述当前日志与所述目标日志主题相匹配时,将所述当前日志发送至所述日志消费者。
[0009]另一方面,本发明实施例提供了一种应用程序的日志管理系统,包括日志消费者、 日志服务器和日志生产者;
[0010]所述日志消费者包括订阅请求发送模块,所述订阅请求发送模块用于向所述日志服务器发送日志订阅请求,所述日志订阅请求中包括目标日志主题;
[0011]所述日志生产者包括日志发布模块,所述日志发布模块用于以发布的方式向所述日志服务器发送所产生的当前日志;
[0012]所述日志服务器包括日志处理模块,所述日志处理模块用于在所述日志服务器确定接收到的所述当前日志与所述目标日志主题相匹配时,将所述当前日志发送至所述日志消费者。
[0013]本发明实施例中提供的应用程序的日志管理方案,日志消费者向日志服务器发送包括目标日志主题的日志订阅请求,当日志生产者以发布的方式向日志服务器发送所产生的当前日志后,日志服务器可确定接收到的当前日志是否与目标日志主题相匹配,若匹配, 说明日志消费者订阅了当前日志,直接将当前日志发送至日志消费者,而不会转化为本地文件待日志消费者主动读取,因此可有效提高日志消费者获取所需日志的速度及时效,方便日志消费者及时对所获取的日志进行分析等处理,改善了日志管理的实时性。【附图说明】
[0014]图1为本发明实施例一提供的一种应用程序的日志管理方法的流程示意图;
[0015]图2为本发明实施例二提供的一种应用程序的日志管理方法的流程示意图;[〇〇16]图3为本发明实施例二提供的一种应用程序的日志管理系统内部交互示意图; [〇〇17]图4为本发明实施例三提供的一种应用程序的日志管理方法的流程示意图;[〇〇18]图5为本发明实施例三提供的一种基于多线程的应用程序的日志管理系统内部交互示意图;
[0019]图6为本发明实施例四提供的一种应用程序的日志管理系统的结构框图。【具体实施方式】
[0020]下面结合附图并通过【具体实施方式】来进一步说明本发明的技术方案。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
[0021]在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各步骤描述成顺序的处理,但是其中的许多步骤可以被并行地、并发地或者同时实施。此外,各步骤的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。[〇〇22] 实施例一
[0023]图1为本发明实施例一提供的一种应用程序的日志管理方法的流程示意图,该方法可以由应用程序的日志管理系统执行,具体可通过应用程序的日志管理系统中配置的软件和/或硬件来实现。如图1所示,该方法包括:
[0024]步骤101、日志消费者向日志服务器发送日志订阅请求。
[0025]其中,日志订阅请求中包括目标日志主题。
[0026]示例性的,生成日志的一方可被称为日志生产者,获取日志并对日志进行分析等处理的一方可被称为日志消费者。日志生产者和日志消费者可以理解为客户端或者应用程序(App)。一般的,日志生产者和日志消费者可被配置在不同的服务器中。本实施例对日志生产者、日志服务器以及日志消费者之间的具体通信方式不作具体限定。日志消费者可通过网络向日志服务器发送日志订阅请求。[〇〇27]日志订阅请求中包括目标日志主题(topic),目标日志主题即日志消费者所关心的日志所属的主题。当日志主题被划分为不同的类型时,日志订阅请求中还可包括目标日志主题类型。本实施例中对日志订阅请求中包括的目标日志主题或目标日志主题类型的数量不作具体限定。
[0028]示例性的,日志服务器可以服务于多个日志消费者,当存在多个日志消费者时,日志服务器可分别记录不同日志消费者所发送的日志订阅请求。日志消费者可多次向日志服务器发送日志订阅请求以订阅或更新订阅属于不同主题的日志。
[0029]步骤102、日志生产者以发布的方式向日志服务器发送所产生的当前日志。
[0030]示例性的,日志生产者在以发布的方式向日志服务器发送所产生的当前日志时, 可对当前日志所属的主题进行标识,以便日志服务器进行后续的判断。[0031 ] 步骤103、当日志服务器确定接收到的当前日志与目标日志主题相匹配时,将当前日志发送至日志消费者。
[0032] 示例性的,日志服务器可通过当前日志的主题标识获知当前日志所属的主题,也可通过对当前日志的内容进行识别来获知当前日志所属的主题。当确定当前日志与目标日志主题相匹配时,说明日志消费者订阅了当前日志,将当前日志发送至日志消费者。在日志服务器接收到当前日志后,不会将当前日志转换为本地文件待日志消费者主动读取,而是直接对当前日志所属的主题进行判断,若当前日志被订阅,则直接将当前日志发送给订阅当前日志的日志消费者,从而提高了日志消费者获取所需日志的速度及时效。[〇〇33]本发明实施例一提供的应用程序的日志管理方法,日志消费者向日志服务器发送包括目标日志主题的日志订阅请求,当日志生产者以发布的方式向日志服务器发送所产生的当前日志后,日志服务器可确定接收到的当前日志是否与目标日志主题相匹配,若匹配, 说明日志消费者订阅了当前日志,直接将当前日志发送至日志消费者,而不会转化为本地文件待日志消费者主动读取,因此可有效提高日志消费者获取所需日志的速度及时效,方便日志消费者及时对所获取的日志进行分析等处理,改善了日志管理的实时性。[〇〇34] 实施例二[〇〇35]图2为本发明实施例二提供的一种应用程序的日志管理方法的流程示意图,本实施例以上述实施例为基础进行优化,在本实施例中,应用Redis的相关协议来实现日志的发布和订阅。[〇〇36]本实施例的方法包括如下步骤:[〇〇37] 步骤201、日志消费者通过Redis的订阅命令向日志服务器发送日志订阅请求。
[0038] Redis(Remote Dict1nary Server)是一种高性能的键(key)-值(value)数据库, 提供Java,C/C++,C#,PHP,JavaScript,Per 1,Ob ject-C,Python,Ruby,Erlang 等客户端,使用方便,已得到广泛的应用。Redis可通过PUBLISH(发布)、SUBSCRIBE(订阅)和PSUBSCRIBE (模式订阅)等命令实现发布和订阅功能。其中,SUBSCRIBE可用于订阅属于某个或某些主题的日志,PSUBSCRIBE可用于订阅同属于某类(或模式)的主题的日志。具体的,日志消费者可通过Redis的pub/sub接口向日志服务器发送日志订阅请求。本实施例中采用Redis的好处在于,充分利用Redi s的pub/sub协议,使日志生产者和日志消费者只需使用标准Redi s客户端就能进行发布和订阅消息。此外,日志生产者可能基于多种不同的语言进行编写,而几乎每种语言都有Redis客户端实现,所以可提高本实施例方法的适用范围。[〇〇39] 步骤202、日志生产者通过Redis的发布命令向日志服务器发送所产生的当前日V1、J、〇[0〇4〇] 示例性的,日志生产者可通过Redis的pub/sub接口向日志服务器发送所产生的当前日志。
[0041]优选的,日志生产者通过Redis的发布命令向日志服务代理发送所产生的当前日志;日志服务代理将当前日志转发至日志服务器。设置日志服务代理的好处在于,当需要修改日志生产者与日志服务器的对应关系时,在日志生产者一端进行配置的修改是很复杂的,而如果设置了日志服务代理,那么仅修改日志服务代理的相关配置,而无需修改日志生产者的配置即可实现上述对应关系的修改。例如,可通过修改日志服务代理的相关配置来实现在整个日志管理系统中部署多个日志服务器,增强系统的伸缩性,用以支撑较大的实时日志流。[〇〇42] 进一步的,可在每个日志生产者的所属服务器中配置日志服务代理,以简化日志生产者与日志服务代理之间的通信,进一步保证日志管理的实时性。[〇〇43] 步骤203、当日志服务器确定接收到的当前日志与目标日志主题相匹配时,将当前日志发送至日志消费者。[〇〇44]图3为本发明实施例二提供的一种应用程序的日志管理系统内部交互示意图。如图3所示,日志生产者(App)通过发布的方式向日志服务代理(Agent)发送日志;日志服务代理可将日志转发给日志服务器(Server),也可将日志转发给另一个日志服务代理,还可将日志直接转发给曾经从日志服务代理处订阅日志的日志消费者(如逻辑分析器Log Analyzer);日志服务器在接收到日志服务代理转发的日志后,可将日志发送给曾经在日志服务器进行订阅(Subscr ibe)或模式订阅(Psubscr ibe)的日志消费者。
[0045]优选的,本实施例所述方法基于C++语言实现。具体的,本实施例的方法中所涉及的程序代码可基于C++语言编写,并能打包成deb包,安装时只需一行命令,更新也只需一行命令,跑在各服务器上的日志服务代理占用中央处理器(Central Processing Unit,CPU) 小,当日志生产者与日志服务代理被部署于同一个服务器时,日志服务代理对日志生产者的运行几乎无影响。[〇〇46]本发明实施例二通过Redis的发布和订阅功能来实现应用程序的日志的发布及订阅,充分利用Redis的pub/sub协议,使日志生产者和日志消费者只需使用标准Redis客户端就能进行发布和订阅消息。此外,日志生产者可能基于多种不同的语言进行编写,而几乎每种语言都有Redis客户端实现,所以可提高本实施例方法的适用范围。[〇〇47] 实施例三[〇〇48]本发明实施例在上述实施例的基础上进行优化,提供一种应用程序的日志管理方法,该方法中的日志服务器基于多线程模式。
[0049]具体的,多线程模式包括:日志服务器的主线程分配第一工作线程用于接收日志生产者发送的日志,并分配第二工作线程用于向日志消费者发送日志;第一工作线程将接收到的当前日志推送至全局消息队列,并向日志服务器中的所有工作线程及存储线程发送接收通知,以使所有工作线程及存储线程根据接收通知指向全局消息队列中的当前日志; 当第二工作线程确定当前日志与目标日志主题相匹配时,对当前日志进行获取,并将当前日志发送至日志消费者。
[0050]图4为本发明实施例三提供的一种应用程序的日志管理方法的流程示意图,如图4 所示,该方法包括如下步骤:
[0051]步骤401、日志消费者向日志服务器发送日志订阅请求。[〇〇52] 步骤402、日志生产者以发布的方式向日志服务器发送所产生的当前日志。
[0053]步骤403、日志服务器的主线程分配第一工作线程用于接收日志生产者发送的日V1、J、〇
[0054]步骤404、第一工作线程将接收到的当前日志推送至全局消息队列,并向日志服务器中的所有工作线程及存储线程发送接收通知,以使所有工作线程及存储线程根据接收通知指向全局消息队列中的当前日志。
[0055]示例性的,各工作线程以及存储线程的处理速度可能不同,本实施例对工作线程以及存储线程指向当前日志的时机不作具体限定,可以同时指向当前日志,也可在完成对全局消息队列中当前日志之前的历史日志的处理后再指向当前日志。[〇〇56]示例性的,存储线程可基于Scribe的存储策略对当前日志进行存储处理。Scribe 是脸书(facebook)开源的日志收集系统,在facebook内部已经得到大量的应用。Scribe的存储策略的最大特点是容错性好,当后端的存储系统发生故障时,scribe会将数据写到本地磁盘上,当存储系统恢复正常后,scribe再将日志重新加载到存储系统中。存储系统即 scribe中的store,当前scribe支持非常多的存储方式,包括file(文件存储)、buffer(双层存储,一个主储存,一个副存储)、network(将数据转存至另一个scribe服务器)、bucket(包含多个store,通过hash将数据存到不同store中)、null(忽略数据)和multi(把数据同时存放到不同store中)等等。以上基于Scribe的存储策略可实现对日志的多样化存储管理,进一步提尚日志管理系统的性能。[〇〇57]步骤405、日志服务器的主线程分配第二工作线程用于向日志消费者发送日志,当第二工作线程确定当前日志与目标日志主题相匹配时,对当前日志进行获取,并将当前日志发送至日志消费者。
[0058]示例性的,对于当前日志来说,第一工作线程和第二工作线程可以是同一个工作线程,也可以是不同的工作线程。[〇〇59]图5为本发明实施例三提供的一种基于多线程的应用程序的日志管理系统内部交互示意图,如图5所示,日志服务器中包含主线程(Master Thread)、多个工作线程(Worker Thread)(为了便于说明,图中仅示出了两个工作线程)和存储线程(Storer Thread),每个工作线程可服务多个客户端(Client)(图中仅示出了两个客户端作为示意性说明)。日志生产者和日志消费者分别与日志服务器主线程建立通信连接,主线程接受日志生产者的日志发布并分配第一工作线程(图中左侧工作线程)用于接收日志生产者发布的日志,第一工作线程在接收到当前日志后,将当前日志推送至全局消息队列(Global Message Queue)。假设全局消息队列中包含n条消息,S卩n个日志,从左至右依次为最新消息(Message Latest) (消息1)、消息2至消息(n-1)以及最早消息(消息n),即最先被推送的日志位于全局消息队列的最右边,最后被推送的日志位于全局消息队列的最左边。同时,第一工作线程还会向日志服务器中的所有工作线程及存储线程发送接收通知,以使所有工作线程及存储线程根据接收通知指向全局消息队列中的当前日志。主线程接受日志消费者的日志订阅请求并分配第二工作线程用于订阅日志的发送,当第二工作线程(图中右侧工作线程)确定当前日志与目标日志主题相匹配时,对当前日志进行获取,并将当前日志发送至曾订阅过目标日志主题的日志消费者。而存储线程从全局消息队列中获取日志并进行存储,存储方式可包括多重存储(MultipleStore)、缓冲存储(BufferStore)以及优先存储(Pr1rityStore)等。
[0060]优选的,为了缓解内存压力,可定时对全局消息队列中的已转发给日志消费者并已完成存储的日志进行删除。例如,可将存储线程和所有工作线程所指向的最后一个日志之前推送至全局消息队列中的日志进行删除。
[0061]本发明实施例三中的日志服务器基于多线程模式,可充分利用单台日志服务器中的多个CPU核心,提高日志的收发效率,进一步增强了日志管理的实时性。试验表明,应用本发明实施例的方法,日志从生成开始到发送至日志消费者的延迟在1秒以内,基本可以达到实时推送的效果。
[0062]实施例四
[0063]图6为本发明实施例四提供的一种应用程序的日志管理系统的结构框图,通过执行应用程序的日志管理方法来对应用程序的日志进行管理,具体可通过应用程序的日志管理系统中配置的软件和/或硬件来实现。如图6所示,该系统包括日志消费者610、日志服务器620和日志生产者630。
[0064]其中,所述日志消费者610包括订阅请求发送模块611,所述订阅请求发送模块611 用于向所述日志服务器620发送日志订阅请求,所述日志订阅请求中包括目标日志主题。所述日志生产者630包括日志发布模块631,所述日志发布模块用于以发布的方式向所述日志服务器620发送所产生的当前日志。所述日志服务器620包括日志处理模块621,所述日志处理模块621用于在所述日志服务器620确定接收到的所述当前日志与所述目标日志主题相匹配时,将所述当前日志发送至所述日志消费者610。[〇〇65]本发明实施例四提供的应用程序的日志管理系统,可有效提高日志消费者获取所需日志的速度及时效,方便日志消费者及时对所获取的日志进行分析等处理,改善了日志管理的实时性。[0〇66]在上述实施例的基础上,所述订阅请求发送模块具体用于:通过Redi s的订阅命令向日志服务器发送日志订阅请求。所述日志发布模块具体用于:通过Redis的发布命令向所述日志服务器发送所产生的当前日志。[〇〇67]在上述实施例的基础上,该系统还可包括日志服务代理,所述日志发布模块具体用于:通过Redis的发布命令向日志服务代理发送所产生的当前日志;所述日志服务代理包括日志转发模块,所述日志转发模块用于将所述当前日志转发至所述日志服务器。[〇〇68]在上述实施例的基础上,所述日志处理模块基于多线程模式,所述多线程模式包括:所述日志服务器的主线程分配第一工作线程用于接收所述日志生产者发送的日志,并分配第二工作线程用于向所述日志消费者发送日志;所述第一工作线程将接收到的所述当前日志推送至全局消息队列,并向所述日志服务器中的所有工作线程及存储线程发送接收通知,以使所述所有工作线程及所述存储线程根据所述接收通知指向所述全局消息队列中的所述当前日志;当所述第二工作线程确定所述当前日志与所述目标日志主题相匹配时, 对所述当前日志进行获取,并将所述当前日志发送至所述日志消费者。
[0069]在上述实施例的基础上,所述多线程模式还包括:所述存储线程基于Scribe的存储策略对所述当前日志进行存储处理。
[0070]在上述实施例的基础上,所述系统基于C++语言实现。
[0071]上述实施例中提供的应用程序的日志管理系统可执行本发明任意实施例所提供的应用程序的日志管理方法,具备执行该方法相应的功能模块和有益效果。未在上述实施例中详尽描述的技术细节,可参见本发明任意实施例所提供的应用程序的日志管理方法。
[0072]注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解, 本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、 重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
【主权项】
1.一种应用程序的日志管理方法,其特征在于,包括:日志消费者向日志服务器发送日志订阅请求,所述日志订阅请求中包括目标日志主 题;日志生产者以发布的方式向所述日志服务器发送所产生的当前日志;当所述日志服务器确定接收到的所述当前日志与所述目标日志主题相匹配时,将所述 当前日志发送至所述日志消费者。2.根据权利要求1所述的方法,其特征在于,日志消费者向日志服务器发送日志订阅请 求,包括:日志消费者通过Redis的订阅命令向日志服务器发送日志订阅请求;日志生产者以发布的方式向所述日志服务器发送所产生的当前日志,包括:日志生产者通过Redis的发布命令向所述日志服务器发送所产生的当前日志。3.根据权利要求2所述的方法,其特征在于,日志生产者通过Redis的发布命令向所述 日志服务器发送所产生的当前日志,包括:所述日志生产者通过Redis的发布命令向日志服务代理发送所产生的当前日志;所述日志服务代理将所述当前日志转发至所述日志服务器。4.根据权利要求1所述的方法,其特征在于,所述日志服务器基于多线程模式,所述多 线程模式包括:所述日志服务器的主线程分配第一工作线程用于接收所述日志生产者发送的日志,并 分配第二工作线程用于向所述日志消费者发送日志;所述第一工作线程将接收到的所述当前日志推送至全局消息队列,并向所述日志服务 器中的所有工作线程及存储线程发送接收通知,以使所述所有工作线程及所述存储线程根 据所述接收通知指向所述全局消息队列中的所述当前日志;当所述第二工作线程确定所述当前日志与所述目标日志主题相匹配时,对所述当前日 志进行获取,并将所述当前日志发送至所述日志消费者。5.根据权利要求4所述的方法,其特征在于,还包括:所述存储线程基于Scribe的存储 策略对所述当前日志进行存储处理。6.根据权利要求1所述的方法,其特征在于,所述方法基于C++语言实现。7.—种应用程序的日志管理系统,其特征在于,包括日志消费者、日志服务器和日志生 产者;所述日志消费者包括订阅请求发送模块,所述订阅请求发送模块用于向所述日志服务 器发送日志订阅请求,所述日志订阅请求中包括目标日志主题;所述日志生产者包括日志发布模块,所述日志发布模块用于以发布的方式向所述日志 服务器发送所产生的当前日志;所述日志服务器包括日志处理模块,所述日志处理模块用于在所述日志服务器确定接 收到的所述当前日志与所述目标日志主题相匹配时,将所述当前日志发送至所述日志消费者。8.根据权利要求7所述的系统,其特征在于,所述订阅请求发送模块具体用于:通过Redis的订阅命令向日志服务器发送日志订阅请求;所述日志发布模块具体用于:通过Redis的发布命令向所述日志服务器发送所产生的当前日志。9.根据权利要求8所述的系统,其特征在于,还包括日志服务代理,所述日志发布模块 具体用于:通过Redis的发布命令向日志服务代理发送所产生的当前日志;所述日志服务代理包括日志转发模块,所述日志转发模块用于将所述当前日志转发至 所述日志服务器。10.根据权利要求7所述的系统,其特征在于,所述日志处理模块基于多线程模式,所述 多线程模式包括:所述日志服务器的主线程分配第一工作线程用于接收所述日志生产者发送的日志,并 分配第二工作线程用于向所述日志消费者发送日志;所述第一工作线程将接收到的所述当前日志推送至全局消息队列,并向所述日志服务 器中的所有工作线程及存储线程发送接收通知,以使所述所有工作线程及所述存储线程根 据所述接收通知指向所述全局消息队列中的所述当前日志;当所述第二工作线程确定所述当前日志与所述目标日志主题相匹配时,对所述当前日 志进行获取,并将所述当前日志发送至所述日志消费者。11.根据权利要求10所述的系统,其特征在于,所述多线程模式还包括:所述存储线程 基于Scribe的存储策略对所述当前日志进行存储处理。
【文档编号】G06F17/30GK106021315SQ201610294396
【公开日】2016年10月12日
【申请日】2016年5月5日
【发明人】董成城, 李逸超
【申请人】智者四海(北京)技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1