Login| Sign Up| Help| Contact|

Patent Searching and Data


Title:
LOG EXTRACTION METHOD UNDER SERVER CLUSTER AND SERVER CLUSTER
Document Type and Number:
WIPO Patent Application WO/2015/085456
Kind Code:
A1
Abstract:
Disclosed are a log extraction method under a server cluster and a server cluster. The log extraction method under the server cluster provided in the embodiment of the present invention comprises: acquiring, by a first log component, information about a user and/or a service associated with a log according to configuration data when recording a log of a first application service to a corresponding first log library, and recording the information in a context field set for the log; learning, by the first log component, an output expression in a log calling request according to the log calling request of a request end that is received by the first application service, the output expression being used for indicating a condition which is met by information about a user and/or a service associated with a log being requested to be called; matching, by the first log component, the output expression with a context field of the log saved in the first log library; and outputting a successfully matched log to an output port designated by the log calling request.

Inventors:
LV MINGWEI (CN)
Application Number:
PCT/CN2013/088863
Publication Date:
June 18, 2015
Filing Date:
December 09, 2013
Export Citation:
Click for automatic bibliography generation   Help
Assignee:
BEIJING D MEDIA COMM TECHNOLOGY CO LTD (CN)
International Classes:
H04L12/24
Foreign References:
CN102891873A2013-01-23
CN101515245A2009-08-26
JP2011210180A2011-10-20
CN103383687A2013-11-06
Attorney, Agent or Firm:
BEIJING LONGAN LAW FIRM (CN)
北京市隆安律师事务所 (CN)
Download PDF:
Claims:
权利 要求 书

1、 一种服务器集群下的日志提取方法, 包括:

第一日志组件在将第一应用服务的日志记录至对应的第一日志库时, 根据配置数据获取与所述日志关联的用户和 /或业务的信息,并将所述信息 记录在为所述日志设置的上下文字段中;

所述第一日志组件根据第一应用服务接收到的请求端的日志调用请 求, 获知所述日志调用请求中的输出表达式, 所述输出表达式用于指示与 请求调用的日志关联的用户和 /或业务的信息满足的条件;

所述第一日志组件将所述输出表达式与所述第一日志库中保存的日 志的上下文字段进行匹配;

所述第一日志组件将匹配成功的日志输出至所述日志调用请求所指 定的输出端口。

2、 根据权利要求 1所述的方法, 其中, 所述方法还包括:

所述第一日志组件向配置中心服务器发送订阅信息, 所述订阅信息包 括第一日志组件的配置数据中的版本号;

当所述订阅信息中的版本号与配置中心服务器中对应的配置数据中 的版本号不一致时, 所述第一日志组件接收配置中心服务器发送的版本更 新提示信息;

所述第一日志组件根据所述版本更新提示信息从配置中心服务器获 取新的配置数据并启用该新的配置数据。

3、 根据权利要求 1所述的方法, 其中, 所述方法还包括:

当第一应用服务调用第二应用服务时, 应用服务间的调用组件将所述 日志调用请求指定的输出端口和对应的输出表达式包含在应用服务调用 请求中发送至第二应用服务;

第二日志组件将所述输出表达式与第二应用服务对应的第二日志库 中保存的日志的上下文字段进行匹配;

所述第二日志组件将第二日志库中匹配成功的日志输出至所述曰志 调用请求所指定的输出端口。

4、 根据权利要求 1至 3任一项所述的方法, 其中, 所述方法还包括: 对没有匹配成功的日志, 第一日志组件判断所述日志的级别是否大于 或等于当前配置的允许输出的日志级别, 若是, 第一日志组件将所述曰志 输出至所述日志调用请求所指定的输出端口, 若否, 第一日志组件不输出 所述日志。

5、 根据权利要求 1 所述的方法, 其中, 所述将第一应用服务的曰志 记录至对应的第一日志库包括:

将第一应用服务为满足采样策略的业务请求生成的日志记录至对应 的第一日志库, 其中, 所述采样策略至少包括下述的一种:

随机记录应用服务对业务请求生成的日志; 或者,

记录应用服务为特定用户的业务请求生成的日志; 或者,

记录应用服务为特定 IP地址的业务请求生成的日志。

6、 根据权利要求 1 所述的方法, 其中, 所述将匹配成功的日志输出 至所述日志调用请求所指定的输出端口包括:

将匹配成功的日志输出至所述日志调用请求指定的日志分析及测试 服务器的输出端口, 以将所述日志展示在日志分析及测试服务器的交互界 面进行错误排查。

7、 一种服务器集群, 包括多个应用服务器, 所述应用服务器中包括 第一应用服务器, 所述第一应用服务器包括第一应用服务、 第一日志组件 和第一日志库;

