批量处理监控任务的方法及装置
技术领域
本发明涉及网络通信技术领域,具体涉及一种批量处理监控任务的方法及装置。
背景技术
目前,网络服务的种类和数量越来越多。在实际情况中,往往会将很多台服务器组成一个服务器集群,由该服务器集群共同为用户提供某项服务。因此,服务器的数量日益庞大,网络管理者经常需要同时对成百甚至上千台服务器进行监控,以便及时发现问题,确保服务的可靠性。
Zabbix软件是一款常用的监控软件,能够同时监控多台服务器。该软件为用户提供了友好直观的web界面,用户可以在web界面上通过鼠标点击的方式完成添加服务器、删除服务器、修改监控项等多项操作。因此,该软件以其直观性、易操作性的特点赢得了大量的用户。但是,实际情况中往往会涉及大量服务器以及诸多监控项,而zabbix软件在同时处理大量需求时的效率非常低下。例如,如果将某机房新添加的一千台服务器增加到监控列表里,用户通过zabbix软件需要点击“添加”按钮来逐一添加服务器,因而需要点击数千次鼠标才能完成所有服务器的添加工作。如果要从监控列表中删除一千台服务器,又要通过鼠标逐一点击“删除”按钮数千次才能实现。假设每添加/删除一台服务器耗时一秒钟,添加/删除一千台服务器则需耗时一千秒钟,这势必会影响监控软件的监控效率。而且,用户点击数千次鼠标的操作方式不仅容易因操作疏忽而发生错误,还容易导致“鼠标手”等健康问题。
由此可见,现有的监控软件在处理批量任务时存在着效率低下、操作繁琐且易出错的缺陷。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的批量处理监控任务的方法及装置。
依据本发明的一个方面,提供了一种批量处理监控任务的方法,包括:
接收至少包含一种批量任务的任务请求,将其中的批量任务划分为多个子任务组;
根据预设的任务处理模板,调用监控软件处理任务请求中包含的任务,其中,各个子任务组中的任务通过对应的子进程并行处理。
依据本发明的另一方面,提供了一种批量处理监控任务的装置,包括:
接收模块,适于接收至少包含一种批量任务的任务请求,将其中的批量任务划分为多个子任务组;
处理模块,适于根据预设的任务处理模板,调用监控软件处理任务请求中包含的任务,其中,各个子任务组中的任务通过对应的子进程并行处理。
在本发明提供的批量处理监控任务的方法及装置中,能够直接接收包含批量任务的任务请求,并将其中的批量任务划分为多个子任务组;然后,根据预设的任务处理模板,调用监控软件来处理该任务请求中包含的任务,每个子任务组中的任务通过对应的子进程并行处理。由此可见,本发明中的方法及装置能够处理包含批量任务的任务请求,并将其中的任务划分为多个并行处理的子任务组,从而显著提高了任务处理效率,降低了人工操作的繁琐性、进而杜绝了在繁琐操作中可能出现的疏忽性错误。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了本发明实施例提供的批量处理监控任务的方法的流程图;
图2示出了本发明一个具体实施例提供的批量处理监控任务的方法的流程图;以及,
图3示出了本发明实施例提供的批量处理监控任务的装置的结构图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
本发明实施例提供了一种批量处理监控任务的方法及装置,能够解决现有技术中监控软件处理批量任务时效率低下、操作繁琐且易出错的问题。
图1示出了本发明实施例提供的批量处理监控任务的方法的流程图。如图1所示,该方法包括如下步骤:
步骤S110:接收至少包含一种批量任务的任务请求。
其中,任务请求通过命令行形式实现,并且,任务请求中包含用于指示任务类型以及任务处理对象的参数信息。具体地,任务请求中包含的任务类型可以是以下类型中的一种或多种:添加监控对象、删除监控对象、修改监控对象所对应的监控模板、以及为监控对象设置分组。另外,当任务处理对象的数量较少时,用于指示任务处理对象的参数信息可以是各个任务处理对象的标识信息;或者,当任务处理对象的数量较多时,该用于指示任务处理对象的参数信息也可以是存储有全部任务处理对象的标识信息的数据文件的文件信息。
步骤S120:将上述任务请求中的批量任务划分为多个子任务组。
其中,子任务组的个数可以根据需要灵活设定,例如,可以根据任务处理对象的数量以及CPU内核数来确定子任务组的个数。
步骤S130:根据预设的任务处理模板,调用监控软件处理任务请求中包含的任务,其中,各个子任务组中的任务通过对应的子进程并行处理。
其中,在任务处理模板中设定了各个任务类型所对应的任务处理流程,根据任务请求中包含的任务类型,选择对应的任务处理流程进行处理。在处理过程中,首先,根据子任务组的数量派生出相应数量的子进程,然后,由各个子进程并行地调用监控软件进行处理。其中,该监控软件可以是zabbix软件,该zabbix软件通过其提供的应用程序接口API函数进行调用。
可选地,调用监控软件处理任务请求中包含的任务的步骤之后进一步包括:如果在预设时间内接收到监控软件返回的任务处理状态,则显示该任务处理状态;如果在预设时间内未接收到监控软件返回的任务处理状态,则重新调用监控软件处理任务请求中包含的任务。由此降低因网络故障所导致的任务处理失败等情况。
通过本发明中的方法能够处理包含批量任务的任务请求,并将其中的任务划分为多个并行处理的子任务组,从而显著提高了任务处理效率,降低了人工操作的繁琐性、进而杜绝了在繁琐操作中可能出现的疏忽性错误。
图2示出了本发明一个具体实施例提供的批量处理监控任务的方法的流程图。该方法的执行主体为本发明中用于批量处理监控任务的装置,该装置可通过软件编程或硬件芯片等方式实现。在该实施例中,以调用zabbix软件实现批量添加服务器为例进行说明。如图2所示,该方法包括如下步骤:
步骤S210:接收命令行形式的任务请求,获取该任务请求中包含的任务类型。
例如,该命令行形式的任务请求可以是:
[root@zabbix02v/usr/local/zbxtool]#/usr/local/zbxtool/zbxtool.py hostcreate
其中,“[root@zabbix02v/usr/local/zbxtool]#/usr/local/zbxtool/”为用于批量处理监控任务的装置(该装置在本实施例中通过软件实现)的安装路径,“zbxtool.py”为该装置所对应的可执行程序。另外,“host create”为该装置中用于实现批量添加服务器的函数,在该函数中预先定义了批量添加服务器的处理流程。因此,通过命令行中的“hostcreate”字段即可确定该任务请求中包含的任务类型为批量添加服务器。
步骤S220:获取上述任务请求中包含的任务处理对象。
其中,任务请求中包含的任务处理对象可以直接通过命令行中的特定字段来获取。例如,当命令行形式的任务请求为“[root@zabbix02v/usr/local/zbxtool]#/usr/local/zbxtool/zbxtool.py host create-h 10.10,10.11”时,其中的字段“-h 10.10,10.11”为指示任务处理对象的参数,在该参数中包含了各个任务处理对象的标识信息,因此,该命令行中的任务处理对象为标识号为10.10和10.11的两台服务器。
当命令行形式的任务请求为“[root@zabbix02v/usr/local/zbxtool]#/usr/local/zbxtool/zbxtool.py host create-f data.json”时,其中的字段“-f data.json”为指示任务处理对象的参数,在该参数中包含了存储有全部任务处理对象的标识信息的数据文件data.json的文件名,因此,该命令行中的任务处理对象为data.json这一数据文件中记录的全部服务器。在实际情况中,要添加的服务器常常来源于同一个系统,这时,直接将该系统中的服务器列表复制到数据文件中即可,由此能够简化命令行、提高输入效率。
另外,为了进一步简化命令行,当任务请求中用于指示任务处理对象的参数为缺省状态时,则默认从指定文件路径下读取数据文件,并将其中记录的服务器作为任务处理对象。例如,可以预先在与该装置相同的安装路径“[root@zabbix02v/usr/local/zbxtool]#/usr/local/zbxtool/”下设置数据文件data.json,这时,当命令行中省略“-fdata.json”这一字段时,则默认从上述路径下读取data.json中的数据作为任务处理对象。
步骤S230:分析任务处理对象的个数,将其划分为多个子任务组。
例如,在数据文件data.json中记录了如下数据:
“gwd01v.add.zwt.qihoo.net”,
“gwd02v.add.zwt.qihoo.net”,
“gwd03v.add.zwt.qihoo.net”,
“gwd04v.add.zwt.qihoo.net”,
“gwd05v.add.zwt.qihoo.net”,
“gwd06v.add.zwt.qihoo.net”,
“gwd07v.add.zwt.qihoo.net”,
“gwd08v.add.zwt.qihoo.net”,
“gwd09v.add.zwt.qihoo.net”,
“gwd10v.add.zwt.qihoo.net”,
……
依次读取上述各条数据,并将总数据的条数记录为任务处理对象的个数。在读取过程中,还可以进一步检查数据参数的格式是否正确,例如,检查每条数据的字段数是否符合预定格式,由此能够筛查出明显的字段错误,从而避免在后续的处理过程中报错。
根据任务处理对象的个数,并结合其他的参考指标来确定子任务组的个数。其中,其他的参考指标可以是内存大小、CPU内核数、以及API接收速度等。在本实施例中,假设任务处理对象为1000,CPU内核数为8,设定的子任务组个数为100,则每个子任务组中的任务处理对象为10。
步骤S240:根据预设的任务处理模板,调用zabbix软件处理上述任务请求中包含的批量添加服务器的任务。其中,各个子任务组中的任务通过对应的子进程并行处理。
其中,任务处理模板可通过预先定义的函数来实现。例如,在“host create”函数中预先定义了批量添加服务器的处理流程。在该处理流程中,会与zabbix软件建立通信连接,并根据子任务组的个数派生出相应数量的子进程,由各个子进程并行地处理对应的任务。每个子进程在处理过程中,需要调用zabbix软件提供的应用程序接口API函数来实现对应的任务处理。例如,在本实施例中,每添加一台服务器时,都需要调用zabbix软件提供的用于添加服务器的API函数host.creat来实现。另外,每个子进程还会将处理结果返回给主进程。
其中,由于派生了100个子进程,每个子进程只处理10台服务器,因此,仅需十几秒钟就能够完成1000台服务器的添加工作,显著降低了操作时间。
另外,可选地,本发明实施例中的方法还可以进一步包括步骤S250。在步骤S250中,如果在预设时间内接收到zabbix软件返回的任务处理状态,则显示该任务处理状态;如果在预设时间内未接收到zabbix软件返回的任务处理状态,则重新调用zabbix软件处理任务请求中包含的任务。
具体地,假设在预设时间内收到zabbix软件返回的任务处理状态为“1000台服务器全部添加成功”,则向用户显示该状态;或者,zabbix软件返回的任务处理状态也可以为“999台服务器添加成功,1台服务器添加失败”,这时,针对添加失败的服务器,用户可以通过zabbix软件提供的点击鼠标的方式进行添加。
假设在预设时间内未收到zabbix软件返回的任务处理状态,则重新调用zabbix软件处理任务请求中包含的任务,以防止由于网络故障或网络包丢失等原因所导致的zabbix软件没有收到任务的情况发生。也就是说,本发明中的方法在超时情况下会进行重试,当重试次数达到设定次数(如3次)后,则不再重试,直接提示错误信息。另外,除了超时重试的机制之外,本发明中的方法还可以将一批任务当中未成功的部分任务进行重试,以便尽可能减少失败任务数。
在上述实施例中,任务类型为批量添加监控对象,在本发明其他的实施例中,任务类型还可以是删除监控对象、修改监控对象所对应的监控模板、以及为监控对象设置分组等。具体处理方式与上述实施例类似。例如,删除监控对象时,可以在命令行中通过hostdelete实现,在host delete函数中调用zabbix软件提供的host.delete接口函数来实现删除监控对象的操作。修改监控对象所对应的监控模板时,可以在命令行中通过templates实现,在templates函数中调用zabbix软件提供的template.create、template.delete和/或template.update接口函数来实现创建监控模板、删除监控模板和/或更新监控模板的操作。为监控对象设置分组时,可以在命令行中通过host group实现,在host group函数中能够调用zabbix软件提供的hostgroup.create接口函数来实现创建分组的操作。
其中,上述的几种任务类型可以分别由不同的任务请求来实现,也可以将多种任务类型包含在同一个任务请求中。例如,当一个任务请求为“[root@zabbix02v/usr/local/zbxtool]#/usr/local/zbxtool/zbxtool.py host create-f data.json,hostgroup:[MySQL]”时,该任务请求中同时包含两种任务类型:一种任务类型为批量添加服务器(对应于host create函数),另一种任务类型为设置分组(对应于hostgroup函数)。前一种任务为批量任务,需由多个子进程并行处理;后一种任务为非批量任务,可由单一进程处理。通过上述命令行,能够将数据文件data.json中包含的服务器全部添加到监控列表里,并将这些服务器加入“MySQL”分组中。另外,当一个任务请求为[root@zabbix02v/usr/local/zbxtool]#/usr/local/zbxtool/zbxtool.py host create-f data.json,templates:[“addops-diskio”,“addops-linux”,“addops-ping”]时,该任务请求中同时包含批量添加服务器和设置监控模板这两种任务。通过上述命令行,能够将数据文件data.json中包含的服务器全部添加到监控列表里,并使这些服务器使用“diskio”,“linux”,“ping”这三个监控模板。其中,在每个监控模板中能够设定不同的监控项,例如监控内存、CPU或某一软件等。
由此可见,通过本发明实施例提供的批量处理监控任务的方法,能够用自动运行的脚本程序来代替zabbix等监控软件中通过点击鼠标来执行的操作,因而简化了操作方式,并通过并行处理的方式提高了效率,且避免了人工操作时的疏忽性错误。除了提高效率之外,本发明实施例中的方法还能够实现自动化的需求,比如,当某一个系统需要将其中的服务器添加到监控软件的监控列表里,或者需要修改某一监控模板时,该系统无法实现点击鼠标等人工操作,从而无法完成与监控软件之间的交互,而采用本发明提供的方法则可以很好地解决上述问题。该系统只需运行一段命令行就可以自动地实现添加/删除服务器、修改监控模板或创建分组等操作,从而满足了自动化的需求。
图3示出了本发明实施例提供的批量处理监控任务的装置300的结构图。如图3所示,该装置300包括:
接收模块31,适于接收至少包含一种批量任务的任务请求,将其中的批量任务划分为多个子任务组;以及,
处理模块32,适于根据预设的任务处理模板,调用监控软件处理任务请求中包含的任务,其中,各个子任务组中的任务通过对应的子进程并行处理。
其中,任务请求通过命令行形式实现,并且,任务请求中包含用于指示任务类型以及任务处理对象的参数信息。其中,用于指示任务处理对象的参数信息为各个任务处理对象的标识信息;或者,用于指示任务处理对象的参数信息为存储有全部任务处理对象的标识信息的数据文件的文件信息。
可选地,子任务组的个数根据任务处理对象的数量以及CPU内核数来确定。并且,任务请求中包含以下任务类型中的一种或多种:添加监控对象、删除监控对象、修改监控对象所对应的监控模板、以及为监控对象设置分组。并且,任务处理模板中设定了各个任务类型所对应的任务处理流程。
可选地,监控软件为zabbix软件,处理模块通过该zabbix软件提供的应用程序接口API函数来调用该zabbix软件。
可选地,处理模块32进一步包括:
显示子模块,适于在预设时间内接收到监控软件返回的任务处理状态时,显示该任务处理状态;以及,
重试子模块,适于在预设时间内未接收到监控软件返回的任务处理状态时,重新调用监控软件处理任务请求中包含的任务。
上述各个模块的具体实现细节可参照方法实施例中相应步骤的描述,此处不再赘述。
在本发明提供的批量处理监控任务的方法及装置中,能够直接接收包含批量任务的任务请求,并将其中的批量任务划分为多个子任务组;然后,根据预设的任务处理模板,调用监控软件来处理该任务请求中包含的任务,每个子任务组中的任务通过对应的子进程并行处理。由此可见,本发明中的方法及装置能够处理包含批量任务的任务请求,并将其中的任务划分为多个并行处理的子任务组,从而显著提高了任务处理效率,降低了人工操作的繁琐性、进而杜绝了在繁琐操作中可能出现的疏忽性错误。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
本发明公开了:
A1、一种批量处理监控任务的方法,包括:
接收至少包含一种批量任务的任务请求,将其中的批量任务划分为多个子任务组;
根据预设的任务处理模板,调用监控软件处理所述任务请求中包含的任务,其中,各个子任务组中的任务通过对应的子进程并行处理。
A2、根据A1所述的方法,其中,所述任务请求通过命令行形式实现,并且,所述任务请求中包含用于指示任务类型以及任务处理对象的参数信息。
A3、根据A1或A2所述的方法,其中,用于指示任务处理对象的参数信息为各个任务处理对象的标识信息;或者,用于指示任务处理对象的参数信息为存储有全部任务处理对象的标识信息的数据文件的文件信息。
A4、根据A3所述的方法,其中,所述子任务组的个数根据所述任务处理对象的数量以及CPU内核数来确定。
A5、根据A1-A4任一项所述的方法,其中,所述任务请求中包含以下任务类型中的一种或多种:
添加监控对象、删除监控对象、修改监控对象所对应的监控模板、以及为监控对象设置分组。
A6、根据A1-A5任一项所述的方法,其中,所述任务处理模板中设定了各个任务类型所对应的任务处理流程。
A7、根据A1-A6任一项所述的方法,其中,所述监控软件为zabbix软件,通过该zabbix软件提供的应用程序接口API函数来调用该zabbix软件。
A8、根据A1-A7任一项所述的方法,其中,所述调用监控软件处理所述任务请求中包含的任务的步骤之后进一步包括:
如果在预设时间内接收到所述监控软件返回的任务处理状态,则显示所述任务处理状态;
如果在预设时间内未接收到所述监控软件返回的任务处理状态,则重新调用所述监控软件处理所述任务请求中包含的任务。
本发明还公开了:
B9、一种批量处理监控任务的装置,包括:
接收模块,适于接收至少包含一种批量任务的任务请求,将其中的批量任务划分为多个子任务组;
处理模块,适于根据预设的任务处理模板,调用监控软件处理所述任务请求中包含的任务,其中,各个子任务组中的任务通过对应的子进程并行处理。
B10、根据B9所述的装置,其中,所述任务请求通过命令行形式实现,并且,所述任务请求中包含用于指示任务类型以及任务处理对象的参数信息。
B11、根据B10所述的装置,其中,用于指示任务处理对象的参数信息为各个任务处理对象的标识信息;或者,用于指示任务处理对象的参数信息为存储有全部任务处理对象的标识信息的数据文件的文件信息。
B12、根据B11所述的装置,其中,所述子任务组的个数根据所述任务处理对象的数量以及CPU内核数来确定。
B13、根据B9-B12任一项所述的装置,其中,所述任务请求中包含以下任务类型中的一种或多种:添加监控对象、删除监控对象、修改监控对象所对应的监控模板、以及为监控对象设置分组。
B14、根据B9-B13任一项所述的装置,其中,所述任务处理模板中设定了各个任务类型所对应的任务处理流程。
B15、根据B9-B14任一项所述的装置,其中,所述监控软件为zabbix软件,所述处理模块通过该zabbix软件提供的应用程序接口API函数来调用该zabbix软件。
B16、根据B9-B15任一项所述的装置,其中,所述处理模块进一步包括:
显示子模块,适于在预设时间内接收到所述监控软件返回的任务处理状态时,显示所述任务处理状态;
重试子模块,适于在预设时间内未接收到所述监控软件返回的任务处理状态时,重新调用所述监控软件处理所述任务请求中包含的任务。