CN111290870A - 一种检测异常的方法和装置 - Google Patents

一种检测异常的方法和装置 Download PDF

Info

Publication number
CN111290870A
CN111290870A CN201811494563.5A CN201811494563A CN111290870A CN 111290870 A CN111290870 A CN 111290870A CN 201811494563 A CN201811494563 A CN 201811494563A CN 111290870 A CN111290870 A CN 111290870A
Authority
CN
China
Prior art keywords
code
statement
source
source code
executed
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201811494563.5A
Other languages
English (en)
Inventor
王硕
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Jingdong Century Trading Co Ltd
Beijing Jingdong Shangke Information Technology Co Ltd
Original Assignee
Beijing Jingdong Century Trading Co Ltd
Beijing Jingdong Shangke Information Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Jingdong Century Trading Co Ltd, Beijing Jingdong Shangke Information Technology Co Ltd filed Critical Beijing Jingdong Century Trading Co Ltd
Priority to CN201811494563.5A priority Critical patent/CN111290870A/zh
Publication of CN111290870A publication Critical patent/CN111290870A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0751Error or fault detection not based on redundancy
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/079Root cause analysis, i.e. error or fault diagnosis

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种检测异常的方法和装置,涉及计算机技术领域。该方法的一具体实施方式包括:根据失败作业的日志消息在源代码文件中定位源代码,将所述日志消息与所述源代码进行匹配,确定执行过的代码语句和没有执行过的代码语句;根据所述执行过的代码语句和没有执行过的代码语句,确定所述源代码的执行轨迹;根据所述日志消息和所述源代码的执行轨迹,在所述源代码中定位导致失败作业的异常。该实施方式能够解决人工诊断系统故障效率低的技术问题。

Description