所述第一应用服务, 用于承载业务, 接收来自请求端的业务请求并处 理;

所述第一日志库, 用于存储第一应用服务的日志;

所述第一日志组件, 用于在将第一应用服务的日志记录至对应的第一 日志库时, 根据配置数据获取与所述日志关联的用户和 /或业务的信息, 并 将所述信息记录在为所述日志设置的上下文字段中; 根据第一应用服务接 收到的请求端的日志调用请求, 获知所述日志调用请求中的输出表达式, 所述输出表达式用于指示与请求调用的日志关联的用户和 /或业务的信息 满足的条件; 将所述输出表达式与所述第一日志库中保存的日志的上下文 字段进行匹配; 将匹配成功的日志输出至所述日志调用请求所指定的输出 端口。

8、 根据权利要求 7 所述的服务器集群, 其中, 还包括配置中心服务 器, 用于保存并更新集群中所有应用服务的日志组件的配置数据, 定时轮 询并判断第一日志组件的订阅信息中的版本号与配置中心服务器中对应 的配置数据的版本号是否一致, 当不一致时, 向第一日志组件发送版本更 新提示信息, 以及, 根据所述版本更新提示信息将新的配置数据发送至第 一曰志组件;

所述第一日志组件, 还用于向配置中心服务器发送订阅信息, 所述订 阅信息包括所述第一日志组件的配置数据中的版本号; 当所述订阅信息中 的版本号与配置中心服务器中对应的配置数据的版本号不一致时, 接收配 置中心服务器发送的版本更新提示信息; 根据所述版本更新提示信息从配 置中心服务器获取新的配置数据并启用该新的配置数据。

9、 根据权利要求 7 所述的服务器集群, 其中, 还包括第二应用服务 器以及应用服务间的调用组件, 所述第二应用服务器包括第二应用服务、 第二日志组件和第二日志库;

所述应用服务间的调用组件, 用于当第一应用服务调用第二应用服务 时, 将所述日志调用请求指定的输出端口和对应的输出表达式包含在应用 服务调用请求中发送至第二应用服务;

所述第二日志组件, 用于将所述输出表达式与第二应用服务对应的第 二曰志库中保存的日志的上下文字段进行匹配; 并将第二日志库中匹配成 功的日志输出至所述日志调用请求所指定的输出端口。

10、 根据权利要求 7至 9任一项所述的服务器集群, 其中, 所述第一 曰志组件和第二日志组件, 还分别用于对没有匹配成功的日志, 判断所述 日志的级别是否大于或等于当前配置的允许输出的日志级别, 若是, 将所 述日志输出至所述日志调用请求所指定的输出端口, 若否, 不输出所述日 士

1 1、 根据权利要求 7所述的服务器集群, 其中, 所述第一日志组件, 还用于将第一应用服务为满足采样策略的业务请求生成的日志记录至对 应的第一日志库, 其中, 所述采样策略至少包括下述的一种: 随机记录应用服务对业务请求生成的日志; 或者,

记录应用服务为特定用户的业务请求生成的日志; 或者,

记录应用服务为特定 IP地址的业务请求生成的日志。

12、 根据权利要求 7所述的服务器集群, 其中, 还包括日志分析及测 试服务器, 用于控制所述配置中心服务器中配置数据的更新, 以及根据接 收的日志调用请求, 从应用服务器获取到对应的日志, 将所述日志展示在 交互界面以进行错误排查。

Description:
服务器集群下的日志提取方法和服务器集群

技术领域 本发明涉及计算机网络技术领域, 特别涉及一种服务器集群下的曰志 提取方法和服务器集群。 背景技术

在服务器系统的开发与维护中, 分析日志是一种主要的排错手段, 在 不同的领域下也出现了 ^艮多成熟的日志系统, 允许将日志写入本地的文本 文件或中心数据库文件。

然而, 现有的日志系统已无法满足大规模服务器集群 的运维需要, 例 如, 现有日志系统将不同用户或不同业务的日志混 杂在一起输出及处理, 导致在集群的几百台服务器中通过日志排查单 个用户或业务的错误时难 度过高。 发明内容 鉴于上述问题, 本发明实施例提供了一种服务器集群下的日志 提取方 法和服务器集群, 以解决现有方案在集群中通过曰志排查单个用 户或业务 的错误时难度过高的问题等。

为了达到上述目的, 本发明实施例采用的技术方案如下:

一方面, 本发明实施例提供了一种服务器集群下的日志 提取方法, 包 括:

