技术领域
[0001] 本发明涉及计算机技术领域,尤其涉及一种基于监控代理的监控方法和监控代理装置。
相关背景技术
[0002] 监控系统中监控方式的分类按照监控服务端数据采集对象可划分为主动监控和被动监控。主动监控即监控服务端主动向被监控的机器发送数据采集请求,被监控机器接收请求并返回至监控服务端;被动监控即被监控机器主动发送自身的监控数据至监控服务端。在基于代理的监控系统中,监控代理也有两种实现方式:一种是主动监控方式,即监控代理接收监控服务端的数据采集请求,执行相应的指令采集监控数据并返回至监控服务端;另一种是被动监控方式,即监控代理定时采集监控数据并将监控数据主动发送至监控服务端。
[0003] 现有方案中的监控代理无法自定义数据采集配置、无法保证监控代理数据采集进程的高可用,例如,现有监控代理技术无法设置每个监控项应用不同的监控配置参数。此外,现有的基于代理的主动监控技术监控逻辑在服务端,从而造成服务端压力巨大,现有的基于代理的被动监控技术仅是监控代理推送监控数据,无法实现自定义监控参数,而且代理结构简单,无法应对监控项数据量较大的情况。
[0004] 在实现本发明过程中,发明人发现现有技术中至少存在如下问题:
[0005] 现有的监控代理无法自定义数据采集配置、无法保证数据采集进程的高可用,代理结构简单,无法应对监控项数据量较大的情况,服务端压力巨大。
具体实施方式
[0033] 以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
[0034] 本领域技术技术人员知道,本发明的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。
[0035] 图1是根据本发明第一实施例的基于监控代理的监控方法的主要步骤示意图。
[0036] 如图1所示,本发明第一实施例的基于监控代理的监控方法主要包括如下的步骤S101至步骤S103。
[0037] 步骤S101:被监控机器上的监控代理读取与被监控机器对应的监控参数。
[0038] 监控代理即监控代理程序,可通过批量部署的方式在被监控节点上部署监控代理程序,配置监控代理的执行进程数,并启动监控代理程序。被监控节点包括被监控机器,每一被监控机器部署有各自的监控代理程序。
[0039] 可通过手工录入或批量导入的方式,在监控服务端录入要监控的资源和监控项,监控服务端将此类配置存储至数据库,配置包括对监控参数的配置,监控参数包括:指示被监控机器的资源是否被监控的信息、被监控机器资源的监控项的信息(例如监控项列表)、指示各监控项是否开启监控的信息、各监控项的监控间隔信息。
[0040] 监控服务端为监控服务端程序,其部署在监控服务器上,管理员可登录监控服务端提供的管理页面查看监控数据。
[0041] 监控代理可以定时访问数据库以直接读取与被监控机器对应的监控参数,也可以定时调用监控服务端接口来读取该监控参数。
[0042] 步骤S102:监控代理根据监控参数,按照预设逻辑计算当前的监控任务队列。
[0043] 具体地,计算被监控资源的已开启监控的监控项列表;根据各监控项的监控间隔信息,计算各已开启监控的监控项的下次监控时间,将下次监控时间与当前时间比较,以根据该比较的结果计算得到当前的监控任务队列。
[0044] 在计算得到当前的监控任务队列之后,提供相应的当前监控任务队列数据接口。
[0045] 步骤S103:监控代理执行监控任务队列中的监控任务以采集监控数据,并将采集到的监控数据发送至监控服务端。
[0046] 其中,可通过多线程执行监控任务队列中的监控任务以采集监控数据,处理逻辑为先请求当前的监控任务队列,然后并根据返回的任务队列执行相应的监控数据采集指令。监控数据采集包含执行系统命令和监控插件两种。
[0047] 监控代理可以按照固定的时间间隔批量地将采集到的监控数据发送至监控服务端。例如,每分钟向监控服务端批量发送一次监控数据。
[0048] 在发送监控数据之前,可对采集到的监控数据做统一加密。
[0049] 本实施例的监控方法可以克服现有的基于代理的被动监控方案的以下缺陷:现有基于的基于代理的被动监控方式仅是监控代理推送监控数据,无法实现自定义监控参数,而且代理结构简单,无法应对监控项数据量较大的情况。而本实施例的监控方法通过监控配置读取、计算监控项队列以及多进程存活等方式,使得监控代理支持每个监控项应用独立的监控配置参数,实现了监控代理端停止监控的监控项不执行数据采集指令,减少了不必要的性能开销,同时支持不同的监控项使用不同的监控间隔,监控配置更加灵活。保证监控代理数据采集进程的高可用,使监控代理有能力应对监控项数据量较大的情况。并且监控逻辑在监控代理端,克服了监控逻辑在服务端的缺陷,减轻服务端压力。
[0050] 图2是根据本发明第二实施例的基于监控代理的监控方法的主要步骤示意图。
[0051] 如图2所示,本发明第二实施例的基于监控代理的监控方法主要包括如下的步骤S201至步骤S203。其中,步骤S201的具体实现与第一实施例中步骤S101相同。
[0052] 步骤S201:被监控机器上的监控代理读取与被监控机器对应的监控参数。
[0053] 步骤S202:监控代理在收到监控服务端发来的监控请求之后,根据读取的监控参数,按照预设逻辑计算当前的监控任务队列。
[0054] 监控服务端可以发针对一个监控项的监控请求,监控代理收到监控服务端发出的监控请求之后,查询从监控服务端或数据库定时读取的监控参数,根据监控参数的配置生成一个监控任务放在队列中,监控服务端也可以发针对多个监控项的监控请求,相应地,监控代理在收到监控请求之后,根据读取到的监控参数的配置生成多个监控任务并放入队列,得到当前的监控任务队列。按照预设逻辑计算当前的监控任务队列的详细实施步骤在步骤S102已经详细介绍,可参见步骤S102。
[0055] 需要说明的是,作为替换实施方式,本实施例中被监控机器的监控代理也可以部署在监控服务端,监控代理根据被监控机器的标识(例如被监控机器IP地址)读取与被监控机器对应的监控参数,监控服务端向其上的监控代理发送监控请求,监控代理根据读取的监控参数,按照预设逻辑计算当前的监控任务队列。
[0056] 步骤S203:监控代理执行监控任务队列中的监控任务以采集监控数据,并将采集到的监控数据发送至监控服务端。
[0057] 其中,监控代理采集监控数据之后,立即将采集到的监控数据返回至监控服务端。
[0058] 本实施例的监控方法可以克服现有的基于代理的主动监控方案的以下缺陷:现有的基于代理的主动监控技术监控代理只是单纯响应监控服务端的数据请求并执行数据采集指令,而无法自定义数据采集配置、无法保证监控代理数据采集进程的高可用,此外,现有的基于代理的主动监控技术监控逻辑在服务端,从而造成服务端压力巨大。而本实施例的监控方法通过在监控代理端监控配置读取、计算监控项队列以及多进程存活等方式,使得监控代理支持每个监控项应用独立的监控配置参数,实现了监控代理端停止监控的监控项不执行数据采集指令,减少了不必要的性能开销,同时支持不同的监控项使用不同的监控间隔,监控配置更加灵活。保证监控代理数据采集进程的高可用,使监控代理有能力应对监控项数据量较大的情况。并且监控逻辑在监控代理端,克服了监控逻辑在服务端的缺陷,减轻服务端压力。
[0059] 图3是根据本发明第三实施例的监控代理装置的主要模块示意图。
[0060] 本发明第三实施例的监控代理装置300位于被监控机器上,监控代理装置300主要包括:配置单元301、计算单元302、执行单元303、发送单元304。
[0061] 配置单元301,用于读取与被监控机器对应的监控参数。
[0062] 配置单元301可以通过定时访问数据库或定时调用监控服务端接口,来读取与被监控机器对应的监控参数。监控参数可以包括:指示被监控机器的资源是否被监控的信息、被监控机器资源的监控项的信息、指示各监控项是否开启监控的信息、各监控项的监控间隔信息。
[0063] 计算单元302,用于根据监控参数,按照预设逻辑计算当前的监控任务队列。
[0064] 计算单元302具体可以用于:计算被监控资源的已开启监控的监控项列表;根据各监控项的监控间隔信息,计算各已开启监控的监控项的下次监控时间,将下次监控时间与当前时间比较,以根据比较的结果计算得到监控任务队列。
[0065] 执行单元303,用于执行监控任务队列中的监控任务以采集监控数据。
[0066] 执行单元303具体可以通过多线程执行监控任务队列中的监控任务以采集监控数据。
[0067] 发送单元304,用于将采集到的监控数据发送至监控服务端。
[0068] 发送单元304具体可以通过多线程将采集到的监控数据发送至监控服务端。
[0069] 监控代理装置300可以通过上述各单元实现基于代理的被动监控。监控代理装置300的架构示意图如图4所示。
[0070] 如图4所示,虚线表示控制流,实线表示数据流,按照4-1至4-9编号,下面将按照编号详细介绍监控代理装置300的控制流和数据流。配置单元301、计算单元302、执行单元303、发送单元304在运行时为独立的一个或多个进程。
[0071] 配置单元301从数据库中读取本机(即监控代理装置300所在的被监控机器)的监控参数(4-1);
[0072] 监控参数被从数据库读取到配置单元301(4-2);
[0073] 计算单元302向配置单元301请求配置的监控参数以用于计算当前的监控任务队列(4-3);
[0074] 配置单元301将最新读取到的监控参数发送给计算单元302(4-4);
[0075] 执行单元303向计算单元302请求当前的监控任务队列(4-5);
[0076] 计算单元302提供当前监控任务队列数据接口,以将执行单元303请求的监控任务队列发送给执行单元303(4-6);
[0077] 执行单元303根据返回的任务队列执行相应的监控数据采集指令,监控数据采集包含执行系统命令和监控插件两种(4-7);
[0078] 执行单元303将采集到的监控数据发送至发送单元304(4-8)。
[0079] 发送单元304接收多线程的执行单元303发送的监控数据,并统一将数据加密发送至监控服务端(4-9)。
[0080] 作为另一种实施方式,上述编号“4-5”可改为“4-3”、“4-3”改为“4-4”、“4-4”改为“4-5”,即:执行单元303先向计算单元302发送监控任务队列请求,然后,计算单元302向配置单元301请求配置的监控参数以用于计算当前的监控任务队列,继而配置单元301将最新读取到的监控参数发送给计算单元302,计算单元302计算当前的监控任务队列之后,将执行单元303请求的监控任务队列发送给执行单元303。
[0081] 图5是根据本发明第四实施例的监控代理装置的工作流程示意图。
[0082] 本发明第四实施例的监控代理装置的工作流程如下:
[0083] 步骤S501:配置单元读取监控配置数据。
[0084] 为解决配置变化的问题,配置单元进程启动后每分钟从数据库或监控服务端同步一次监控配置数据,即配置的监控参数,确保获取的监控配置信息准确、及时。
[0085] 步骤S502:执行单元向计算单元请求监控任务队列。
[0086] 执行单元进程首次启动时向计算单元请求当前的监控任务队列信息。获得监控任务队列后消费队列数据并按照队列中的数据配置采集相应的监控项信息,以得到对应监控项的监控数据。
[0087] 步骤S503:计算单元响应执行单元的请求,并将当前的监控任务队列返回至执行单元。
[0088] 计算单元接收到执行单元的请求后,调用配置单元提供的接口,以获取该被监控资源的监控配置信息(即监控参数)。监控配置信息包括:该资源是否被监控、监控项列表、每个监控项是都开启监控以及每个监控项的监控间隔信息等。若该资源未被监控,则向执行单元返回空队列;若该资源已监控,则按如下逻辑生成当前的监控任务队列信息:
[0089] a.计算出该监控资源已开启监控的监控项列表;
[0090] b.根据监控项的监控间隔信息,计算每个已开启监控的监控项的下次监控时间next_check_time,并将其与当前时间now_time比较,如果next_check_time<=now_time,则将该监控项加入至要返回的监控任务队列;
[0091] c.返回计算出的监控任务队列。若是首次启动则步骤b可省略,直接返回所有已监控的监控项任务队列。
[0092] 步骤S504:执行单元采集监控数据。
[0093] 执行单元为多线程处理,可以在部署监控代理程序时配置监控代理中执行单元的进程数。每个进程处理逻辑为先向计算单元请求当前的监控任务队列,然后并根据返回的任务队列执行相应的监控数据采集指令。监控数据采集包含执行系统命令和监控插件两种。并将采集数据结果发送至发送单元。
[0094] 步骤S505:发送单元向监控服务端发送采集的监控数据。
[0095] 发送单元收到各执行单元进程发送的监控数据后,每分钟向监控服务端批量发送一次监控数据。
[0096] 本发明各实施例的监控代理装置也可以适用于基于代理的主动监控场景,与基于代理的被动监控不同的是,在利用监控代理装置实现基于代理的主动监控情况下,配置单元仍可以通过定时访问数据库或定时调用监控服务端接口,来读取与被监控机器对应的监控参数。而计算单元将在监控代理装置收到监控服务端发来的监控请求之后,再查询定时读取的监控参数,根据监控参数按照预设逻辑计算当前的监控任务队列,执行单元在采集到监控数据之后,立即通过发送单元将监控数据返回监控服务端。
[0097] 本发明实施例的监控代理装置采用将监控代理模块化、监控配置读取、计算监控项队列以及多进程存活等方式,实现了监控代理端停止监控的监控项不执行数据采集指令,减少了不必要的性能开销,同时支持不同的监控项使用不同的监控间隔,监控配置更加灵活。
[0098] 另外,在本发明实施例中监控代理装置的具体实施内容,在上面所述基于监控代理的监控方法中已经详细说明了,故在此重复内容不再说明。
[0099] 图6示出了可以应用本发明实施例的基于监控代理的监控方法或监控代理装置的示例性系统架构600。
[0100] 如图6所示,系统架构600可以包括终端设备601、602、603,网络604和服务器605。网络604用以在终端设备601、602、603和服务器605之间提供通信链路的介质。网络604可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
[0101] 用户可以使用终端设备601、602、603通过网络604与服务器605交互,以接收或发送消息等。终端设备601、602、603上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。
[0102] 终端设备601、602、603可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
[0103] 服务器605可以是提供各种服务的服务器,例如对用户利用终端设备601、602、603所浏览的购物类网站提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的产品信息查询请求等数据进行分析等处理,并将处理结果(例如目标推送信息、产品信息--仅为示例)反馈给终端设备。
[0104] 需要说明的是,本发明实施例所提供的基于监控代理的监控方法一般由服务器605执行,相应地,监控代理装置一般设置于服务器605中。
[0105] 应该理解,图6中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
[0106] 下面参考图7,其示出了适于用来实现本申请实施例的终端设备或服务器的计算机系统700的结构示意图。图7示出的终端设备或服务器仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
[0107] 如图7所示,计算机系统700包括中央处理单元(CPU)701,其可以根据存储在只读存储器(ROM)702中的程序或者从存储部分708加载到随机访问存储器(RAM)703中的程序而执行各种适当的动作和处理。在RAM 703中,还存储有系统700操作所需的各种程序和数据。CPU 701、ROM 702以及RAM 703通过总线704彼此相连。输入/输出(I/O)接口705也连接至总线704。
[0108] 以下部件连接至I/O接口705:包括键盘、鼠标等的输入部分706;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分707;包括硬盘等的存储部分708;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分709。通信部分709经由诸如因特网的网络执行通信处理。驱动器710也根据需要连接至I/O接口705。可拆卸介质711,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器710上,以便于从其上读出的计算机程序根据需要被安装入存储部分708。
[0109] 特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分709从网络上被下载和安装,和/或从可拆卸介质711被安装。在该计算机程序被中央处理单元(CPU)701执行时,执行本申请的系统中限定的上述功能。
[0110] 需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
[0111] 附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个单元或模块、程序段、或代码的一部分,上述单元或模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0112] 描述于本发明实施例中所涉及到的单元或模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元或模块也可以设置在处理器中,例如,可以描述为:一种处理器包括配置单元、计算单元、执行单元、发送单元。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定,例如,配置单元还可以被描述为“用于读取与被监控机器对应的监控参数的单元”。
[0113] 作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:被监控机器的监控代理读取与所述被监控机器对应的监控参数;所述监控代理根据所述监控参数,按照预设逻辑计算当前的监控任务队列;所述监控代理执行所述监控任务队列中的监控任务以采集监控数据,并将采集到的所述监控数据发送至监控服务端。
[0114] 根据本发明实施例的技术方案,被监控机器的监控代理读取与被监控机器对应的监控参数;监控代理根据监控参数,按照预设逻辑计算当前的监控任务队列;监控代理通过多线程执行监控任务队列中的监控任务以采集监控数据,并将采集到的监控数据发送至监控服务端。能够使得监控代理支持每个监控项应用独立的监控配置参数,在监控代理端实现对关闭监控的监控项不执行数据采集指令,减少不必要的性能开销,同时支持不同监控项应用不同的监控间隔,监控配置更加灵活,并可保证监控代理数据采集进程的高可用,使监控代理有能力应对监控项数据量较大的情况,还可克服监控逻辑在服务端的缺陷,减轻服务端压力。
[0115] 上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。