程序设置方法、程序监控方法与装置、系统的制作方法

文档序号:6353736阅读:255来源:国知局
专利名称:程序设置方法、程序监控方法与装置、系统的制作方法
技术领域
本申请涉及程序监控技术领域,尤其涉及一种程序设置方法、装置及系统,以及一种程序监控方法、装置及系统。
背景技术
已部署上线的Java应用系统常常会发生性能问题,比如因Java应用系统的软硬件环境而引起故障等。为处理Java应用系统的性能问题,需要及时对与问题相关联的各种数据进行采集。目前,常用数据采集方式是通过对Java应用系统进行监控,从而获取相应的Java应用系统监控数据结果。
目前,常用的监控方案有以下几种I)远程系统级别监控;此方案主要是通过利用一些监控工具采集共性的系统级别的监控数据,并通过网络远程将监控数据传输到监控中心,由监控中心对采集到的该系统级别的监控数据进行呈现。该方案的缺点在于只能采集到操作系统和硬件环境等软硬件环境的监控数据,如CPU占用率、内存使用情况、网络带宽占用等,而不能实现针对Java应用系统中所运行的Java应用程序的程序级别监控,因此该方案的使用场景比较受限。2)在Java应用系统中静态增加监控模块;此方案的主要思想在于,在Java应用程序加载到Java应用系统之前,预先从Java应用程序中确定出需要监控的字节码位置作为被监控点,并在Java应用系统中添加监控模块,由该监控模块采集监控数据并传输给监控中心,由监控中心呈现监控数据。该方案的缺点在于,需要在Java应用程序加载到Java应用系统之前确定被监控点,而上线后的Java应用系统所发生的问题往往是超出预料的,一旦发生的问题导致被监控点需发生变化,则需要将Java应用程序进行下线操作,因此处理效率不高。此外,在Java应用系统之中添加大量监控模块也会在系统性能上和可维护性上产生不良影响。3)通过日志文件和Java虚拟机(JVM, Java Virtual Machine)监控工具采集监控数据。其中,JVM是一个虚构出来的计算机,其可以在实际的计算机上仿真模拟各种计算机功能,并对具体操作系统平台相关的信息进行了屏蔽,使得Java应用程序只需要生成在JVM上运行的目标字节码,就可以在多种平台上不加修改地运行。此方案的主要思想在于,当已上线的Java应用系统发生问题时,利用JVM提供的监控工具从Java应用系统本身产生的日志文件中进行现场数据采集。此方案存在的缺点在于,导致Java应用系统本地产生并记录大量日志文件,需要及时维护和清理日志文件。考虑到上述三种方式的优缺点,现有技术中较为常用的监控方案是上述方式二,然而如前文所述,在监控点发生变化的情况下,该方式存在处理效率较低的问题。