第一日志组件在将第一应用服务的日志记录至 对应的第一日志库时, 根据配置数据获取与日志关联的用户和 /或业务的信息,并将信息记录在为 曰志设置的上下文字段中; 第一日志组件根据第一应用服务接收到的请求 端的日志调用请求, 获知日志调用请求中的输出表达式, 该输出表达式用 于指示与请求调用的日志关联的用户和 /或业务的信息满足的条件;第一日 志组件将输出表达式与第一日志库中保存的日 志的上下文字段进行匹配; 第一日志组件将匹配成功的日志输出至日志调 用请求所指定的输出端口。 另一方面, 本发明实施例提供了一种服务器集群, 包括多个应用服务 器。 该应用服务器中包括第一应用服务器, 第一应用服务器包括第一应用 服务、 第一日志组件和第一日志库。

第一应用服务, 用于承载业务, 接收来自请求端的业务请求并处理; 第一日志库, 用于存储第一应用服务的日志; 第一日志组件, 用于在将第 一应用服务的日志记录至对应的第一日志库时 , 根据配置数据获取与曰志 关联的用户和 /或业务的信息, 并将信息记录在为日志设置的上下文字段 中; 根据第一应用服务接收到的请求端的日志调用 请求, 获知日志调用请 求中的输出表达式, 该输出表达式用于指示与请求调用的日志关联 的用户 和 /或业务的信息满足的条件;将输出表达式与 一日志库中保存的日志的 上下文字段进行匹配; 将匹配成功的日志输出至日志调用请求所指定 的输 出端口。 由上所述,本发明实施例通过将与日志关联的 用户和 /或业务的信息记 录在为日志设置的上下文字段中, 以及将输出表达式与保存的日志的上下 文字段进行匹配、 输出匹配成功的日志至指定端口的技术手段, 能够利用 用户和 /或业务的信息从集群中筛选出需要的日志, 某一特定用户的日志 或某一特定业务的日志, 并能够将单个用户或特定业务的日志输出至指 定 的服务器, 从而极大便利了在集群中通过日志追踪和排查 单个用户或业务 错误的操作, 提高了整个系统排错的效率, 满足了大规模服务器集群的运 维需要。 附图说明 图 1示出了根据本发明一个实施例的一种服务器 群的结构示意图; 图 2示出了根据本发明又一个实施例的更新日志 件的配置数据的流 程示意图; 图 3示出了根据本发明又一个实施例的针对单个 务调用的日志追踪 流程; 图 4示出了根据本发明又一个实施例的基于整个 群环境下的面向单 个业务的日志抽取方法; 图 5 示出了根据本发明又一个实施例的一种服务器 集群下的日志提 取方法流程图。

具体实施方式 为使本发明的目的、 技术方案和优点更加清楚, 下面将结合附图对本 发明实施方式作进一步地详细描述。 本发明一个实施例提供的一种服务器集群, 包括多个应用服务器。 该 集群中还可以设置有配置中心服务器和日志分 析及测试服务器。参见图 L 示出了本实施例提供的一个服务器集群的结构 示意图。 该服务器集群中包 括应用服务器 100、 配置中心服务器 200和日志分析及测试服务器 300。 应用服务器 100中包括应用服务 110、 日志组件 111和日志库 112。 下面 分别对这些器件进行说明。

应用服务 110用于承载业务, 接收来自请求端的业务请求并处理。 应 用服务的日志会通过日志组件 111进行记录。 记录时, 应用服务 110会将 当前的用户或业务的相关信息、 日志等级、 线程及会话相关的信息传给日 志组件 111。 当前的用户或业务的相关信息,可以为诸如用 户 ID、业务 ID、 用户状态或业务状态以及其它对用户或业务的 描述信息等, 日志组件 111 将这些相关信息记录在日志的上下文字段中, 以利用这些相关信息来匹配 日志调用请求中的输出表达式。

曰志组件 111为可复用的代码库,向上提供记录应用服务 日志的接口 , 向下将日志存储至日志库 112。 日志组件 111可以根据日志等级、 线程信 息、 会话信息、 用户信息和 /或业务信息判断该日志是否应当进行记录。

本实施例提供的日志组件 111具有为日志设置上下文( Context )字段 的功能, 用于将用户和 /或业务的信息设置在日志的上下文字段中, 以及将 日志调用请求中的输出表达式与上下文字段进 行匹配。例如,通过该功能, 曰志组件 111在将应用 1务 110的日志记录至对应的日志库 112时, 曰志 组件 111 根据自身已获取的配置数据获取与日志关联的 用户和 /或业务的 信息, 并将该信息记录在为日志设置的上下文字段中 ; 以及, 根据应用服 务 110接收到的请求端的日志调用请求, 获知该日志调用请求中的输出表 达式,该输出表达式用于指示与请求调用的日 志关联的用户和 /或业务的信 息满足的条件, 则将输出表达式与日志库 112中保存的日志的上下文字段 进行匹配; 将匹配成功的日志输出至日志调用请求所指定 的输出端口, 如 输出至文本文件、 数据库及 RPC ( Remote Procedure Call Protocol, 远程过 程调用协议)接口中。