一种检测异常的方法和装置
技术领域
本发明涉及计算机技术领域,尤其涉及一种检测异常的方法和装置。
背景技术
大规模分布式系统正在成为IT行业的重要引擎,对于大型商业系统,运行时异常(包括错误行为或意外的长时间响应时间)通常会导致用户不满或利益损失。开发分布式系统运行时会打印日志消息来跟踪系统的运行状态,以帮助确定程序运行时可能出现的问题。运维人员在诊断系统或软件故障时,通常会结合失败作业打印的日志信息与相应的源代码来判断故障原因。
在实现本发明过程中,发明人发现现有技术中至少存在如下问题:
大多数系统通过产生并收集日志来帮助运维人员进行故障排除,运维人员通常通过人工检查系统打印的日志并结合源代码来检测异常情况。然而,首先,通过人工查看日志消息来判断代码执行轨迹是低效且耗时的,而且随着许多大规模和复杂应用程序的部署,在短时间内可能会有数千个失败的作业发生,其次,单个开发人员或系统管理员可能没有足够了解源代码,导致人工检测异常原因变得非常困难和低效;最后,分布式系统的规模和复杂性日益增加,也进一步降低了人工诊断系统故障的效率,因此人工逐一检查这些作业并分析源代码来检测异常是不可行的。
发明内容
有鉴于此,本发明实施例提供一种检测异常的方法和装置,以解决人工诊断系统故障效率低的技术问题。
为实现上述目的,根据本发明实施例的一个方面,提供了一种检测异常的方法,包括:
根据失败作业的日志消息在源代码文件中定位源代码,将所述日志消息与所述源代码进行匹配,确定执行过的代码语句和没有执行过的代码语句;
根据所述执行过的代码语句和没有执行过的代码语句,确定所述源代码的执行轨迹;
根据所述日志消息和所述源代码的执行轨迹,在所述源代码中定位导致失败作业的异常。
可选地,将所述日志消息与所述源代码进行匹配,确定执行过的代码语句和没有执行过的代码语句,包括:
根据所述日志消息中的日志信息,在所述源代码中确定打印所述日志信息的代码语句,将所述代码语句作为执行过的代码语句;
判断所述源代码中具有打印功能的代码语句是否在所述日志中打印了相应的日志信息,若否,则将所述具有打印功能的代码语句作为没有执行过的代码语句。
可选地,根据所述执行过的代码语句和没有执行过的代码语句,确定所述源代码的执行轨迹,包括:
将所述源代码分割成多个代码块;
根据所述执行过的代码语句、没有执行过的代码语句以及所述多个代码块之间的逻辑关系,标记各个代码块的执行状态,从而确定所述源代码的执行轨迹。
可选地,一个代码语句只属于一个代码块,同一代码块中的代码语句的执行状态相同;每个代码块具有一个父代码块,子代码块列表,互斥代码块列表,相反代码块列表,一致代码块列表和相干代码块列表。
可选地,根据所述日志消息和所述源代码的执行轨迹,在所述源代码中定位导致失败作业的异常,包括:
根据所述日志消息中导致失败作业的参数,从所述源代码中搜索出所述参数;
根据所述源代码的执行轨迹和所述参数,在所述源代码中定位导致失败作业的根源参数值。
另外,根据本发明实施例的另一个方面,提供了一种检测异常的装置,包括:
定位模块,用于根据失败作业的日志消息在源代码文件中定位源代码,将所述日志消息与所述源代码进行匹配,确定执行过的代码语句和没有执行过的代码语句;
分析模块,用于根据所述执行过的代码语句和没有执行过的代码语句,确定所述源代码的执行轨迹;
检测模块,用于根据所述日志消息和所述源代码的执行轨迹,在所述源代码中定位导致失败作业的异常。
可选地,将所述日志消息与所述源代码进行匹配,确定执行过的代码语句和没有执行过的代码语句,包括:
根据所述日志消息中的日志信息,在所述源代码中确定打印所述日志信息的代码语句,将所述代码语句作为执行过的代码语句;
判断所述源代码中具有打印功能的代码语句是否在所述日志中打印了相应的日志信息,若否,则将所述具有打印功能的代码语句作为没有执行过的代码语句。
可选地,所述分析模块用于:
将所述源代码分割成多个代码块;
根据所述执行过的代码语句、没有执行过的代码语句以及所述多个代码块之间的逻辑关系,标记各个代码块的执行状态,从而确定所述源代码的执行轨迹。
可选地,一个代码语句只属于一个代码块,同一代码块中的代码语句的执行状态相同;每个代码块具有一个父代码块,子代码块列表,互斥代码块列表,相反代码块列表,一致代码块列表和相干代码块列表。
可选地,所述检测模块用于:
根据所述日志消息中导致失败作业的参数,从所述源代码中搜索出所述参数;
根据所述源代码的执行轨迹和所述参数,在所述源代码中定位导致失败作业的根源参数值。
根据本发明实施例的另一个方面,还提供了一种电子设备,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现上述任一实施例所述的方法。
根据本发明实施例的另一个方面,还提供了一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现上述任一实施例所述的方法。
上述发明中的一个实施例具有如下优点或有益效果:因为采用将日志消息与源代码进行匹配,确定执行过的代码语句和没有执行过的代码语句,从而确定源代码的执行轨迹,并最终定位出导致失败作业的异常的技术问题。本发明实施例通过日志消息与源代码的匹配关系,确定执行过的代码语句和没有执行过的代码语句,从而自动地分析出源代码的执行轨迹,而不需要运维人员对源代码有深入的了解。本发明实施例还可以结合分割后的代码块之间的逻辑关系,更加快速地自动分析出作业运行中源代码的执行轨迹,从而帮助运维人员大幅提高分析失败作业、定位故障原因的效率,及时解决作业失败问题、确保服务质量。
上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是根据本发明实施例的检测异常的方法的主要流程的示意图;
图2是根据本发明一个可参考实施例的代码块之间的逻辑关系图;
图3是根据本发明另一个可参考实施例的代码块之间的逻辑关系图;
图4是根据本发明又一个可参考实施例的代码块之间的逻辑关系图;
图5是根据本发明一个可参考实施例的检测异常的方法的主要流程的示意图;
图6是根据本发明一个可参考实施例的源代码的示意图;
图7是根据本发明一个可参考实施例的源代码中执行过的代码语句的示意图;
图8是根据本发明一个可参考实施例的源代码的执行轨迹;
图9是根据本发明一个可参考实施例的在源代码中定位出异常的示意图;
图10是根据本发明实施例的检测异常的装置的主要模块的示意图;
图11是本发明实施例可以应用于其中的示例性系统架构图;
图12是适于用来实现本发明实施例的终端设备或服务器的计算机系统的结构示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
图1是根据本发明实施例的检测异常的方法的主要流程的示意图。作为本发明的一个实施例,如图1所示,所述检测异常的方法可以包括:
步骤101,根据失败作业的日志消息在源代码文件中定位源代码,将所述日志消息与所述源代码进行匹配,确定执行过的代码语句和没有执行过的代码语句。
当系统作业发生失败时,通常会有相关的日志消息被打印出来。在该步骤101中,首先获取失败作业的日志文件;然后将日志文件中的日志消息与运行程序的源代码文件中的代码语句进行比较,与相应日志消息最相似的代码语句认为是打印该日志消息的代码语句,这些代码语句即为所述日志消息对应的源代码;最后,将所述日志消息与在源代码文件中定位出的源代码进行匹配,确定肯定执行过的代码语句和肯定没有执行过的代码语句。需要指出的是,一般来说,一个日志消息可以在源代码文件中定位出一个函数代码,不同函数代码打印出的日志消息不同。因此在源代码文件中定位出的源代码所在的函数代码就是运维人员要分析的对象。
将所述日志消息与所述源代码进行匹配,确定执行过的代码语句和没有执行过的代码语句,包括:根据所述日志消息中的日志信息,在所述源代码中确定打印所述日志信息的代码语句,将所述代码语句作为执行过的代码语句;判断所述源代码中具有打印功能的代码语句是否在所述日志中打印了相应的日志信息,若否,则将所述具有打印功能的代码语句作为没有执行过的代码语句。由于打印相应日志消息的代码语句在该作业执行过程中是肯定执行过的,而且如果具有打印日志功能的代码语句没有打印出相应日志消息,则可以确定该代码语句在该作业运行过程中一定没有执行过。
步骤102,根据所述执行过的代码语句和没有执行过的代码语句,确定所述源代码的执行轨迹。
在该步骤中,根据步骤101中确定出的肯定执行过的代码语句和肯定没有执行过的代码语句,确定所述源代码中各个代码语句的执行状态,从而确定所述源代码的执行轨迹。其中,所述执行状态包括:执行过、没有执行过或者不确定是否执行过。
可选地,步骤102可以包括:将所述源代码分割成多个代码块;根据所述执行过的代码语句、没有执行过的代码语句以及所述多个代码块之间的逻辑关系,标记各个代码块的执行状态,从而确定所述源代码的执行轨迹。本发明实施例先将步骤101中定位出的源代码分割成多个代码块,每个代码块都包含一些代码语句,一个代码语句只能属于一个代码块。同一代码块中的代码语句的执行状态相同,每个代码块具有一个父代码块,子代码块列表,互斥代码块列表,相反代码块列表、一致代码块列表和相干代码块列表。如果没有某一种代码块,则该代码块对应的列表为空。因此,可以根据各个代码块之间的逻辑关系和步骤101确定出的代码语句的执行状态,对各个代码块的执行状态进行标记,从而确定哪些代码语句执行过、哪些代码语句没有执行过、哪些代码语句不确定是否执行过,由此确定所述源代码的执行轨迹。
具体地,各类代码块之间的关系与执行状态规则如下:
1.父子:如果当前块执行,则它的父块肯定执行,并且其子块执行状态不发生变化;如果当前块不执行,则其任何一个子块肯定都不执行,但其父块的执行状态不发生变化。
2.互斥:如果当前块执行,那么它的任何一个互斥块都不会执行。但是,如果当前块不执行,则其互斥块执行状态不发生变化。相应的关键词为:if-else,switch,throw,return,break,continue。另外,如果代码块A与代码块B互斥,则代码块B与代码块A互斥。
3.相反:如果代码块A没有执行过,那么搜索所有的祖先块,以查看祖先块是否执行过。对于一定执行过的代码块A的每个祖先(表示为代码块B),与代码块B相同层中的代码块A的相反块一定执行过。但是如果当前块一定执行过,那么它的相反块的执行状态不发生变化。相应的关键词为:throw,return,break,continue。如果代码块A是代码块B的相反块,那么代码块B不一定是代码块A的相反块。
4.一致:如果当前代码块执行过,则其所有的一致块肯定执行过。并且如果当前块没有执行,那么其一致块肯定没有执行过。相应的关键词为:try,try-finally,do,case。如果代码块A是代码块B的一致块,那么代码块B一定是代码块A的一致块。
5.相干:如果当前代码块执行过,则其所有的相干块肯定执行过。但是如果当前块没有执行,那么其每个相干块的执行状态不发生变化。相关关键词为:catch-try。如果代码块A是代码块B的相干块,那么代码块B不一定是代码块A的相干块。
上述代码块关系整理如下:
Figure BDA0001896545030000081
Figure BDA0001896545030000091
其中,0表示没有执行过,1表示执行过,--表示不确定是否执行过。
为方便理解,图2-4分别示出了上述代码块的逻辑关系。如图2所示,代码块A和代码块B,代码块B和代码块C,代码块C和代码块D均为父子关系。如图3所示,由于if-else、return的语句逻辑,那么代码块B和代码块C是互斥关系,代码块D和代码块A也是互斥关系,而代码块A是代码块D的相反块。如图4所示,由于try-catch-finally的语句逻辑,代码块A和代码块B是一致关系,代码块B和代码块D也是一致关系,而代码块C是代码块B的相干块。
可选地,分割代码块的具体步骤如下:
1.读取源代码中的所有代码语句,初始化代码语句列表;
2.初始化代码块列表,针对每一个代码块,一个父代码块,子代码块列表,互斥代码块列表,相反代码块列表、一致代码块列表和相干代码块列表;
3.填充每个代码块的子块列表,通过try-finally、catch-try或case等填充每个代码块的一致块列表;
4.通过分支语句If-else或switch等填充每个代码块的互斥代码块列表;
5.通过分析含有“break、continue、return或throw”等语句的代码块,更新每个代码块的互斥块列表、相反块列表、相干块列表和子块列表。
需要指出的是,如果没有某一种代码块,则该代码块对应的列表为空。分割代码块的步骤也可以在步骤101之前执行,本发明实施例对此不作限制。
由于打印相应日志消息的代码语句在该作业执行过程中是肯定执行过的,这样就可以确定该代码所在的代码块是执行过的,而且如果具有打印日志功能的代码语句没有打印出相应日志的话,则可以确定该代码语句在该作业运行过程中一定没有执行过,这样就可以确定该代码所在的代码块是没有执行过的。再根据分割后的其他代码块与这些已知执行状态的代码块之前的逻辑关系,便可确定其它代码块的执行状态,如此就确定了整个作业运行过程中源代码的实际执行轨迹。
因此,本发明实施例通过作业打印出的日志信息和将源代码分割成多个代码块,自动分析源程序中代码语句的实际执行轨迹。由于日志消息都是由相应的源代码执行而打印出来的,因此可以通过分析日志消息来确定代码语句的执行状态,从而自动分析出代码执行轨迹,而不需要运维人员对源代码有深入的了解。
步骤103,根据所述日志消息和所述源代码的执行轨迹,在所述源代码中定位导致失败作业的异常。
在确定了所述源代码的执行轨迹后,就可以结合所述消息日志在所述源代码中定位导致失败作业的异常,从而自动地检测异常,提高了检测效率。可选地,所述步骤103包括:根据所述日志消息中导致失败作业的参数,从所述源代码中搜索出所述参数;根据所述源代码的执行轨迹和所述参数,在所述源代码中定位导致失败作业的根源参数值。在该步骤中,回溯搜索源代码,并在所述日志消息中查找导致失败作业的参数的相应值是否打印在日志消息中,从而找到导致作业失败的根源参数值。如果通过日志消息找不到参数A的值,那么继续向上搜索,直到可以确定A的根源参数值。
根据上面所述的各种实施例,可以看出本发明通过将日志消息与源代码进行匹配,确定执行过的代码语句和没有执行过的代码语句,从而确定源代码的执行轨迹,并最终定位出导致失败作业的异常的技术手段,从而解决了人工诊断系统故障效率低的问题。本发明实施例通过日志消息与源代码的匹配关系,确定执行过的代码语句和没有执行过的代码语句,从而自动地分析出源代码的执行轨迹,而不需要运维人员对源代码有深入的了解。本发明实施例还可以结合分割后的代码块之间的逻辑关系,更加快速地自动分析出作业运行中源代码的执行轨迹,从而帮助运维人员大幅提高分析失败作业、定位故障原因的效率,及时解决作业失败问题、确保服务质量。
图5是根据本发明一个可参考实施例的检测异常的方法的主要流程的示意图,所述检测异常的方法可以具体包括:
步骤501,获取失败作业的日志文件,根据所述日志文件中的日志消息在源代码文件中定位源代码。
由于日志消息都是由相应的源代码执行而打印出来的,因此与相应日志消息最相似的代码语句认为是打印该日志消息的代码语句,这些代码语句即为所述日志消息对应的源代码。
例如,某作业部分日志消息如下:
New Site URL:http://chanelnummer5.sharepoint.com/srch
The search center lite site(http://chanelnummer5.sharepoint.com/srch)already exist,so no need to re-create it.
Disable anonymous access for search web with Url=[http://chanelnummer5.sharepoint.com/srch]...
通过该日志消息匹配到的源代码如图6所示,可以发现日志消息New Site URL:http://chanelnummer5.sharepoint.com/srch是由源代码Write-GridLog-Status OK-Message"New Site URL:$newSiteUrl"打印的,相应地,The search center lite site(http://chanelnummer5.sharepoint.com/srch)already exist,so no need to re-create it.是由源代码Write-GridLog-Status OK-Message"The search center litesite($newSiteUrl)already exist,so no need to re-create it."打印的,Disableanonymous access for search web with Url=[http://chanelnummer5.sharepoint.com/srch]...是由源代码Write-GridLog-Status OK-Message"Disable anonymous access for search web with Url=[$($spWeb.Url)]..."打印的。
步骤502,将所述日志消息与所述源代码进行匹配,确定执行过的代码语句和没有执行过的代码语句。
将消息日志与源代码进行匹配,如图7所示,可以发现日志消息New Site URL:http://chanelnummer5.sharepoint.com/srch是由源代码Write-GridLog-Status OK-Message"New Site URL:$newSiteUrl"打印的,相应地,The search center lite site(http://chanelnummer5.sharepoint.com/srch)already exist,so no need to re-create it.是由源代码Write-GridLog-Status OK-Message"The search center litesite($newSiteUrl)already exist,so no need to re-create it."打印的,Disableanonymous access for search web with Url=[http://chanelnummer5.sharepoint.com/srch]...是由源代码Write-GridLog-Status OK-Message"Disable anonymous access for search web with Url=[$($spWeb.Url)]..."打印的,所以这三条代码语句在该作业运行过程中是肯定执行过的。
步骤503,将所述源代码分割成多个代码块;
一个代码语句只属于一个代码块,同一代码块中的代码语句的执行状态相同;每个代码块具有一个父代码块,子代码块列表,互斥代码块列表,相反代码块列表,一致代码块列表和相干代码块列表。
步骤504,根据所述执行过的代码语句、没有执行过的代码语句以及所述多个代码块之间的逻辑关系,标记各个代码块的执行状态,从而确定所述源代码的执行轨迹。
通过步骤502中初步确定一定执行过的代码块和一定没有执行过的代码块,再根据分割后的其它代码块与这些代码块之间的逻辑关系,便可确定其它代码块的执行状态,如此就确定了整个作业运行过程中代码的实际执行轨迹。如图8所示,根据日志消息确定了三条语句肯定执行过,则认为这三条代码语句所在的代码块一定执行过,根据分割代码块之间的逻辑关系,确定一定没有执行过的代码块(else模块里的代码就是一定没有执行过的),这样就直观地展示了源代码的执行轨迹。
步骤505,根据所述日志消息和所述源代码的执行轨迹,在所述源代码中定位导致失败作业的异常。
具体地,根据所述日志消息中导致失败作业的参数,从所述源代码中搜索出所述参数;根据所述源代码的执行轨迹和所述参数,在所述源代码中定位导致失败作业的根源参数值。在该步骤中,回溯搜索源代码,并在所述日志消息中查找导致失败作业的参数的相应值是否打印在日志消息中,从而找到导致作业失败的根源参数值。如果通过日志消息找不到参数A的值,那么继续向上搜索,直到可以确定A的根源参数值。
举例来说,如图9所示,失败作业的日志消息中对应的源代码中的变量为“$spWeb”,回溯源代码发现“$spWeb”是由变量“$newSiteUrl”赋值而来的,又通过日志消息与源代码的匹配结果,发现“$newSiteUrl”的实际值是“http://chanelnummer5.sharepoint.com/srch”,至此已无法继续向上回溯,因此可判断导致该作业失败的原因是参数“$newSiteUrl”的值为“http://chanelnummer5.sharepoint.com/srch”。
可见,本发明实施例通过日志消息与源代码的匹配关系,确定执行过的代码语句和没有执行过的代码语句,并进一步结合分割后的代码块之间的逻辑关系,从而自动地分析出源代码的执行轨迹,而不需要运维人员对源代码有深入的了解,从而帮助运维人员大幅提高分析失败作业、定位故障原因的效率,及时解决作业失败问题、确保服务质量。
另外,在本发明一个可参考实施例中检测异常的方法的具体实施内容,在上面所述检测异常的方法中已经详细说明了,故在此重复内容不再说明。
图10是根据本发明实施例的检测异常的装置的主要模块的示意图,如图10所示,所述检测异常的装置1000包括定位模块1001、分析模块1002和检测模块1003。其中,所述定位模块1001用于根据失败作业的日志消息在源代码文件中定位源代码,将所述日志消息与所述源代码进行匹配,确定执行过的代码语句和没有执行过的代码语句;所述分析模块1002用于根据所述执行过的代码语句和没有执行过的代码语句,确定所述源代码的执行轨迹;所述检测模块1003用于根据所述日志消息和所述源代码的执行轨迹,在所述源代码中定位导致失败作业的异常。
可选地,将所述日志消息与所述源代码进行匹配,确定执行过的代码语句和没有执行过的代码语句,包括:
根据所述日志消息中的日志信息,在所述源代码中确定打印所述日志信息的代码语句,将所述代码语句作为执行过的代码语句;
判断所述源代码中具有打印功能的代码语句是否在所述日志中打印了相应的日志信息,若否,则将所述具有打印功能的代码语句作为没有执行过的代码语句。
可选地,所述分析模块1002用于:
将所述源代码分割成多个代码块;
根据所述执行过的代码语句、没有执行过的代码语句以及所述多个代码块之间的逻辑关系,标记各个代码块的执行状态,从而确定所述源代码的执行轨迹。
可选地,一个代码语句只属于一个代码块,同一代码块中的代码语句的执行状态相同;每个代码块具有一个父代码块,子代码块列表,互斥代码块列表,相反代码块列表,一致代码块列表和相干代码块列表。
可选地,所述检测模块1003用于:
根据所述日志消息中导致失败作业的参数,从所述源代码中搜索出所述参数;
根据所述源代码的执行轨迹和所述参数,在所述源代码中定位导致失败作业的根源参数值。
根据上面所述的各种实施例,可以看出本发明通过将日志消息与源代码进行匹配,确定执行过的代码语句和没有执行过的代码语句,从而确定源代码的执行轨迹,并最终定位出导致失败作业的异常的技术手段,从而解决了人工诊断系统故障效率低的问题。本发明实施例通过日志消息与源代码的匹配关系,确定执行过的代码语句和没有执行过的代码语句,从而自动地分析出源代码的执行轨迹,而不需要运维人员对源代码有深入的了解。本发明实施例还可以结合分割后的代码块之间的逻辑关系,更加快速地自动分析出作业运行中源代码的执行轨迹,从而帮助运维人员大幅提高分析失败作业、定位故障原因的效率,及时解决作业失败问题、确保服务质量。
需要说明的是,在本发明所述检测异常的装置的具体实施内容,在上面所述检测异常的方法中已经详细说明了,故在此重复内容不再说明。
图11示出了可以应用本发明实施例的检测异常的方法或检测异常的装置的示例性系统架构1100。
如图11所示,系统架构1100可以包括终端设备1101、1102、1103,网络1104和服务器1105。网络1107用以在终端设备1101、1102、1103和服务器1105之间提供通信链路的介质。网络1104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备1101、1102、1103通过网络1104与服务器1104交互,以接收或发送消息等。终端设备1101、1102、1103上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。
终端设备1101、1102、1103可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器1105可以是提供各种服务的服务器,例如对用户利用终端设备1101、1102、1103所浏览的购物类网站提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的产品信息查询请求等数据进行分析等处理,并将处理结果(例如目标推送信息、产品信息——仅为示例)反馈给终端设备。
需要说明的是,本发明实施例所提供的检测异常的方法一般在公共场所的终端设备1101、1102、1103上执行,也可以由服务器1105执行,相应地,所述检测异常的装置一般设置在公共场所的终端设备1101、1102、1103上,也可以设置在服务器1105中。
应该理解,图11中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
下面参考图12,其示出了适于用来实现本发明实施例的终端设备的计算机系统1200的结构示意图。图12示出的终端设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图12所示,计算机系统1200包括中央处理单元(CPU)1201,其可以根据存储在只读存储器(ROM)1202中的程序或者从存储部分1208加载到随机访问存储器(RAM)1203中的程序而执行各种适当的动作和处理。在RAM 1203中,还存储有系统1200操作所需的各种程序和数据。CPU 1201、ROM 1202以及RAM1203通过总线1204彼此相连。输入/输出(I/O)接口1205也连接至总线1204。
以下部件连接至I/O接口1205:包括键盘、鼠标等的输入部分1206;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分1207;包括硬盘等的存储部分1208;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分1209。通信部分1209经由诸如因特网的网络执行通信处理。驱动器1210也根据需要连接至I/O接口1205。可拆卸介质1211,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1210上,以便于从其上读出的计算机程序根据需要被安装入存储部分1208。
特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分1209从网络上被下载和安装,和/或从可拆卸介质1211被安装。在该计算机程序被中央处理单元(CPU)1201执行时,执行本发明的系统中限定的上述功能。
需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括定位模块、分析模块和检测模块,其中,这些模块的名称在某种情况下并不构成对该模块本身的限定。
作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:根据失败作业的日志消息在源代码文件中定位源代码,将所述日志消息与所述源代码进行匹配,确定执行过的代码语句和没有执行过的代码语句;根据所述执行过的代码语句和没有执行过的代码语句,确定所述源代码的执行轨迹;根据所述日志消息和所述源代码的执行轨迹,在所述源代码中定位导致失败作业的异常。
根据本发明实施例的技术方案,因为采用将日志消息与源代码进行匹配,确定执行过的代码语句和没有执行过的代码语句,从而确定源代码的执行轨迹,并最终定位出导致失败作业的异常的技术问题。本发明实施例通过日志消息与源代码的匹配关系,确定执行过的代码语句和没有执行过的代码语句,从而自动地分析出源代码的执行轨迹,而不需要运维人员对源代码有深入的了解。本发明实施例还可以结合分割后的代码块之间的逻辑关系,更加快速地自动分析出作业运行中源代码的执行轨迹,从而帮助运维人员大幅提高分析失败作业、定位故障原因的效率,及时解决作业失败问题、确保服务质量。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

Claims (12)

1.一种检测异常的方法,其特征在于,包括:
根据失败作业的日志消息在源代码文件中定位源代码,将所述日志消息与所述源代码进行匹配,确定执行过的代码语句和没有执行过的代码语句;
根据所述执行过的代码语句和没有执行过的代码语句,确定所述源代码的执行轨迹;
根据所述日志消息和所述源代码的执行轨迹,在所述源代码中定位导致失败作业的异常。
2.根据权利要求1所述的方法,其特征在于,将所述日志消息与所述源代码进行匹配,确定执行过的代码语句和没有执行过的代码语句,包括:
根据所述日志消息中的日志信息,在所述源代码中确定打印所述日志信息的代码语句,将所述代码语句作为执行过的代码语句;
判断所述源代码中具有打印功能的代码语句是否在所述日志中打印了相应的日志信息,若否,则将所述具有打印功能的代码语句作为没有执行过的代码语句。
3.根据权利要求1所述的方法,其特征在于,根据所述执行过的代码语句和没有执行过的代码语句,确定所述源代码的执行轨迹,包括:
将所述源代码分割成多个代码块;
根据所述执行过的代码语句、没有执行过的代码语句以及所述多个代码块之间的逻辑关系,标记各个代码块的执行状态,从而确定所述源代码的执行轨迹。
4.根据权利要求3所述的方法,其特征在于,一个代码语句只属于一个代码块,同一代码块中的代码语句的执行状态相同;每个代码块具有一个父代码块,子代码块列表,互斥代码块列表,相反代码块列表,一致代码块列表和相干代码块列表。
5.根据权利要求1所述的方法,其特征在于,根据所述日志消息和所述源代码的执行轨迹,在所述源代码中定位导致失败作业的异常,包括:
根据所述日志消息中导致失败作业的参数,从所述源代码中搜索出所述参数;
根据所述源代码的执行轨迹和所述参数,在所述源代码中定位导致失败作业的根源参数值。
6.一种检测异常的装置,其特征在于,包括:
定位模块,用于根据失败作业的日志消息在源代码文件中定位源代码,将所述日志消息与所述源代码进行匹配,确定执行过的代码语句和没有执行过的代码语句;
分析模块,用于根据所述执行过的代码语句和没有执行过的代码语句,确定所述源代码的执行轨迹;
检测模块,用于根据所述日志消息和所述源代码的执行轨迹,在所述源代码中定位导致失败作业的异常。
7.根据权利要求6所述的装置,其特征在于,将所述日志消息与所述源代码进行匹配,确定执行过的代码语句和没有执行过的代码语句,包括:
根据所述日志消息中的日志信息,在所述源代码中确定打印所述日志信息的代码语句,将所述代码语句作为执行过的代码语句;
判断所述源代码中具有打印功能的代码语句是否在所述日志中打印了相应的日志信息,若否,则将所述具有打印功能的代码语句作为没有执行过的代码语句。
8.根据权利要求6所述的装置,其特征在于,所述分析模块用于:
将所述源代码分割成多个代码块;
根据所述执行过的代码语句、没有执行过的代码语句以及所述多个代码块之间的逻辑关系,标记各个代码块的执行状态,从而确定所述源代码的执行轨迹。
9.根据权利要求8所述的装置,其特征在于,一个代码语句只属于一个代码块,同一代码块中的代码语句的执行状态相同;每个代码块具有一个父代码块,子代码块列表,互斥代码块列表,相反代码块列表,一致代码块列表和相干代码块列表。
10.根据权利要求6所述的装置,其特征在于,所述检测模块用于:
根据所述日志消息中导致失败作业的参数,从所述源代码中搜索出所述参数;
根据所述源代码的执行轨迹和所述参数,在所述源代码中定位导致失败作业的根源参数值。
11.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-5中任一所述的方法。
12.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-5中任一所述的方法。
CN201811494563.5A 2018-12-07 2018-12-07 一种检测异常的方法和装置 Pending CN111290870A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811494563.5A CN111290870A (zh) 2018-12-07 2018-12-07 一种检测异常的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811494563.5A CN111290870A (zh) 2018-12-07 2018-12-07 一种检测异常的方法和装置

Publications (1)

Publication Number Publication Date
CN111290870A true CN111290870A (zh) 2020-06-16

Family

ID=71016971

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811494563.5A Pending CN111290870A (zh) 2018-12-07 2018-12-07 一种检测异常的方法和装置

Country Status (1)

Country Link
CN (1) CN111290870A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115374737A (zh) * 2022-10-25 2022-11-22 北京超摩科技有限公司 基于反标的仿真日志分析方法及设备

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170147336A1 (en) * 2015-11-19 2017-05-25 Ca, Inc. Method and system for determining logging statement code coverage
CN107172035A (zh) * 2017-05-11 2017-09-15 北京安赛创想科技有限公司 网络攻击信息的检测方法及装置
CN107391353A (zh) * 2017-07-07 2017-11-24 西安电子科技大学 基于日志的复杂软件系统异常行为检测方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170147336A1 (en) * 2015-11-19 2017-05-25 Ca, Inc. Method and system for determining logging statement code coverage
CN107172035A (zh) * 2017-05-11 2017-09-15 北京安赛创想科技有限公司 网络攻击信息的检测方法及装置
CN107391353A (zh) * 2017-07-07 2017-11-24 西安电子科技大学 基于日志的复杂软件系统异常行为检测方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115374737A (zh) * 2022-10-25 2022-11-22 北京超摩科技有限公司 基于反标的仿真日志分析方法及设备

Similar Documents

Publication Publication Date Title
US10055274B2 (en) Automated diagnosis of software crashes
US9734005B2 (en) Log analytics for problem diagnosis
CN106815031B (zh) 内核模块加载方法和装置
CN113987074A (zh) 分布式服务全链路监控方法、装置、电子设备及存储介质
CN111190888A (zh) 一种管理图数据库集群的方法和装置
US20160224400A1 (en) Automatic root cause analysis for distributed business transaction
US10084637B2 (en) Automatic task tracking
CN109672722B (zh) 数据部署方法及装置、计算机存储介质和电子设备
US9946630B2 (en) Efficiently debugging software code
US20170249126A1 (en) Easy storm topology design and execution
CN111654495B (zh) 用于确定流量产生来源的方法、装置、设备及存储介质
CN115357761A (zh) 链路追踪方法、装置、电子设备及存储介质
CN113014445A (zh) 用于服务器的运维方法、装置、平台及电子设备
CN114205216A (zh) 微服务故障的根因定位方法、装置、电子设备和介质
CN110795332A (zh) 一种自动化测试方法和装置
CN111597069A (zh) 程序处理方法、装置、电子设备和存储介质
US11561881B2 (en) Out-of-date runbook detection
US20210303435A1 (en) Method, device, and computer program product for obtaining diagnostic information
CN111290870A (zh) 一种检测异常的方法和装置
CN111241048A (zh) 一种web终端日志管理方法、装置、介质及电子设备
CN115495740A (zh) 一种病毒检测方法和装置
US20140013155A1 (en) System and method for facilitating recovery from a document creation error
CN111831317B (zh) 服务间依赖关系的获取方法、装置、电子设备和存储介质
US20180336287A1 (en) A system and method for retrieving user specific results upon execution of a query
CN113535568B (zh) 应用部署版本的验证方法、装置、设备和介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination