一种调整日志级别的方法、装置、设备及可读介质与流程

文档序号:23003240发布日期:2020-11-20 11:51阅读:105来源:国知局
一种调整日志级别的方法、装置、设备及可读介质与流程

本发明涉及计算机技术领域,尤其涉及一种调整日志级别的方法、装置、设备及可读介质。



背景技术:

openstack(开源云计算平台管理平台项目)是一个庞大的项目,各个组件功能也比较复杂。当运行过程出现非预期的结果时,很多情况下,仅通过简单的报错信息很难确定问题出在哪,不知道怎么解决或者规避,有些甚至没有报错信息。

当出现问题要去排查,想获得系统运行更多的信息时,一种有效的方案就是打开openstack相关组件的debug功能,打印更多日志,获取信息解决问题。但是目前openstack各个组件的日志级别都是启动时设置好,一般情况下都是info级别。想调整成debug级别,只能修改配置,重新启动组件。排查完问题还需要再改配置,重启组件。

但是有些问题可能依赖于运行时间,或者运行后某些操作后才能稳定复现问题,一旦重启进程后,可能复现问题比较困难。有些客户的生产环境,重启进程是不被允许的,或者需要复杂的申请流程,这就造成打开debug困难或者耗时。打开完debug,排查完问题还需要关掉,因为不关掉会一直打印过多信息,不利于监控。



技术实现要素:

有鉴于此,本发明实施例的目的在于提出一种调整日志级别的方法、装置、设备及可读介质,通过对有rest接口的组件设置中间件、对没有rest接口的组件进行广播,在不重启组件的相关进程的情况下,动态修改组件的日志级别,当云平台运行异常时,可实现动态打开组件debug功能,提供更多日志信息,方便问题排查,在重启组件比较危险、生产环境或重启不好复现的情况下,尤为重要。

基于上述目的,本发明实施例的一方面提供了一种调整日志级别的方法,包括以下步骤:判断目标组件是否具备rest接口;若是目标组件具备rest接口,将包含目标组件和调整模式的请求信息发送至中间件;以及通过中间件获取目标组件中日志级别参数,并基于调整模式设置日志级别参数。

在一些实施方式中,基于调整模式设置日志级别参数包括:若是调整模式为一次调整,将日志级别参数设置为调整值;响应于日志完成打印,将日志级别参数重新设置为默认值。

在一些实施方式中,将包含所述目标组件和调整模式的请求信息发送至中间件还包括:前置反向代理服务并在反向代理服务的配置中增加目标组件和调整模式;

通过所述中间件获取所述目标组件中日志级别参数,并基于所述调整模式设置所述日志级别参数包括:通过反向代理服务获取目标组件中日志级别参数,并基于调整模式设置日志级别参数。

在一些实施方式中,还包括:响应于日志完成打印,将反向代理服务的配置中增加内容删除并重启反向代理服务,以将日志级别设置为默认级别。

在一些实施方式中,还包括:若是目标组件不具备rest接口,基于目标组件生成包含目标组件列表和对应日志级别的广播消息,并将广播消息发送至所有组件;每个组件接收广播消息并判断是否在目标组件列表中;若是组件在目标组件列表中,根据广播消息对日志级别进行调整。

在一些实施方式中,还包括:响应于日志完成打印,更新并发送广播消息至所有组件;若是组件在目标组件列表中,根据广播消息将日志级别调整为默认级别。

在一些实施方式中,所述组件在所述目标组件列表中包括:若是目标组件列表为none或all,认为所有组件均为目标组件。

本发明实施例的另一方面,还提供了一种调整日志级别的装置,包括:判断模块,配置用于判断目标组件是否具备rest接口;第一处理模块,配置用于若是目标组件具备rest接口,将包含目标组件和调整模式的请求信息发送至中间件;以及第一调整模块,配置用于通过中间件获取目标组件中日志级别参数,并基于调整模式设置日志级别参数。

在一些实施方式中,第一调整模块进一步配置用于:若是调整模式为一次调整,将日志级别参数设置为调整值;响应于日志完成打印,将日志级别参数重新设置为默认值。

在一些实施方式中,第一处理模块进一步配置用于:若是目标组件具备rest接口,前置反向代理服务并在反向代理服务的配置中增加目标组件和调整模式;第一调整模块进一步配置用于:通过反向代理服务获取目标组件中日志级别参数,并基于调整模式设置日志级别参数。

在一些实施方式中,第一调整模块进一步配置用于:响应于日志完成打印,将反向代理服务的配置中增加内容删除并重启反向代理服务,以将日志级别设置为默认级别。

在一些实施方式中,还包括第二处理模块,配置用于:若是目标组件不具备rest接口,基于目标组件生成包含目标组件列表和对应日志级别的广播消息,并将广播消息发送至所有组件;第二调整模块,配置用于:每个组件接收广播消息并判断是否在目标组件列表中;若是组件在目标组件列表中,根据广播消息对日志级别进行调整。

在一些实施方式中,第二调整模块进一步配置用于:响应于日志完成打印,更新并发送广播消息至所有组件;若是组件在目标组件列表中,根据广播消息将日志级别调整为默认级别。

在一些实施方式中,第二调整模块进一步配置用于:若是目标组件列表为none或all,认为所有组件均为目标组件。

本发明实施例的再一方面,还提供了一种计算机设备,包括:至少一个处理器;以及存储器,存储器存储有可在处理器上运行的计算机指令,指令由处理器执行时实现上述方法的步骤。

本发明实施例的再一方面,还提供了一种计算机可读存储介质,计算机可读存储介质存储有被处理器执行时实现如上方法步骤的计算机程序。

本发明具有以下有益技术效果:通过对有rest接口的组件设置中间件、对没有rest接口的组件进行广播,在不重启组件的相关进程的情况下,动态修改组件的日志级别,当云平台运行异常时,可实现动态打开组件debug功能,提供更多日志信息,方便问题排查,在重启组件比较危险、生产环境或重启不好复现的情况下,尤为重要。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的实施例。

图1为本发明提供的调整日志级别的方法的实施例的示意图;

图2为本发明提供的调整日志级别的装置的实施例的示意图;

图3为本发明提供的计算机设备的实施例的示意图;

图4为本发明提供的计算机可读存储介质的实施例的示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明实施例进一步详细说明。

需要说明的是,本发明实施例中所有使用“第一”和“第二”的表述均是为了区分两个相同名称非相同的实体或者非相同的参量,可见“第一”“第二”仅为了表述的方便,不应理解为对本发明实施例的限定,后续实施例对此不再一一说明。

基于上述目的,本发明实施例的第一个方面,提出了调整日志级别的方法的实施例。图1示出的是本发明提供的调整日志级别的方法的实施例的示意图。如图1所示,本发明实施例包括如下步骤:

s1、判断目标组件是否具备rest接口;

s2、若是目标组件具备rest接口,将包含目标组件和调整模式的请求信息发送至中间件;以及

s3、通过中间件获取目标组件中日志级别参数,并基于调整模式设置日志级别参数。

在本实施例中,以云计算平台openstack为例,一般情况下日志的级别是info,将日志的级别改成debug后会打印更多的日志信息。openstack中各个组件,大部分通过restapi或者消息队列进行通信。也就是组件已具备接收api请求的能力,或者监听消息队列的能力。

针对已具备提供restapi能力的组件。因为openstack提供restapi的组件,都是采用的wsgi框架协议实现,因此设计一种中间件,中间件接收到api请求后,检查请求的headers里是否包含x-log-level,如果包含这个header,获取当前的log对象,根据请求里设置的值,设置当前的日志级别。当想日志级别改成debug时,就可以在header里设置为debug,该处理进程后序所有请求执行时,打印日志的级别都会是debug。想改回info时,可以在header里设置为info。

在本实施例中,openstack的restapi服务都是通过paste将各个中间件以及wsgiapp做组合。中间件可以通过paste配置加入openstack提供api的组件中,提供服务。openstack中中间件都是使用的oslo.middleware这个python库,本发明设计中间件继承于oslo_middleware.base.configurablemiddleware。重载方法process_request,判定请求header中是否包含x-log-level,如果不包含,直接不处理。如果包含判定是否是一次性设置,如果是一次性设置,保留原有日志级别,变更日志级别,如果不是一次性设置,直接变更日志级别。重载方法process_response,判定是否保存了原有日志级别,如果未保存,不处理,如果保存了,恢复原有日志级别。

在本发明的一些实施例中,基于调整模式设置日志级别参数包括:若是调整模式为一次调整,将日志级别参数设置为调整值;响应于日志完成打印,将日志级别参数重新设置为默认值。

在本实施例中,还可以设置仅本次请求生效的日志级别。当想设置仅本次请求生效时,可以将x-log-level设置为once-debug,该中间件接收到header信息后,保存当前的日志级别,将日志级别设置成debug,紧接着进行请求处理,本次请求内的日志都会是debug级别,请求处理完后,再将日志级别设置为原有值。

在本发明的一些实施例中,将包含所述目标组件和调整模式的请求信息发送至中间件还包括:前置反向代理服务并在反向代理服务的配置中增加目标组件和调整模式。通过所述中间件获取所述目标组件中日志级别参数,并基于所述调整模式设置所述日志级别参数包括:通过反向代理服务获取目标组件中日志级别参数,并基于调整模式设置日志级别参数。

通过增加中间件,使得提供api的组件,已经具备了在不重启的情况下,动态调整日志级别。但是如果想改变日志级别,需要调用方加上相应的header来调整日志级别。为了操作更加简单,在本实施例中,在提供restapi服务的组件,前置反向代理服务,需要调用api时,调用反向代理服务,由反向代理服务调用相应组件。以openstack经常使用的反向代理的服务haproxy为例,可通过haproxy配置中增加headerhttp-requestset-headerx-log-levelonce-debug,实现不通过调用方加header的方式,自动增加header,使请求api的日志级别变成debug,而且能保证每个请求的日志级别都是debug。当需要调整日志级别时,只需修改haproxy配置和重启haproxy,不影响openstack组件的运行进程和状态。

在本发明的一些实施例中,还包括:响应于日志完成打印,将反向代理服务的配置中增加内容删除并重启反向代理服务,以将日志级别设置为默认级别。

在本实施例中,当需要使用默认的info时,可以修改haproxy配置文件删除刚才添加的配置,然后重启haproxy即可。当需要调整日志级别时,只需修改haproxy配置和重启haproxy,不影响openstack组件的运行进程和状态。

在本发明的一些实施例中,还包括:若是目标组件不具备rest接口,基于目标组件生成包含目标组件列表和对应日志级别的广播消息,并将广播消息发送至所有组件;每个组件接收广播消息并判断是否在目标组件列表中;若是组件在目标组件列表中,根据广播消息对日志级别进行调整。

在本实施例中,针对具备接收消息队列消息能力的组件,给组件增加一个fanout类型的消费主题t-log,处理该消费主题的endpoint增加处理方法set_log_level。set_log_level方法,接收参数log_level和components,log_level参数指要设定的日志级别。其中,components指生效的组件列表,为none和all是指全部组件生效。当接收到广播过来的日志级别消息时,判断是否在生效组件范围内,如果不在生效组件范围内不处理;在生效范围内,根据信息内容要求设置的,获取当前的log对象,设置日志级别。

在本实施例中,以neutron的组件为例,进行适配该方案。针对neutron_server这种多进程且不同用途的组件。新设计一个neutronplugin。plugin继承于servicepluginbase类,plugin包含方法set_log_level,接收参数log_level,components。增加start_rpc_listeners,用于rpcworker进程可生效处理,在start_rpc_listeners方法中增加注册消费者,监听topic=t-log,endpoint为当前coreplugin,fanout开关打开。增加方法start_rpc_state_reports_listeners,用于rpcreportworker进程可生效处理,直接调用start_rpc_listeners即可。在plugin的init函数里定义一个rpcworker,用于periodworker进程可生效处理,rpcworker的plugin为自身即可,再调用self.add_worker注册上。该适配方案可实现在不动neutron代码的情况下,使得neutronserver相关使用rpc进程均具备动态调整日志级别的功能,而且能根据配置文件,决定是否加载该功能。

