书签 分享 收藏 举报 版权申诉 / 10

基于自定义脚本方式管理业务监控系统的方法.pdf

  • 上传人:000****221
  • 文档编号:997327
  • 上传时间:2018-03-24
  • 格式:PDF
  • 页数:10
  • 大小:434.49KB
  • 摘要
    申请专利号:

    CN200910232352.9

    申请日:

    2009.12.08

    公开号:

    CN101739277A

    公开日:

    2010.06.16

    当前法律状态:

    撤回

    有效性:

    无权

    法律详情:

    发明专利申请公布后的视为撤回IPC(主分类):G06F 9/445申请公布日:20100616|||实质审查的生效IPC(主分类):G06F 9/445申请日:20091208|||公开

    IPC分类号:

    G06F9/445; H04L29/06; G06Q50/00

    主分类号:

    G06F9/445

    申请人:

    南京联创科技集团股份有限公司

    发明人:

    陈纲; 钱伊心; 孙力斌; 梁斌; 陈杰

    地址:

    210013 江苏省南京市定淮门12号16楼

    优先权:

    专利代理机构:

    南京天翼专利代理有限责任公司 32112

    代理人:

    蒋家华

    PDF完整版下载: PDF下载
    内容摘要

    本发明提供了一种基于自定义脚本方式管理业务监控系统的方法,包括下列步骤:a)使用浏览器,在业务监控系统提供的网页中直接编写脚本或上传已有的脚本;b)将脚本通过HTTP方式传输至服务端保存;c)服务端调用Rhino脚本引擎执行脚本;d)输出执行结果。本发明中,用户可编写脚本调用服务端预先暴露的接口,将脚本放置在服务器程序内部运行,也可将脚本发布到远程主机上的采集代理上执行并返回结果。保证了系统的稳定性和扩展性,在不修改服务端代码、不重启服务端程序的情况下,扩展了系统功能,使得业务监控系统能够根据需要灵活地定制采集策略。同时也缩短了开发时间,提高了编程人员的开发效率,扩充了监控手段。

    权利要求书

    1: 一种基于自定义脚本方式管理业务监控系统的方法,其特征在于,包括下列步骤: a)使用浏览器,在业务监控系统提供的网页中直接编写脚本或上传已有的脚本; b)将脚本通过HTTP方式传输至服务端保存; c)服务端调用Rhino脚本引擎执行脚本; d)输出执行结果。
    2: 根据权利要求1所述的基于自定义脚本方式管理业务监控系统的方法,其特征在于,其中步骤c)和步骤d)之间还包括: e)判断是否需要远程执行脚本,如需要远程执行脚本,则将脚本通过socket传输至采集代理,采集代理执行脚本并输出反馈结果至服务端。
    3: 根据权利要求1所述的基于自定义脚本方式管理业务监控系统的方法,其特征在于,其中步骤c)中服务端调用Rhino脚本引擎执行脚本主要包括下列步骤:创建脚本运行上下文环境,加载脚本对象,向脚本引擎中导入脚本,解析脚本,将脚本内容与脚本对象相关联,运行脚本,通过脚本对象调用Java程序。
    4: 根据权利要求1所述的基于自定义脚本方式管理业务监控系统的方法,其特征在于,其中步骤b)还包括:判断脚本执行方式,如为页面执行脚本,则将脚本放入服务端的内存,如为一次执行脚本和周期执行脚本,则将脚本保存为文件,存放入服务端的硬盘中。

    说明书


    基于自定义脚本方式管理业务监控系统的方法

        【技术领域】

        本发明涉及电信行业的业务监控方法,且特别是有关于基于自定义脚本方式管理业务监控系统的方法。

        背景技术

        脚本语言(Script language)是为了缩短传统的编写-编译-链接-运行(edit-compile-link-run)过程而创建的计算机编程语言。脚本与高级编程语言相比,具有以下特性:语法和结构通常比较简单,学习和使用通常比较简单,通常以容易修改程序的“解释”作为运行方式,而不需要“编译”,程序的开发产能优于运行效能。

        许多脚本语言用来执行一次性任务,尤其是系统管理方面。它可以把服务组件粘合起来,因此被广泛用于GUI创建或者命令行。

        脚本通常以文本(如ASCII)保存,只在被调用时进行解释或编译。

        脚本简化了代码编写过程。诸如内存自动管理和溢出检查等性能问题可以不用考虑。在更低级或非脚本语言中,内存及变量管理和数据结构等耗费人工,为解决一个给定问题需要大量代码,当然这样能够获得更为细致的控制和优化。脚本缺少优化程序以提速或者降低内存的伸缩性。

        综上所述,脚本编程速度更快,且脚本文件明显小于如同类C程序文件。这种灵活性是以执行效率为代价的。脚本通常是解释执行的,速度可能很慢,且运行时更耗内存。在很多案例中,如编写一些数十行的小脚本,它所带来的编写优势就远远超过了运行时的劣势,尤其是在当前程序员工资趋高和硬件成本趋低时。

        由于目前的脚本语言可以实现复杂的业务逻辑,并且在运行时是通过脚本引擎解析执行,无需编译,因此很适合快速开发业务监控程序。但目前的Javascript脚本只能够在浏览器运行,无法与服务端程序交互,无法调用服务端程序。

        【发明内容】

        本发明的目的是通过自定义的脚本调用服务端预先暴露的接口的方法实现管理业务监控系统的功能。

        为达上述目的,本发明的基于自定义脚本方式管理业务监控系统的方法包括下列步骤:

        a)使用浏览器,在业务监控系统提供的网页中直接编写脚本或上传已有的脚本;

        b)将脚本通过HTTP方式传输至服务端保存;

        c)服务端调用Rhino脚本引擎执行脚本;

        d)输出执行结果。

        本发明中,步骤c)和步骤d)之间还包括:e)判断是否需要远程执行脚本,如需要远程执行脚本,则将脚本通过socket传输至采集代理,采集代理执行脚本并输出反馈结果至服务端。这样,脚本也可发布到远程采集代理上执行并返回结果。

        本发明中,步骤c)中服务端调用脚本引擎执行脚本主要包括下列步骤:创建脚本运行上下文环境,加载脚本对象,向脚本引擎中导入脚本,解析脚本,将脚本内容与脚本对象相关联,运行脚本,通过脚本对象调用Java程序。

        本发明中,步骤b)还包括如下步骤:判断脚本执行方式,如为页面执行脚本,则将脚本放入服务端的内存,如为一次执行脚本和周期执行脚本,则将脚本保存为文件,存放入服务端的硬盘中。

        综上所述,本发明由用户编写脚本,通过浏览器提交服务端后,利用开源项目Rhino提供脚本引擎解析脚本,将脚本嵌入服务端程序上下文环境内运行,达到使用脚本操作服务端业务逻辑的目的。在无需修改服务端程序的情况下,用户可编写脚本调用服务端预先暴露的接口,将脚本放置在服务器程序内部运行,也可将脚本发布到远程主机上的采集代理上执行并返回结果。这样,保证了系统的稳定性和扩展性,依赖脚本语言自身的特性,在不修改服务端代码,不重启服务端程序的情况下,扩展了系统功能,使得业务监控系统能够根据需要灵活地定制采集策略。同时由于脚本语言比高级编程语言更加简单,也缩短了开发时间,提高了编程人员的开发效率,扩充了监控手段。

        【附图说明】

        图1为本发明实施例的流程图。

        图2为用户编写的脚本的管理示意图。

        【具体实施方式】

        为让本发明的上述和其它目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合附图,作详细说明如下。

        基本概念

        1)脚本

        需要解析执行的程序,通常是一段文本文件,包含了用户所需要对系统进行的操作。目前使用javascript脚本语言进行编写,在服务端通过包装映射成java对象,注册到javascript的上下文中,javascript在服务端的解析封装使用Mozilla的Rhino脚本引擎完成.使用者可以运用javascript提供的语言特性,再结合包装过的java对象,可以定制各种特殊的功能。

        2)Rhino

        Mozilla组织的开源项目,纯Java实现的javascript解释器,为服务端程序提供javascript的解析功能。

        3)客户端

        在本发明中指网页浏览器,用户通过浏览器(客户端)来访问业务监控系统。

        4)服务端

        在本发明中指在服务器端部署的业务监控系统应用程序,使用高级编程语言编写,如Java,编译后部署在服务器上。

        5)采集代理

        在被监控的主机上安装的代理软件(Agent),主要用来采集该主机以及在其上运行的各类软件的关键性能指标(KPI)。从物理位置上来看,通常采集代理与服务端分属不同的主机,之间采用Socket通信。在本发明中,采集代理能够执行从服务端下发的脚本并反馈结果,达到远程监控的目的。

        实现原理

        1)脚本集成原理

        脚本输入:用户使用浏览器,在业务监控系统提供的网页中直接编写脚本或上传已有的脚本文件,提交后浏览器帮助用户将脚本通过HTTP方式传输至服务端保存。

        其中,用户在编写的脚本中可调用服务端预先提供地接口方法,以操纵服务端程序进行指定的工作。

        服务端接口:服务端程序可需按业务规则将自身抽象为对应的Javascript脚本对象,在本发明中细分为全局对象Root和普通对象,从功能上来看Root对象提供全局函数,而普通对象是做为业务监控系统中的某个功能模块映射在脚本引擎中的实体,如采集代理映射Agent,配置对象管理映射Mo等,脚本对象具体样式可见下文中实例。这些对象由高级编程语言Java进行编写,必须继承脚本引擎Rhino中提供的org.mozilla.javascript.ScriptableObject接口,表明自身含有可被外部脚本调用的Javascript函数,是对外界公布的方法。脚本对象暴露出的Javscript函数可能和本身Java的接口/类不一致,但各操作的实现都是调用Java来完成的。最后将这些ScriptableObject注册到Rhino脚本引擎的javascript上下文中。

        下面是全局对象和普通对象编写示例:

        Root.java

        public class Root extends ScriptableObject{

                 //根据唯一标识查询系统中的某个配置对象

               public static MoInfo findMoById(Context cx,Scriptable thisObj,

                   Object[]args,Function funObj);

        }

        Mo.java

        public class Mo extends ScriptableObject{

             //获取对象属性值

            public Object jsFunction_getAttribute(String name);

             //设置对象属性值

            public void jsFunction_setAttribute(String name,Object value)

        }

        以下演示如何通过脚本设置配置项的标题:

        var mo=findMoById(′1.0.21.1′);

        if(mo){

            mo.setAttribute(′caption′,′计费主机1′);

        }

        服务端判断脚本执行方式,如果为页面执行脚本,则直接将脚本放入内存交由脚本引擎解析,如为一次执行脚本和周期执行脚本,则将脚本保存为文件,存放在服务端的硬盘中。其中将执行一次的脚本类型设置为runonce,守护任务1分钟查询一次所有该类型的脚本,执行完毕后删除该脚本。其他模块可以直接通过脚本管理创建一个runonce的脚本,来使用此功能.将执行该脚本的时间点加入到Script的附件信息中,即自1970年到当前时间之间的毫秒数,以便守护任务判断执行条件。周期执行脚本的类型是schedule,附加信息是cron格式的周期表达式,守护任务1分钟扫描一次,检查附加信息中的周期表达式,发现有到期的即执行。

        将脚本提交至服务端后,服务端调用Rhino脚本引擎按照下列步骤执行脚本:创建脚本运行上下文环境,加载脚本对象,向脚本引擎中导入脚本,解析脚本,将脚本内容与脚本对象相关联,运行脚本,通过脚本对象调用Java程序。

        图2为用户自定义的脚本的管理示意图。其中:

        ScriptContext:脚本运行上下文

        ScriptManager:负责管理各脚本的生命周期

        Script:实体对象,记录脚本的类型,脚本内容,以及附加信息(周期、名称等)

        RunOnceScriptTask:负责只执行一次脚本,执行完成后,删除该脚本

        ScheduleScriptTask:负责周期执行脚本

        实施场景

        实施场景1:

        周期执行的脚本。每5分钟运行一次,检查主机上是否存在进程down的告警,如有告警则通过采集代理重启主机上的该进程。

        周期:cron表达式为00/5***?,即服务端每隔五分钟运行一次脚本

        由下文的脚本内容可以看出,脚本的语法完全遵循Javascript的规范,但在脚本中调用了服务端的业务逻辑,使Javascript突破了浏览器脚本的限制。

        //获取工具类

        var util=getUtil();

        //告警过滤器,指定了告警查询的条件

        var alarmFilter={

            moId:′1.0.21.1′,//告警宿主id

            grade:2,

            source:′threshold′,

            code:′process_down′,

            content:′/^process_command*/′,

            beginTime:util.currentTime()-5*60*1000,

            endTime:util.currentTime()

        };

        //调用服务端接口:根据过滤器的条件获取告警

        var alarms=fetchAlarm(alarmFilter);

        if(alarms&&alarms.length>0){

              //调用服务端接口:获取指定的采集代理对象

             var agent=findAgentByHost(′1.0.21.1′);

             if(agent){

                  //调用服务端接口:命令采集代理重启进程

                    agent.exec(′rsh′,{′script′:′xrun-restart/process_command′});

                    //调用服务端接口:清除告警

                    dischargeAlarm(alarmFilter);

             }

        }

        实施场景2:

        在页面执行的脚本。用户需要了解每台主机的实时性能情况,但又不想到每台主机上依次查看。此时可通过自定义脚本在所有的采集代理上执行监控命令sar-v 11,并返回html格式包装的结果。

            //返回结果

        var result=″<table>″;

        //调用服务端接口:查询所有类型为采集代理的配置项

        var list=findMoByType(′toptea_agent′);

        for(var i=0;i<list.length;i++){

            //调用服务端接口:获取采集代理对象

            var agent=findAgentByHost(list[i].getAttribute(′host′));

            if(!agent)

                     continue;

            result+=″<tr>″

            result+=″<td>″+list[i].caption+″</td>″;

            try{

                  //调用服务端接口:在所有采集代理上执行′sar-v 11′命令

               result+=″<td>″+agent.exec(′rsh′,{′script′:′sar-v 1 1′})+″</td>″;

            }catch(e){

                 result+=″<td>″+e+″</td>″;

            }

            result+=″</tr>″

        }

        result+=″</table>″;

        result;

        return result;

        实施场景3:

        执行一次的脚本。因系统割接时将中断某些主机的网络,此时监控系统将产生大量该主机网络中断的告警。在值班人员已得知的情况下,需要临时性将该主机在监控系统中设置为维护状态,以屏蔽告警。此类脚本只需在割接当天执行一次。

        执行时间:12:00,按计划开始系统割接,将主机状态置为“维护中”var mo=findMoById(′1.0.21.2′);if(mo){mo.setState(′1′,true);}执行时间:14:00按计划应该已完成割接,将主机状态置为“正常”var mo=findMoById(′1.0.21.2′);if(mo){mo.setState(′0′,true);}

        实施场景4:

        远程发布的脚本。除在服务端执行脚本外,还能将脚本通过socket方式发送到指定的采集代理上运行,注意:本功能的采集代理和服务端在物理位置上属于不同的主机。在接收完脚本后,采集代理调用fork函数创建出2个子进程,一个为执行子进程,用来执行脚本,另一个为监听子进程,用来读取执行子进程的所有标准输出,待标准输出通道关闭后,采集代理将结果通过socket再返回到服务端保存,用户可通过界面查询到执行结果。此时就完成了一个脚本远程发布的流程。

        综上所述,本发明由用户编写脚本,通过浏览器提交服务端后,利用开源项目Rhino提供脚本引擎解析脚本,将脚本嵌入服务端程序上下文环境内运行,达到使用脚本操作服务端业务逻辑的目的。在无需修改服务端程序的情况下,用户可编写脚本调用服务端预先暴露的接口,将脚本放置在服务器程序内部运行,也可将脚本发布到远程主机上的采集代理上执行并返回结果。这样,保证了系统的稳定性和扩展性,依赖脚本语言自身的特性,在不修改服务端代码,不重启服务端程序的情况下,扩展了系统功能,使得业务监控系统能够根据需要灵活地定制采集策略。同时由于脚本语言比高级编程语言更加简单,也缩短了开发时间,提高了编程人员的开发效率,扩充了监控手段。

        本发明中所述具体实施案例仅为本发明的较佳实施案例而已,并非用来限定本发明的实施范围。即凡依本发明申请专利范围的内容所作的等效变化与修饰,都应作为本发明的技术范畴。

    关 键  词:
    基于 自定义 脚本 方式 管理 业务 监控 系统 方法
      专利查询网所有文档均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    0条评论

    还可以输入200字符

    暂无评论,赶快抢占沙发吧。

    关于本文
    本文标题:基于自定义脚本方式管理业务监控系统的方法.pdf
    链接地址:https://www.zhuanlichaxun.net/p-997327.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2017-2018 zhuanlichaxun.net网站版权所有
    经营许可证编号:粤ICP备2021068784号-1