曰志库 112存储应用服务的日志数据。 一个应用服务对应一个日志组 件和日志库。

配置中心服务器 200在整个服务器集群中同步所有应用服务器中 日志 组件的配置数据。 配置中心服务器 200保存并更新集群中所有应用服务的 日志组件的配置数据, 例如, 对服务器集群中的第一应用服务器中的第一 日志组件, 配置中心服务器 200定时轮询第一日志组件的订阅信息中包括 的版本号 (即第一日志组件的配置数据中的版本号) 与配置中心服务器保 存的对应的配置数据中的版本号是否一致, 当版本号不一致时, 向第一曰 志组件发送版本更新提示信息, 以及, 根据该版本更新提示信息将新的配 置数据发送至第一日志组件。 相应的, 第一日志组件会向配置中心服务器 发送订阅信息, 该订阅信息包括配置数据中的版本号; 当该订阅信息中包 括的版本号与配置中心服务器中保存的对应的 配置数据中的版本号不一 致时, 接收配置中心服务器发送的版本更新提示信息 ; 根据版本更新提示 信息从配置中心服务器获取新的配置数据并启 用该新的配置数据。

其中, 在本实施例所描述的集群环境下, 配置中心服务器 200所使用 的日志的配置数据主要包含以下内容:

1 : 级别(Level)信息: 从低到高分别为: 调用跟踪 (TRACE ) 日志、 调试 (DEBUG ) 日志、 业务(INFO ) 日志、 警告 (WARN ) 日志、 错误 ( ERROR ) 日志。

当待输出的日志的级别大于或等于当前配置的 允许输出的日志级别

2: 输出器 (Appender ) : 将日志信息输出到持久化设备或 RPC接口 的输出器。 输出方式包含文本输出、 数据库输出和 RPC输出。

3 :过滤器 (Filter):用于对日志进行过滤,以判断该日志是 否需要输出。 在日志是否输出的判断上, 先判断过滤器, 如果所有过滤器都中立, 则根 据级别进行判断, 其中过滤器可以级联。 本实施例的过滤器可以根据线程 信息、 上下文字段及当前用户信息进行判断。 过滤器可以返回以下结果之 "通过" : 直接输出此日志。

"不通过" : 直接忽略此日志。

"中立" : 过滤器不做表态, 交给下一个过滤器, 或按照日志级别进 行处理。

需要说明的是, 本实施例中的过滤器包括用于上下文字段与输 出表达 式匹配的过滤器(简称为上下文过滤器) , 将该上下文过滤器和相关的上 下文字段的列表设置在配置中心服务器的全局 配置当中。

可选的, 该上下文过滤器返回两种结果 "通过" 和 "中立" 。 将日志 输入至上下文过滤器进行过滤, 当日志中的输出表达式与上下文过滤器对 应的上下文字段匹配时, 上下文过滤器返回的结果是 "通过" ; 当日志中 的输出表达式与上下文过滤器对应的上下文字 段不匹配时, 上下文过滤器 返回的结果是 "中立" 。

当上下文过滤器返回的结果是 "中立" , 即该日志与该对上下文过滤 器中没有匹配成功的日志, 日志组件将该日志发送至下一过滤器, 如果所 有上下文过滤器返回的结果都是中立, 对该日志的级别进行判断, 即用于 级别判断的过滤器判断该日志的级别是否大于 或等于当前配置的允许输 出的日志级别时, 若是, 日志组件将该日志输出至日志调用请求所指定 的 输出端口, 若否, 日志组件不输出该日志。

日志分析及测试服务器 300用于控制配置中心服务器中配置数据的更 新, 以及根据接收的日志调用请求, 从应用服务器获取到对应的日志, 将 该日志展示在交互界面以进行错误排查。 具体的, 日志分析及测试服务器 300主要面向运维人员, 可以通过运维人员的日志配置设置指令, 增加针 对用户、 针对会话的日志配置条件, 并且将日志信息实时的反映在查询界 面上, 另外可以由开发或运维人员日志分析及测试服 务器 300发起日志调 用 "青求(如测试^清求) , 并将测试请求的日志完整输出到日志分析及测 试 服务器 300的交互界面上以便于问题的排查。 本发明又一个实施例主要对应用服务器中日志 组件的配置数据的更 新流程进行说明, 关于本发明服务器集群的其他内容参见其他实 施例的描 述。 参见图 2, 示出了本实施例提供的更新日志组件的配置数 据的流程示 意图, 包括如下步骤:

S200: 日志组件向配置中心服务获取配置数据。 曰志组件对应的应用服务会首先和配置中心服 务建立一条长连接并 保持, 通过该长连接向配置中心服务发送读取配置请 求。 如图 2所示, 配 置中心服务器侧可以具体包括配置中心服务、 配置库和配置分析服务。 配 置库中保存配置数据, 配置数据包括配置中心服务器侧的配置信息和 版本 号, 配置分析服务负责配置信息的更新操作。

日志组件向配置中心服务发送读取配置请求, 配置中心服务将该配置 请求传递至配置库, 配置库通过配置中心服务将所请求的配置数据 返回至 曰志组件, 然后, 进入步骤 S201。

S201 : 日志组件向配置中心服务订阅配置数据。

日志组件向配置中心服务器发送订阅配置请求 , 通过该订阅配置请求 将日志组件的订阅信息发送至配置中心服务器 , 订阅信息包括日志组件的 配置数据中信息的版本号。 订阅信息中还可以包括日志组件对应的应用服 务的名称、 日志组件所在的应用服务器以及本次订阅的时 间。

配置中心服务将各日志组件的订阅信息保存至 配置库。 当需要执行对 配置数据的更新时, 进入步骤 S202。

S202: 配置分析服务更新配置数据。

配置分析服务执行更新时, 将配置库中需要更新的配置信息及其版本 号修改为新的配置信息和新的版本号。

S203 : 配置中心服务轮询配置库中存储的日志组件的 订阅信息与配置 库中存储的配置数据, 并判断订阅信息中的版本号与配置库中对应配 置数 据中的版本号是否一致, 如果否, 执行 S204。

具体的, 配置中心服务定时轮询配置库中所有日志组件 的订阅信息与 配置库中的配置数据, 并判断订阅信息中包括的配置数据中的版本号 与配 置库的配置数据中对应的版本号是否一致, 如果不一致, 说明配置信息的 版本需要更新, 则执行 S204。

S204: 配置中心服务器向日志组件发送版本更新提示 信息。

当订阅信息中的版本号与配置数据中的版本号 不一致时, 配置中心服 务器查找与订阅此数据的应用服务建立的长连 接, 通过此长连接, 向日志 组件发送版本更新提示信息, 进入步骤 S205。

S205: 日志组件根据所述版本更新提示信息向配置中 心服务器获取新 的配置数据。

日志组件接收到版本更新提示信息后, 通过配置中心服务获取配置数 据, 此时会获得到新的配置信息及新的版本号。

日志组件向配置中心服务器发送读取配置请求 , 配置中心服务器将该 配置请求传递至配置库, 配置库通过配置中心服务器将新的配置信息及 版 本号返回至日志组件。

S206: 日志组件执行配置刷新操作, 如果刷新成功, 执行 S207。

日志组件通过配置刷新操作, 如果配置刷新成功, 让新获取的配置数 据生效, 从而可以启用该新的配置数据, 进入步骤 S207。

本步骤中, 如果刷新操作失败, 则无法完成对日志组件中的配置信息 的更新, 无法继续执行订阅操作, 所以当配置中心服务再次执行轮询操作 时还会触发配置数据的更新操作, 直到刷新成功为止。

S207: 日志组件继续执行订阅操作,向配置中心服务 器订阅配置数据。 当刷新操作成功后, 日志组件继续执行订阅操作, 此操作将新获取到 的版本号传给配置中心, 配置中心更新订阅信息中的, 已获取配置版本字 段。 此时日志组件的配置数据已经更新为最新版本 , 且轮询操作不会重新 触发配置数据的更新操作。 本发明又一个实施例主要对在集群中针对单个 用户或单个业务的曰 志追踪并提取的流程进行说明, 关于本发明服务器集群的其他内容参见其 他实施例的描述。

本实施例提供的一种针对单个用户的日志追踪 并提取流程包括如下 步骤:

步骤 1 : 请求端通过交互界面输入需要追踪的用户 ID。

例如, 运维人员可以通过日志分析及测试服务器的交 互界面输入需要 追踪的用户的用户 ID, 向应用服务发送日志调用请求。 该日志调用请求中 的输出表达式用于指示请求调用的日志满足的 条件为: 请求调用的日志的 用户 ID= S志调用请求中的用户 ID。 日志调用请求中还包括输出日志的指 定端口。

应用服务收到日志调用请求后,判断是否存在 输出表达式,如果存在, 则将输出表达式保存到当前线程的上下文当中 , 以通过该线程执行对单个 用户日志的追踪。

步骤 2: 应用服务启动日志组件的上下文过滤器并添加 输出器和输出 地址。 在全局配置中增加一个上下文过滤器, 日志组件的配置数据中具有该 上下文过滤器。 本场景中该上下文过滤器的过滤条件为日志上 下文字段中 的用户 ID与日志调用请求中的用户 ID相等, 则返回的结果为 "通过" , 输出该日志, 否则 "中立" 。 而上述添加的输出地址为日志调用请求中指 定的输出端口。

需要说明的是, 日志组件在对用户的日志进行记录时, 会根据配置数 据获取与日志关联的用户的信息, 例如, 配置数据指示需要获取的与日志 关联的用户信息包括用户 ID, 则日志组件在记录日志时将用户 ID记录在 为该日志设置的上下文字段中。

步骤 3 : 当上下文过滤器返回的结果是通过时, 日志组件通过输出器 将匹配成功的日志输出所述输出地址。

日志组件将日志调用请求中的输出表达式与日 志库中保存的日志的 上下文字段进行匹配, 匹配成功的日志为用户 ID符合的日志, 通过输出 器将该日志输出至指定的输出端口。

集群中所有应用服务器的日志组件都可以根据 上述步骤 1至 3中的操 作将用户 ID符合的日志截取出来, 输出至指定的输出端口, 实现单个用 户的日志的追踪。

步骤 4: 由日志分析及测试服务器实时轮询所有应用服 务器上的日志 输出, 收集输出结果并展示在日志分析及测试服务器 的界面上, 供运维人 员查询。 参见图 3 ,示出了本实施例提供的针对单个业务调用的 志追踪流程, 包括如下步骤:

S300: 请求端向应用服务发送业务调用请求, 进入步骤 S301。

请求端将日志输出的端口地址及输出表达式, 放到业务调用请求的扩 展字段中, 发起业务调用。 即可以将日志调用请求中的内容设置在业务调 用请求的扩展字段中。

S301 : 应用服务从业务调用请求中提取出输出表达式 。

应用服务收到业务调用请求后,判断是否存在 输出表达式,如果存在, 将该输出表达式提取出来, 进入步骤 S302。

S302: 应用服务添加基于 RPC的日志输出器, 然后, 进入步骤 S303。 对业务的调用通常是基于 RP C方式的,本实施例在日志组件中添加了 一个基于 RPC的日志输出器, 增加了基于 RPC的日志输出方案, 包括如 下:

添加 RPC的日志输出器,该输出器的输出地址为日志 调用请求中指定 的输出端口, 例如该输出地址为 RPC 日志接收端服务器的地址 tcp:〃192.168.1.100:7078。 当需要输出日志时, 先将需要输出的日志信息放 到队列中。 由于业务产生的日志数量较多, 另外启动一个定时任务, 定期 从队列中将日志信息批量读取出来发送到上述 地址。 如果发送失败, 且重 试次数超过 N次 (N的取值根据系统设置) , 则自动移除此基于 RPC的 输出器, 以避免性能消耗。

S303 : 应用服务设置日志组件的上下文过滤器。

应用服务将输出表达式保存到当前线程的上下 文当中。 通过当前线程 运行上下文过滤器进行对业务调用日志的追踪 , 所以该线程需要通过线程 上下文获知输出表达式。 应用服务设置日志组件的上下文过滤器为开启 状 态, 继续执行步骤 S304。

S304: 应用服务执行业务代码。

当应用服务执行业务代码实现业务的调用时, 会生成日志, 日志组件 将这些日志写入日志库中。 日志组件在写日志时, 会根据日志组件的配置 数据获取与业务相关的信息, 将这些信息记录在为业务的日志设置的上下 文字段中。在执行步骤 S304的同时或执行步骤 S304之后,进入步骤 S305。

S305: 日志组件利用上下文过滤器将日志的上下文字 段与业务调用请 求中的输出表达式匹配, 对日志进行过滤。

当日志组件执行日志输出时, 上下文过滤器为开启状态, 则判断本线 程的上下文中是否存在输出表达式, 若输出表达式存在, 则日志组件会将 本线程的上下文过滤器过滤出的日志输出到之 前添加的指定输出端口上。 对于其他的业务请求, 因为这些请求并不在当前线程执行, 也不存在线程 上下文, 所以由这些业务请求产生的日志不会被输出至 指定端口上。 日志 过滤操作结束后, 进入步骤 S306。

S306: 当此业务代码执行结束后,应用服务通知请求 端业务调用完成, 进入步骤 S307。