在本实施例中,以agent类型的组件为例,进行适配该方案。这类组件一般是单进程。以neutorn为例,很多组件使用neutron_lib.rpc.service或者neutron-dhcp-agentneutron-l3-agentd等它的继承类启动时,在类中增加方法set_log_level,接收参数log_level,components。在start方法中增加注册消费者,监听topic=t-log,endpoint增加本身。这些组件即可实现启动时注册监听日志变动。核心思想为有统一基类的在积累中增加注册即可。对于不是统一基类的的组件,可参考实现。因为openstack中都是使用oslo_message实现连接消息队列,监听消息队列。

在本实施例中,使用openstack常用组件oslo.config用于解析命令行,使用oslo.message实现连接消息队列,发送fanout类型消息。命令行允许输入参数:--config-file用于接收配置文件路径,配置文件中,包含连接消息队列的地址密码信息;--topic指定fanout的exchange名称,默认t-log;--components指定生效的组件,默认为none,即全部监听该消息的组件。多个组件中间用英文逗号连接;--level指定要设置的日志界别,允许infodebugerror。默认为debug。

在本发明的一些实施例中,还包括:响应于日志完成打印,更新并发送广播消息至所有组件;若是组件在目标组件列表中,根据广播消息将日志级别调整为默认级别。

在本发明的一些实施例中,组件在目标组件列表中包括:若是目标组件列表为none或all,认为所有组件均为目标组件。

需要特别指出的是,上述调整日志级别的方法的各个实施例中的各个步骤均可以相互交叉、替换、增加、删减,因此,这些合理的排列组合变换之于调整日志级别的方法也应当属于本发明的保护范围,并且不应将本发明的保护范围局限在实施例之上。

基于上述目的,本发明实施例的第二个方面,提出了一种调整日志级别的装置。图2示出的是本发明提供的调整日志级别的装置的实施例的示意图。如图2所示,本发明实施例包括如下模块:判断模块s11,配置用于判断目标组件是否具备rest接口;第一处理模块s12,配置用于若是目标组件具备rest接口,将包含目标组件和调整模式的请求信息发送至中间件;以及第一调整模块s13,配置用于通过中间件获取目标组件中日志级别参数,并基于调整模式设置日志级别参数。

在一些实施方式中,第一调整模块s13进一步配置用于:若是调整模式为一次调整,将日志级别参数设置为调整值;响应于日志完成打印,将日志级别参数重新设置为默认值。

在一些实施方式中,第一处理模块进一步配置用于:若是目标组件具备rest接口,前置反向代理服务并在反向代理服务的配置中增加目标组件和调整模式;第一调整模块进一步配置用于:通过反向代理服务获取目标组件中日志级别参数,并基于调整模式设置日志级别参数。

在一些实施方式中,第一调整模块进一步配置用于:响应于日志完成打印,将反向代理服务的配置中增加内容删除并重启反向代理服务,以将日志级别设置为默认级别。

在一些实施方式中,还包括第二处理模块,配置用于:若是目标组件不具备rest接口,基于目标组件生成包含目标组件列表和对应日志级别的广播消息,并将广播消息发送至所有组件;第二调整模块,配置用于:每个组件接收广播消息并判断是否在目标组件列表中;若是组件在目标组件列表中,根据广播消息对日志级别进行调整。

在一些实施方式中,第二调整模块进一步配置用于:响应于日志完成打印,更新并发送广播消息至所有组件;若是组件在目标组件列表中,根据广播消息将日志级别调整为默认级别。

在一些实施方式中,第二调整模块进一步配置用于:若是目标组件列表为none或all,认为所有组件均为目标组件。