发明内容
本申请实施例提供一种程序设置方法、装置及系统,用以解决现有技术中采用的Java应用系统监控方案在监控点发生变化的情况下,存在处理效率较低的问题。本申请实施例还提供一种程序监控方法、装置及系统。
本申请实施例采用以下技术方案一种程序设置方法,包括获得监控脚本,并从所述监控脚本中解析出监控执行项和待监控字节码识别规则,其中所述监控执行项包含指示针对待监控字节码的监控项目的信息;根据所述待监控字节码识别规则,从待监控应用程序包含的字节码中确定待监控字节码;执行将所述监控执行项植入确定的所述待监控字节码的操作。较佳地,所述待监控字节码识别规则为用于指示待监控字节码标识的静态代码位置识别规则;以及根据所述待监控字节码识别规则,从待监控应用程序包含的字节码中确定待监控字节码具体包括从待监控应用程序包含的字节码中,确定与所述静态代码位置识别规则所指示的待监控对象标识对应的字节码。较佳地,所述待监控字节码识别规则为用于指示启动监控待监控字节码的时机的动态事件识别规则;以及根据所述待监控字节码识别规则,从待监控应用程序包含的字节码中确定待监控字节码具体包括从预先设置的启动监控待监控字节码的时机与字节码位置的对应关系中,确定与解析出的动态事件识别规则所指示的所述时机对应的字节码位置;以及从待监控应用程序包含的字节码中确定位于确定的所述字节码位置处的字节码。一种程序监控方法,包括在运行应用系统中的待监控字节码时,执行运行植入所述待监控字节码中的监控执行项的操作,其中,所述监控执行项包含指示针对所述待监控字节码的监控项目的信息;以及获得运行所述监控执行项所生成的与所述监控项目对应的监控数据。较佳地,该程序监控方法还包括将获得的所述监控数据存储在所述应用系统的内存;并利用预先指定的线程,从所述内存中读取所述监控数据;根据所述应用系统的标识,从预先设置的应用系统标识与数据处理服务器标识的对应关系中确定相应的数据处理服务器标识;并将读取到的所述监控数据发送给确定的数据处理服务器标识指示的数据处理服务器,指示该数据处理服务器根据所述监控数据生成监控报表。一种程序设置装置,包括监控脚本解析单元,用于从监控脚本中解析出监控执行项和待监控字节码识别规则,其中,所述监控执行项包含指示针对待监控字节码的监控项目的信息;字节码确定单元,用于根据监控脚本解析单元解析得到的待监控字节码识别规贝U,从待监控应用程序包含的字节码中确定待监控字节码;植入单元,用于执行将监控脚本解析单元解析得到的监控执行项植入字节码确定单元确定的待监控字节码的操作。一种程序监控装置,包括监控执行项运行单元,用于在运行应用系统中的待监控字节码时,执行运行植入所述待监控字节码中的监控执行项的操作,其中,所述监控执行项包含指示针对所述待监控字节码的监控项目的信息;监控数据获得单元,用于获得通过监控执行项运行单元运行所述监控执行项所生成的与所述监控项目对应的监控数据。一种程序设置系统,包括监控控制端、监控控制服务器、监控代理器和应用系统,其中监控控制端,用于接收用户输入的监控脚本,并将所述监控脚本发送给监控控制服务器;监控控制服务器,用于将监控控制服务器发送来的所述监控脚本编译成监控代理器能识别的格式后发送给监控代理器;监控代理器,用于从监控控制服务器发送来的监控脚本中解析出监控执行项和待监控字节码识别规则,并根据所述待监控字节码识别规则,从应用系统上运行的待监控应用程序包含的字节码中确定待监控字节码,以及执行将所述监控执行项植入确定的待监控字节码的操作,其中,所述监控执行项包含指示针对待监控字节码的监控项目的信息。一种程序监控系统,包括监控控制端、监控控制服务器、监控代理器和应用系统,其中应用系统,用于在运行应用系统中的待监控字节码时,执行运行植入所述待监控字节码中的监控执行项的操作,并获得运行所述监控执行项所生成的与所述监控项目对应的监控数据,其中,所述监控执行项包含指示针对所述待监控字节码的监控项目的信息;监控代理器,用于获取应用系统获得的所述监控数据,并将所述监控数据发送给监控控制服务器;监控控制服务器,用于根据所述应用系统的标识,从预先设置的应用系统标识与数据处理服务器标识的对应关系中确定相应的数据处理服务器标识,并将监控代理器发送来的所述监控数据发送给确定的数据处理服务器标识指示的数据处理服务器;数据处理服务器,用于根据监控控制服务器发送来的所述监控数据生成监控报表。本申请实施例的有益效果如下通过本申请实施例提供的上述方案,即使是监控点发生变化,也无需将应用程序进行下线修改,而是可以根据针对新的监控点所编译的监控脚本动态实现在线修改,从而采用本申请实施例提供的该方案,在监控点发生变化的情况下,明显能够提高对应用程序进行监控的效率。