S307: 关闭在本次业务调用中开启的上下文过滤器, 仅此次业务调用 的全部日志被输出到指定地址。 在服务器集群环境下, 业务调用通常不仅仅局限在一台应用服务器 上, 很可能存在并发等场景, 针对多台应用服务器执行一次业务调用的并 发场景, 本发明又一实施例提供了一种基于整个集群环 境下的面向单个业 务的日志抽取方法, 能够将特定业务在不同服务器间的调用的日志 全部输 出至特定服务器。 参见图 4, 具体包括如下步骤:

S400: 日志分析及测试服务器向接入层服务发起采样 申请, 进入步骤 S401。

对于多个应用服务器的场景, 集群中会设置一个接入层服务, 负责业 务请求在各应用服务器之间的调度, 保持负载的均衡。

可以由运维人员在日志分析及测试服务器中向 涉及到的接入层服务 发起采样申请。 采样申请中包括采样配置, 该采样配置可以包括采样次数 (如 N次)、 采样出的日志输出的地址(如可以将输出端口 设置为日志测 试与分析服务器) 以及采样策略。 示例性的, 采样策略可以包括下述的一 种或多种:

随机记录应用服务对业务请求生成的日志; 或者,

记录应用服务为特定用户的业务请求生成的日 志; 或者,

记录应用服务为特定 IP地址的业务请求生成的日志。

S401 : 请求端发送业务请求至接入层服务, 接入层服务将业务请求转 发至对应的应用服务, 进入步骤 S402。

接入层服务根据接收到采样配置, 针对请求端 (如客户端) 的业务请 求进行判断, 如果满足采样配置, 则将请求端的业务请求转发给后端实际 的应用服务, 如第一应用服务器。 在业务请求中包括用于追踪日志的输出 表达式以及日志的指定的输出端口。

通过采样策略可以针对需要关注的特定用户或 IP的日志(如信息发送 失败的用户或 IP )进行记录, 并将这些日志记录至特定的服务器中, 从而 便利了错误的追踪和排查。

S402: 当第一应用服务接收到业务请求后, 判断业务请求中是否存在 输出表达式, 若存在, 则将输出表达式保存到当前线程上下文当中, 设置 日志组件的上下文过滤器为开启状态并添加输 出器及输出端口; 第一应用 服务执行业务处理, 将过滤出的日志通过输出器输出至指定的输出 端口 (如日志分析及测试系统) 。

S402中的具体内容可以参见上述步骤 S301至 S305中的详细描述,然 后进入步骤 S403。

S403: 第一应用服务通过应用服务间的调用组件调用 第二应用服务 , 进入步骤 S404。

上述调用组件可以为基于 RPC的调用组件。当第一应用服务通过 RPC 调用组件调用第二应用服务的时候,由 RPC调用组件判断第一应用服务的 当前线程上下文是否存在输出表达式, 如果存在, 将此输出表达式及指定 的输出地址传递到向第二应用服务发送的业务 调用请求中后, 通过该业务 调用请求调用第二应用服务。

S404: 第二应用服务接收来自第一应用服务的基于 RPC 的业务调用 请求; 第二应用服务判断该业务调用请求中是否存在 输出表达式,若存在, 则将输出表达式保存到第二应用服务的当前线 程上下文当中, 设置第二日 志组件的上下文过滤器为开启状态并添加输出 器及输出端口。 第二应用服 务执行业务处理, 将过滤出的日志输出至指定端口 (如日志分析及测试系 统) 。

S404中的具体内容可以参见上述步骤 S301至 S305的详细描述。应用 间的调用结束后, 进入步骤 S405。

S405 : 第二应用服务结束调用, 返回调用结束消息给第一应用服务, 同时第二应用服务移除自己的线程上下文标记 , 防止继续输出日志。

S406: 第一应用服务接收到来自第二应用服务的调用 结束消息后, 继 续进行业务处理。

S406中的具体操作与步骤 S402中的相同, 然后进入步骤 S407。

S407: 第一应用服务业务调用完成后, 通过接入层服务向请求端返回 业务处理完毕的应答, 同时移除自己的线程上下文标记, 防止继续输出日 士

S408: 接入层服务将应答转发给请求端后, 如果已经完成了本次采样 任务, 则结束采样。

由上, 本实施例弥补了现有日志系统缺少针对大规模 服务器集群设计 的不足, 为大型服务器集群下的实时日志抓取提供了解 决方案, 另外本实 施例提供了针对单次业务的日志追踪, 在大规模的业务系统中, 大幅度提 高了整体排错的效率。

本发明又一个实施例提供了一种服务器集群下 的日志提取方法, 参见 图 5 , 该方法包括如下步骤: S500: 第一日志组件将第一应用服务的日志记录至对 应的第一日志库 时, 根据配置数据获取与日志关联的用户和 /或业务的信息, 并将该信息记 录在为日志设置的上下文字段中。