基于上述目的,本发明实施例的第三个方面,提出了一种计算机设备。图3示出的是本发明提供的计算机设备的实施例的示意图。如图3所示,本发明实施例包括如下装置:至少一个处理器s21;以及存储器s22,存储器s22存储有可在处理器上运行的计算机指令s23,指令由处理器执行时实现以上方法的步骤。

本发明还提供了一种计算机可读存储介质。图4示出的是本发明提供的计算机可读存储介质的实施例的示意图。如图4所示,计算机可读存储介质存储s31有被处理器执行时执行如上方法的计算机程序s32。

最后需要说明的是,本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关硬件来完成,调整日志级别的方法的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,程序的存储介质可为磁碟、光盘、只读存储记忆体(rom)或随机存储记忆体(ram)等。上述计算机程序的实施例,可以达到与之对应的前述任意方法实施例相同或者相类似的效果。

此外,根据本发明实施例公开的方法还可以被实现为由处理器执行的计算机程序,该计算机程序可以存储在计算机可读存储介质中。在该计算机程序被处理器执行时,执行本发明实施例公开的方法中限定的上述功能。

此外,上述方法步骤以及系统单元也可以利用控制器以及用于存储使得控制器实现上述步骤或单元功能的计算机程序的计算机可读存储介质实现。

本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。为了清楚地说明硬件和软件的这种可互换性,已经就各种示意性组件、方块、模块、电路和步骤的功能对其进行了一般性的描述。这种功能是被实现为软件还是被实现为硬件取决于具体应用以及施加给整个系统的设计约束。本领域技术人员可以针对每种具体应用以各种方式来实现的功能,但是这种实现决定不应被解释为导致脱离本发明实施例公开的范围。

在一个或多个示例性设计中,功能可以在硬件、软件、固件或其任意组合中实现。如果在软件中实现,则可以将功能作为一个或多个指令或代码存储在计算机可读介质上或通过计算机可读介质来传送。计算机可读介质包括计算机存储介质和通信介质,该通信介质包括有助于将计算机程序从一个位置传送到另一个位置的任何介质。存储介质可以是能够被通用或专用计算机访问的任何可用介质。作为例子而非限制性的,该计算机可读介质可以包括ram、rom、eeprom、cd-rom或其它光盘存储设备、磁盘存储设备或其它磁性存储设备,或者是可以用于携带或存储形式为指令或数据结构的所需程序代码并且能够被通用或专用计算机或者通用或专用处理器访问的任何其它介质。此外,任何连接都可以适当地称为计算机可读介质。例如,如果使用同轴线缆、光纤线缆、双绞线、数字用户线路(dsl)或诸如红外线、无线电和微波的无线技术来从网站、服务器或其它远程源发送软件,则上述同轴线缆、光纤线缆、双绞线、dsl或诸如红外线、无线电和微波的无线技术均包括在介质的定义。如这里所使用的,磁盘和光盘包括压缩盘(cd)、激光盘、光盘、数字多功能盘(dvd)、软盘、蓝光盘,其中磁盘通常磁性地再现数据,而光盘利用激光光学地再现数据。上述内容的组合也应当包括在计算机可读介质的范围内。

以上是本发明公开的示例性实施例,但是应当注意,在不背离权利要求限定的本发明实施例公开的范围的前提下,可以进行多种改变和修改。根据这里描述的公开实施例的方法权利要求的功能、步骤和/或动作不需以任何特定顺序执行。此外,尽管本发明实施例公开的元素可以以个体形式描述或要求,但除非明确限制为单数,也可以理解为多个。

应当理解的是,在本文中使用的,除非上下文清楚地支持例外情况,单数形式“一个”旨在也包括复数形式。还应当理解的是,在本文中使用的“和/或”是指包括一个或者一个以上相关联地列出的项目的任意和所有可能组合。

上述本发明实施例公开实施例序号仅仅为了描述,不代表实施例的优劣。

本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。

所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本发明实施例公开的范围(包括权利要求)被限于这些例子;在本发明实施例的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,并存在如上的本发明实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。因此,凡在本发明实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本发明实施例的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1