图I为本申请实施例提供的一种程序设置方法的具体流程示意图;图2为本申请实施例提供的一种程序监控方法的具体流程示意图;图3为基于本申请实施例提供的方案所构造的一种监控系统示意图;图4a为本申请实施例提供的方案在实际应用中的具体实现过程示意图;图4b为本申请实施例提供的方案在实际应用中时序不意图;图5为本申请实施例提供的一种程序设置装置的具体结构示意图;图6为本申请实施例提供的一种程序监控装置的具体结构图;图7为本申请实施例提供的一种程序设置系统的具体结构示意图。
具体实施例方式为了解决现有技术中采用的Java应用系统监控方案存在的处理效率较低的问题,本申请实施例提供了一种程序设置方案,目的是要实现为已部署上线的Java应用系统随时添加监控脚本,从而无需对Java应用系统执行下线操作也能随时根据需要调整被监控点,以此提高监控效率。
在Java应用系统中,字节码的执行机制是先把Java源文件编译成Java字节码文件,然后在JVM中运行Java字节码。本申请实施例提供的方案的具体实施思路在于,基于JVM工具接口(JVM TI,JVM Tool Interface,其是一个用于监控JVM的编程接口,基于该接口可以监控JVM状态并控制运行在JVM之上的Java应用程序)和JavaInstrumentation (Java Instrumentation 是基于 java. lang. instrument 动态改变和操作加载在JVM中的一种Java类)的机制动态替换JVM中的Java字节码,以此来为已部署上线的Java应用系统中的Java应用程序添加或移除监控脚本。本申请实施例提供的该程序设置方案不限于在Java应用系统中使用,也可以在运行基于其他字节码编写的应用程序的应用系统中使用。以下结合附图,对申请实施例提供的程序设置方案进行详细说明。首先,本申请实施例提供一种如图I所示的程序设置方法,该方法包括以下主要步骤步骤11,获得监控脚本,并从监控脚本中解析出监控执行项和待监控字节码识别规则,其中监控执行项包含指示针对待监控字节码的监控项目的信息;步骤12,根据待监控字节码识别规则,从待监控应用程序包含的字节码中确定待 监控字节码,在本申请实施例中,待监控字节码识别规则可以但不限于为静态代码位置识别规则,也可以为动态事件识别规则,下文将分别对这两类规则进行详细说明;步骤13,执行将监控执行项植入确定的待监控字节码的操作,比如,可以通过将待监控字节码替换为包含监控执行项的字节码的方式,实现将监控执行项植入确定的待监控字节码。由本申请实施例提供的上述方法可知,在对待监控字节码进行监控时,可以根据监控脚本中包含的待监控字节码识别规则,确定出待监控字节码,从而可以很方便地将监控执行项植入到待监控字节码中。即使是监控点发生变化,也无需将应用程序进行下线修改,而是可以根据针对新的监控点所编译的监控脚本,动态实现在线修改,从而采用本申请实施例提供的该方案,在监控点发生变化的情况下,明显能够提高对应用程序进行监控的效率。前文已经提到,在本申请实施例中,待监控字节码识别规则可以但不限于包括静态代码位置识别规则和动态事件识别规则,以下分别针对这两种规则进行说明I)静态代码位置识别规则用于指示待监控字节码标识,根据该静态代码位置识别规则,从待监控应用程序包含的字节码中确定待监控字节码的方式为从待监控应用程序包含的字节码中,确定与静态代码位置识别规则所指示的待监控对象标识对应的字节码。其中,待监控字节码标识可以包含待监控字节码所对应的类的名称,比如可以包含Java应用系统中的java. awt. Component类,也可以包含待监控字节码在其所属的应用程序中所处位置的标识,可以包含java. awt. Component类的int方法的第5行,等等。2)动态事件识别规则用于指示启动监控待监控字节码的时机,根据该动态事件识别规则,从待监控应用程序包含的字节码中确定待监控字节码的方式为首先,从预先设置的启动监控待监控字节码的时机与字节码位置的对应关系中,确定与解析出的动态事件识别规则所指示的上述时机对应的字节码位置;然后,再从待监控应用程序包含的字节码中确定位于确定的该字节码位置处的字节码。其中,启动监控待监控字节码的时机可以视实际情况而定,比如可以以应用系统内存占用量达到100M作为该时机,也可以以应用系统中某类异常作为该时机,等等。基于待监控字节码识别规则,由于可以根据实际需求将待监控的字节码指定为某段字节码,也可以指定为某个应用程序包含的所有字节码,因此本申请实施例提供的该程序设置方案可以实现对应用程序的细粒度监控,其监控精度可以达到一段字节码。基于本申请提供的如图I所示的程序设置方法,本申请实施例还提供一种程序监控方法,该方法的具体流程示意图如图2所示,包括以下步骤步骤21,在运行应用系统中的待监控字节码时,执行运行植入待监控字节码中的监控执行项的操作,其中,监控执行项包含指示针对待监控字节码的监控项目的信息,针对待监控字节码的监控项目可以是运行待监控字节码所耗时长,也可以是待监控字节码运行过程中产生的日志信息,还可以是运行待监控字节码所耗内存量等等,此外,监控执行项可以包含一个监控项目,也可以包含多个监控项目,本申请实施例对监控项目个数以及其具体项目内容不做限定;步骤22,获得运行监控执行项所生成的与监控项目对应的监控数据。通过对监控执行项的运行,根据其指示的监控项目,可以生成相应的监控数据。本申请实施例的重点在于,将监控执行项植入到待监控字节码中,而其中,通过运行监控执行项所包含的字节码获得监控数据的方案可以采用现有 技术的方案。本申请实施例提供的该程序监控方法是基于本申请实施例提供的程序设置方法而提出的,因此其同样能够达到高效率地实现监控过程的技术效果。此外,该程序监控方法的另一优点在于,由于监控执行项是植入到待监控字节码中的,因此避免了现有技术在应用系统中添加独立于待监控字节码之外的监控模块而可能导致应用系统不稳定的问题。在本申请实施例中,为了尽可能减小监控给应用系统带来的影响,在执行监控后,可以将获得的监控数据存储在应用系统的内存中,并利用预先指定的线程从内存中读取监控数据,然后根据应用系统的标识,从预先设置的应用系统标识与数据处理服务器标识的对应关系中确定相应的数据处理服务器标识,从而将读取到的监控数据发送给确定的数据处理服务器标识指示的数据处理服务器,指示该数据处理服务器根据监控数据生成监控报表。之所以要将读取到的监控数据发送给相应的数据处理服务器而不是任意数据处理服务器,是考虑到为了保持数据处理服务器的负荷均衡,避免由于数据处理服务器的负荷不平衡而导致的不稳定问题。以下结合实际,对本申请实施例提供的上述方案进行介绍。在实际应用中,基于本申请实施例提供的方案所构造的一种监控系统示意图如图3所示,下文将对该监控系统的各组成部分做详细介绍。图中的数字41 46用于标示本申请实施例提供的方案在该监控系统中的具体实现步骤41 46,下文也将一并对其进行详细介绍。首先,对图3中各组成部分的说明如下I)监控中心该监控中心由监控控制端、监控控制服务器和数据处理服务器集群组成,监控中心与Java应用系统之间相互独立,是监控系统主要构成部分。2) agent :即Java应用系统的监控代理器,其负责接收监控控制指令,并对监控数据进行收集与发送。3)监控控制服务器其与agent保持网络连接,负责生成和发送监控脚本,控制agent的行为,并把agent收集到的监控数据传输给数据处理服务器。监控控制服务器是整个监控系统的控制枢纽。4)数据处理服务器集群由一组数据处理服务器组成,数据处理服务器负责接收监控控制服务器传输来的监控数据,并按照预定规则生成实时监控数据报表。
5)监控控制端用于为监控人员提供发起监控行为和查看监控数据的接口(或界面)。基于上述监控系统,本申请实施例提供的上述方案的具体实现过程如图4a所示,包括以下步骤步骤41,生成监控脚本监控脚本是一段被植入到待监控的Java应用程序中的Java字节码,其在运行待监控Java应用程序的时候被运行,实现的功能是对待监控Java应用程序所包含的待监控字节码进行监控。一般地,监控脚本由两个部分组成,第一部分是待监控字节码识别规则(为了便于描述,以下将待监控字节码识别规则简称为识别规则),识别规则的作用在于从待监控Java应用程序中直接或间接地指定监控脚本中包含的字节码的植入位置,或指定启动监控待监控字节码的时机;第二部分为用于指示完成监控功能的具体逻辑的监控执行项。具体地,通过对监控脚本的编译,监控执行项可以被设置为用于指示在每次执行监控脚本后,输出运行待监控字节码所耗时长;或者也可以被设置为用于指示在每次执行监控脚本后,输出整个待监控Java应用程序所对应的Java应用系统内存消耗量;或者也可以被设置为用于指示在每次执行监控脚本后,输出整个待监控Java应用程序所对应的异常情况的日志信息等等。监控执行项所指示的完成监控功能的具体逻辑可以视实际情况进行设置,本申请实施例对此不做限定。需要具体说明的是,在本申请实施例中,上述识别规则可以分为静态字节码位置识别规则和动态事件识别规则两类。其中,静态字节码位置识别规则的示例如下表I所示表I :
权利要求
1.一种程序设置方法,其特征在于,包括 获得监控脚本,并从所述监控脚本中解析出监控执行项和待监控字节码识别规则,其中所述监控执行项包含指示针对待监控字节码的监控项目的信息; 根据所述待监控字节码识别规则,从待监控应用程序包含的字节码中确定待监控字节码; 执行将所述监控执行项植入确定的所述待监控字节码的操作。
2.如权利要求I所述的方法,其特征在于,所述待监控字节码识别规则为用于指示待监控字节码标识的静态代码位置识别规则;以及 根据所述待监控字节码识别规则,从待监控应用程序包含的字节码中确定待监控字节码具体包括 从待监控应用程序包含的字节码中,确定与所述静态代码位置识别规则所指示的待监控对象标识对应的字节码。
3.如权利要求I所述的方法,其特征在于,所述待监控字节码识别规则为用于指示启动监控待监控字节码的时机的动态事件识别规则;以及 根据所述待监控字节码识别规则,从待监控应用程序包含的字节码中确定待监控字节码具体包括 从预先设置的启动监控待监控字节码的时机与字节码位置的对应关系中,确定与解析出的动态事件识别规则所指示的所述时机对应的字节码位置;以及 从待监控应用程序包含的字节码中确定位于确定的所述字节码位置处的字节码。
4.基于如权利要求I所述的一种程序设置方法的一种程序监控方法,其特征在于,包括 在运行应用系统中的待监控字节码时,执行运行植入所述待监控字节码中的监控执行项的操作,其中,所述监控执行项包含指示针对所述待监控字节码的监控项目的信息;以及获得运行所述监控执行项所生成的与所述监控项目对应的监控数据。
5.如权利要求4所述的方法,其特征在于,还包括 将获得的所述监控数据存储在所述应用系统的内存;并 利用预先指定的线程,从所述内存中读取所述监控数据; 根据所述应用系统的标识,从预先设置的应用系统标识与数据处理服务器标识的对应关系中确定相应的数据处理服务器标识;并 将读取到的所述监控数据发送给确定的数据处理服务器标识指示的数据处理服务器,指示该数据处理服务器根据所述监控数据生成监控报表。
6.一种程序设置装置,其特征在于,包括 监控脚本解析单元,用于从监控脚本中解析出监控执行项和待监控字节码识别规则,其中,所述监控执行项包含指示针对待监控字节码的监控项目的信息; 字节码确定单元,用于根据监控脚本解析单元解析得到的待监控字节码识别规则,从待监控应用程序包含的字节码中确定待监控字节码; 植入单元,用于执行将监控脚本解析单元解析得到的监控执行项植入字节码确定单元确定的待监控字节码的操作。
7.如权利要求6所述的装置,其特征在于,所述待监控字节码识别规则为用于指示待监控字节码标识的静态代码位置识别规则;以及 所述字节码确定单元具体用于从待监控应用程序包含的字节码中,确定与所述静态代码位置识别规则所指示的待监控对象标识对应的字节码。
8.如权利要求6所述的装置,其特征在于,所述待监控字节码识别规则为用于指示启动监控待监控字节码的时机的动态事件识别规则;以及 所述字节码确定单元具体包括 字节码位置确定模块,用于从预先设置的启动监控待监控字节码的时机与字节码位置的对应关系中,确定与监控脚本解析单元解析出的动态事件识别规则所指示的所述时机对应的字节码位置; 字节码确定模块,用于从待监控应用程序包含的字节码中,确定位于字节码位置确定模块确定的所述字节码位置处的字节码。
9.基于如权利要求6所述的一种程序设置装置的一种程序监控装置,其特征在于,包括 监控执行项运行单元,用于在运行应用系统中的待监控字节码时,执行运行植入所述待监控字节码中的监控执行项的操作,其中,所述监控执行项包含指示针对所述待监控字节码的监控项目的信息; 监控数据获得单元,用于获得通过监控执行项运行单元运行所述监控执行项所生成的与所述监控项目对应的监控数据。
10.如权利要求9所述的程序监控装置,其特征在于,还包括 存储单元,用于将监控数据获得单元获得的所述监控数据存储在所述应用系统的内存; 读取单元,用于利用预先指定的线程,从所述内存中读取存储单元存储的所述监控数据; 服务器标识确定单元,用于根据所述应用系统的标识,从预先设置的应用系统标识与数据处理服务器标识的对应关系中确定相应的数据处理服务器标识; 指示单元,用于将读取单元读取到的监控数据发送给服务器标识确定单元确定的数据处理服务器标识指示的数据处理服务器,指示该数据处理服务器根据所述监控数据生成监控报表。
11.一种程序设置系统,其特征在于,包括监控控制端、监控控制服务器、监控代理器和应用系统,其中 监控控制端,用于接收用户输入的监控脚本,并将所述监控脚本发送给监控控制服务器; 监控控制服务器,用于将监控控制服务器发送来的所述监控脚本编译成监控代理器能识别的格式后发送给监控代理器; 监控代理器,用于从监控控制服务器发送来的监控脚本中解析出监控执行项和待监控字节码识别规则,并根据所述待监控字节码识别规则,从应用系统上运行的待监控应用程序包含的字节码中确定待监控字节码,以及执行将所述监控执行项植入确定的待监控字节码的操作,其中,所述监控执行项包含指示针对待监控字节码的监控项目的信息。
12.—种程序监控系统,其特征在于,包括监控控制端、监控控制服务器、监控代理器和应用系统,其中 应用系统,用于在运行应用系统中的待监控字节码时,执行运行植入所述待监控字节码中的监控执行项的操作,并获得运行所述监控执行项所生成的与所述监控项目对应的监控数据,其中,所述监控执行项包含指示针对所述待监控字节码的监控项目的信息; 监控代理器,用于获取应用系统获得的所述监控数据,并将所述监控数据发送给监控控制服务器; 监控控制服务器,用于根据所述应用系统的标识,从预先设置的应用系统标识与数据 处理服务器标识的对应关系中确定相应的数据处理服务器标识,并将监控代理器发送来的所述监控数据发送给确定的数据处理服务器标识指示的数据处理服务器; 数据处理服务器,用于根据监控控制服务器发送来的所述监控数据生成监控报表。
全文摘要
本申请公开了一种程序设置方法、装置及系统,用以解决现有技术中采用的Java应用系统监控方案在监控点发生变化的情况下,存在处理效率较低的问题。方法包括获得监控脚本,并从所述监控脚本中解析出监控执行项和待监控字节码识别规则,其中所述监控执行项包含指示针对待监控字节码的监控项目的信息;根据所述待监控字节码识别规则,从待监控应用程序包含的字节码中确定待监控字节码;执行将所述监控执行项植入确定的所述待监控字节码的操作。本申请实施例还提供一种程序监控方法、装置及系统。
文档编号G06F11/30GK102622289SQ20111002830
公开日2012年8月1日 申请日期2011年1月26日 优先权日2011年1月26日
发明者禹扬帆, 袁志俊 申请人:阿里巴巴集团控股有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1