服务器集群中包括多个应用服务器, 第一应用服务器为其中的任一应 用服务器, 每个应用服务器中都包括一个应用服务、 一个日志组件和一个 曰志库。 第一应用服务器中的应用服务、 日志组件和日志库, 可被称之为 第一应用服务、 第一日志组件和第一日志库。 上述第一日志组件使用的配 置数据中包括但不局限于日志的级别、 输出器和过滤器。 在此, 第一日志 组件主要根据上下文过滤器中的内容获知与日 志关联的用户和 /或业务的 信息。

本实施例还可以针对特定用户和 /或业务的日志进行记录并将日志记 录至特定的服务器, 则上述将第一应用服务的日志记录至对应的第 一曰志 库还包括: 将第一应用服务为满足采样策略的业务请求生 成的日志记录至 对应的第一日志库, 其中, 该采样策略至少包括下述的一种: 随机记录应 用服务对业务请求生成的日志; 或者, 记录应用服务为特定用户的业务请 求生成的日志;或者,记录应用服务为特定 IP地址的业务请求生成的日志。

S501 : 第一日志组件根据第一应用服务接收到的请求 端的日志调用请 求, 获知该日志调用请求中的输出表达式, 该输出表达式用于指示与请求 调用的日志关联的用户和 /或业务的信息满足的条件。

例如, 输出表达式用于指示请求调用日志为用户 ID为 ID1 的用户的 日志, 或者输出表达式用于指示请求调用日志为用户 年龄不大于 18 岁的 用户的日志等等。

S502: 第一日志组件将输出表达式与第一日志库中保 存的日志的上下 文字段进行匹配。

第一日志组件可以通过上下文过滤器实现该匹 配操作。

S503: 第一日志组件将匹配成功的日志输出至日志调 用请求所指定的 输出端口。

该指定的输出端口可以是某一特定的服务器。 例如, 将匹配成功的日 志输出至日志调用请求指定的日志分析及测试 服务器的输出端口, 以将该 日志展示在日志分析及测试服务器的交互界面 , 进行错误排查。

对没有匹配成功的日志, 第一日志组件会继续根据级别对该日志进行 过滤, 例如第一日志组件判断该日志的级别是否大于 或等于当前配置的允 许输出的日志级别时, 若是, 将该日志输出至日志调用请求所指定的输出 端口, 若否, 不输出该日志。

本实施例还提供了一种对第一日志组件中的配 置数据更新的处理方 法, 包括: 向集群中的配置中心服务器发送订阅信息, 该订阅信息包括配 置数据中的版本号; 当订阅信息中包括的版本号与配置中心服务器 中的对 应的配置数据中的版本号与不一致时, 接收配置中心服务器发送的版本更 新提示信息; 根据版本更新提示信息从配置中心服务器获取 新的配置数据 并启用该新的配置数据。上述更新方法的详细 描述可以参见上述步骤 S200 至 S207中的内容。

本实施例还提供了一种将特定业务在不同服务 器间的调用的日志全 部输出至特定服务器的方法, 包括: 当第一应用服务调用第二应用服务时, 应用服务间的调用组件(如 RPC调用组件)将日志调用请求指定的输出端 口和对应的输出表达式包含在应用服务调用请 求中发送至第二应用服务; 第二日志组件将输出表达式与第二应用服务对 应的第二日志库中保存的 曰志的上下文字段进行匹配; 第二日志组件将第二日志库中匹配成功的曰 志输出至日志调用请求所指定的输出端口。 具体内容还可以参见上述步骤 S400至 S408中的描述。

由上所述,本发明实施例通过将与日志关联的 用户和 /或业务的信息记 录在为日志设置的上下文字段中, 以及将输出表达式与保存的日志的上下 文字段进行匹配、 输出匹配成功的日志至指定端口的技术手段, 能够利用 用户和 /或业务的信息从集群中筛选出需要的日志, 某一特定用户的日志 或某一特定业务的日志, 并能够将单个用户或特定业务的日志输出至指 定 的服务器, 从而极大便利了在集群中通过日志追踪和排查 单个用户或业务 错误的操作, 提高了整个系统排错的效率, 满足了大规模服务器集群的运 维需要。

为了便于清楚描述本发明实施例的技术方案, 在发明的实施例中, 采 用了"第一"、 "第二 "等字样对功能和作用基本相同的相同项或相 项进行 区分, 本领域技术人员可以理解"第一"、 "第二 "等字样并不对数量和执行 次序进行限定。

以上所述仅为本发明的较佳实施例而已, 并非用于限定本发明的保护 范围。 凡在本发明的精神和原则之内所作的任何修改 、 等同替换、 改进等, 均包含在本发明的保护范围内。