专利名称:一种分布式监控系统及其数据存储方法
技术领域:
本发明涉及一种网络管理领域,尤其涉及一种分布式监控系统及其数据存储方法。
背景技术:
随着信息技术和市场的发展,现代计算机平台包括存储、网络、计算等各种大量的分布式环境下异构的、动态的、复杂的资源,为了能够及时了解各种资源的情况,分布式监控系统也就应运而生。分布式监控系统用于监控计算机平台上硬件资源、虚拟资源和多种服务的状态和使用情况,以便及时采取相应措施,完成节点同步配置、负载均衡和资源监控,确保资源优化地分给用户。还能监控计算机平台上出现的故障或将来可能出现的问题提前预警、追查和定位问题的根源。目前,常用的监控方式主要有如下几种:(I)基于 SNMP (Simple Network Management Protocol,简单网络管理协议)的监控方式,SNMP由一组网络管理的标准组成,包含一个应用层协议(application layerprotocol)、数据库模型(database schema),和一组资料物件,该协议能够支持网络管理系统,用以监测连接到网络上的设备是否有任何引起管理上关注的情况;(2)基于 JMX (Java Management Extensions,即 Java 管理扩展)的监控方式,它是由SUN创建的一套规范,在Java编程语言中定义了应用程序以及网络管理和监控的体系结构、设计模式、应用程序接口以及服务;(3)基于WSDM的监控方式,WSDM是一个用于描述特定设备、应用程序或者组件的管理信息和功能的标准,所有的描述都是通过Web服务描述语言(Web ServicesDescription Language, WSD)进行的。然而无论采用哪种方式,最终的监控数据都是以一种特定的格式存储在文件或数据库中,供用户查询和处理。将数据存储在文件中,可以通过内存操作加快读写速度,但是监控的数据量非常大,但却使得使数据的安全性无法保证,且数据的查询检索也比较困难;将数据存储在数据库中,数据的安全性能够得到保障,同时查询检索效率也得到了提高,但是大量数据如果同时写入数据库,又会出现新的隐患,造成因低效的数据库写入而导致的数据写入拥堵及内存占用大的问题,甚至会导致服务器故障。
发明内容
本发明所要解决的技术问题之一是需要提供一种既能尽量保证监控数据的安全性及查询效率又能够尽量避免因低效的数据库写入而导致的数据写入拥堵及内存占用大的问题的分布式监控系统及其数据存储方法。为了解决上述技术问题,本发明提供了一种分布式监控系统的数据存储方法。该方法包括:监控端获取来自一个或多个被监控主机的监控数据;将包括所获取的监控数据的监控结果写入监控结果文件中;将监控结果文件的数据转换成数据流写入缓冲区,再将写入到缓冲区中的数据写入数据库。所述监控端获取来自一个或多个被监控主机的监控数据的步骤,进一步包括:所述监控端通过运行监控脚本连接一个或多个被监控主机并向其发出监控请求;作为对所述监控请求的响应,所述被监控主机向所述监控端发送关于其运行状况的监控数据。进一步,所述作为对所述监控请求的响应、所述被监控主机向所述监控端发送关于其运行状况的监控数据的步骤中,用于存储所述监控数据的数据结构包括表示被监控对象的运行状态的变量和表示被监控对象输出结果的变量。进一步,所述监控数据至少包括主机监控数据和/或服务监控数据,其中,将所获取的服务监控数据作为对该监控主机的服务监控结果以预先设定的结构写入监控结果文件;以及/或者将被监控主机的配置信息与所获取的相应被监控主机的主机监控信息的组合作为对该监控主机的监控结果 ,以预先设定的结构写入监控结果文件。在将监控结果文件的数据转换成数据流写入缓冲区、再将写入到缓冲区中的数据写入数据库的步骤中,监控端在检测到存在空闲socket时,将监控结果文件的数据换成数据流写入异步socket连接的缓冲区,再将写入到缓冲区中的数据写入数据库。其中,所述将监控结果文件的数据转换成数据流写入缓冲区、再将写入到缓冲区中的数据写入数据库的步骤,进一步包括:在所有所述监控结果文件中筛选要写入数据库的文件;将筛选要写入数据库的文件的数据转换成数据流写入缓冲区,再将写入到缓冲区中的数据写入数据库。进一步,根据如下规则至少之一在所有所述监控结果文件中筛选要写入数据库的文件:a)针对同一被监控主机或同一被监控主机的服务的监控结果文件,仅将时间戳较新的监控结果文件写入数据库;b)对于不是同一被监控主机的监控结果文件或不是同一被监控主机的服务的监控结果文件,优先写入时间戳较旧且检查主机和/或服务时间间隔较短的监控结果文件。根据本发明另一方面,还提供了一种分布式监控系统。该系统包括一监控端、一个或多个被监控主机,其中,所述监控端获取来自一个或多个被监控主机的监控数据;所述监控端将包括所获取的监控数据的监控结果写入监控结果文件中;所述监控端将监控结果文件的数据转换成数据流写入缓冲区,再将写入到缓冲区中的数据写入数据库。此外,所述监控端进一步在检测到存在空闲socket时将监控结果文件的数据换成数据流写入异步socket连接的缓冲区,再将写入到缓冲区中的数据写入数据库。此外,所述监控端进一步根据如下规则至少之一在所有所述监控结果文件中筛选要写入数据库的文件,将筛选要写入数据库的文件的数据转换成数据流写入缓冲区,再将写入到缓冲区中的数据写入数据库:a)针对同一被监控主机或同一被监控主机的服务的监控结果文件,仅将时间戳较新的监控结果文件写入数据库;b)对于不是同一被监控主机的监控结果文件或不是同一被监控主机的服务的监控结果文件优先写入时间戳较旧且检查主机和/或服务时间间隔较短的监控结果文件。与现有技术相比,本发明的一个或多个实施例可以具有如下优点:本发明提供的分布式监控系统的数据存储方法是基于文件-数据库转存模式存储的监控数据,避免了直接将大量监控数据直接(同步)地写入数据库而导致的数据库效率低、内存占用大的技术问题,有效地发挥了文件存储和数据库存储的优势,一方面先将数据存储在文件中,通过内存操作加快读写速度;另一方面,通过文件-数据库转存模式,将数据转存在数据库中,使得数据的安全性能够得到保障,同时也提高了查询检索效率。从而,从整体上提高了本发明的分布式监控系统及其数据存储方法的监控数据处理效率。本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
附图用来提供对本发明的进一步 理解,并且构成说明书的一部分,与本发明的实施例共同用于解释本发明,并不构成对本发明的限制。在附图中:图1是根据本发明实施例的分布式监控系统的架构示意图;图2是根据本发明实施例的分布式监控系统的数据存储方法的流程图。
具体实施例方式以下将结合附图及实施例来详细说明本发明的实施方式,借此对本发明如何应用技术手段来解决技术问题,并达成技术效果的实现过程能充分理解并据以实施。需要说明的是,只要不构成冲突,本发明中的各个实施例以及各实施例中的各个特征可以相互结合,所形成的技术方案均在本发明的保护范围之内。另外,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。图1示出根据本发明实施例的分布式监控系统的结构示意图。在本发明的分布式监控系统中,包括一监控端10、一个或多个被监控主机20,可选地,还包括数据库服务器30。其中,数据库服务器30要以为硬件也可以为软件,还可作为硬件与监控端10 —体设置。可选地,还可包括用于连接被监控主机20和监控端10的例如路由器40等其它网络设备,换而言之,监控端10和被监控主机20可直接或间接网络连接。监控端10用于对多个被监控主机20进行监控,并将从被监控主机20返回的监控结果存储在监控结果文件中,再将监控结果文件中的数据转储至数据库服务器30中。下面结合图1来更详细地说明根据本实施例的系统的监控端10、被监控主机20及数据库服务器30 (也简称数据库30)的具体处理。图2为一实施例的分布式监控系统的数据存储方法的流程图,下面参考图2进行详细说明。步骤S101,初始化监控端10与被监控主机20的监控配置。例如,解析配置文件内容,如监控周期、监控时间段、监控频率、文件存储路径等全局配置信息,将值存储到对应全局的变量中。步骤S102,监控端10发出监控请求,所述监控请求中包含用于监控被监控主机的配置文件。更具体地,监控端10通过运行监控脚本以预设频率连接一个或多个被监控主机20并向其发出监控请求。
优选地,监控端10获取并解析配置文件相关内容,设置发出监控请求的频率,创建 crc(Cyclic Redundancy Check)校验表用于包的 crc 校验,初始化 ssl (Secure SocketLayer)连接和信号处理,设置socket超时时间,连接被监控主机20。如果连接成功则填充、校验和发送监控请求包,则进入步骤S130,被监控主机20响应监控请求;否则发出alarm信号提醒连接失败。连接失败,会根据配置文件设置重新发送请求,达到设置的最大请求数以后就会返回连接失败信息给接收进程。步骤S103,被监控主机20响应监控请求。更具体地,作为对监控请求的响应,被监控主机20向监控端10发送关于其运行状况的监控数据。优选地,被监控主机20解析通过监控请求发送来的配置文件相关内容,将配置文件中的命令定义读入到内存中,待收到监控端10发送的监控请求包时,根据命令名称在内存中查找相应的结构,确定请求要执行的命令,进入步骤S104。步骤S104,被监控主机20执行与所解析出的命令对应的监控脚本,以获取监控数据,则进入步骤S105。步骤S105,被监控主机20监控数据转换,所获取的监控数据可以以统一的结构进行展示,优选的,将脚本获取的数据转换成状态-结果模式的数据结构,即{status, output}的数据结构返回至监控端10。这样,可以进一步提高本方法及系统的监控数据处理效率。优选地,首先定义返回结果的状态。优选地,监控状态主要包括以下几项:OK:被监控主机/服务状态正常;WR:被监控服务状态warning,即服务状态已处于危险状态,如果不及时处理可能服务会出现问题; CR:被监控主机/服务状态critical,即服务已经出现问题或主机不可达,需要查找原因并进行处理;UK:被监控服务状态未知unknown,有可能由于某种原因无法获取被监控服务的当前状态。步骤S106,被监控主机20返回监控数据;监控数据的数据结构将以步骤S105中所定义的状态返回。优选地,监控数据返回的数据结构就是上述的状态和具体的结果信息,即以状态-输出结果模式的数据结构,即{status,output}的结构返回给监控端10,则进入步骤S107。步骤S107,监控端10接收监控数据;监控端10填充请求包发送请求以后,等待被监控主机20的响应包,被监控主机20响应并处理后将结果包返回给监控端10,监控端10读取相应包进行crc校验后获取返回信息,完成监控数据的接收,则进入步骤S108。这样,通过步骤SlOl至S107,监控端10获取了来自一个或多个被监控主机20的监控数据。步骤S108,将包括所获取的监控数据的作为监控结果以预先设定的结构(预先设定的格式)写入监控结果文件中;监控数据至少包括主机监控数据和/或服务监控数据,其中主机监控数据用于表示针对作为整体的被监控主机20的运行状况的监控数据,服务监控数据用于表示针对被监控主机20的服务的监控数据。需要说明的是,根据监控系统的不同,定义的所要获取的监控数据的内容也不尽相同,但只要以相同的结构进行定义就可以使用通用的方法进行文件到数据库30的转存。优选地,将所获取的服务监控数据作为对该监控主机的服务监控结果以预先设定的结构写入监控结果文件;以及/或者将被监控主机20的配置信息与所获取的相应被监控主机20的主机监控信息的组合作为对该监控主机的监控结果,以预先设定的结构写入监控结果文件。这样,可以方便地将被监控主机20的配置信息及主机监控信息相关联,使得用户能够方便将被监控主机30的配置信息及主机监控信息存放在一个数据表中,从而进一步提高了用户查询效率。下面详细说明在将被监控主机20的配置信息与所获取的相应被监控主机20的主机监控信息的组合作为对该监控主机的监控结果的情况。解析相应被监控主机的配置文件,例如,进行 解析处理,通过主机名称进行数据的关联,以确定获得的监控结果是属于哪台被监控主机的结果,并将被监控主机的配置信息(包括主机名称、主机描述、ip地址等主机相关信息与获取的监控结果组合成新的用于展示给用户的数据信息)。然后,将所得到的监控结果文件连同针对相应的被监控主机的监控文件配置的解析结果一同写入缓存池,完成监控文件配置信息与监控结果的数据组合。数据组合完毕后,将数据写入到文监控结果文件中。举例而言,一个通用的主机的监控结果会包含如下的信息:HOSTStatus {H0ST_NAME:主机名称check_command:检查命令check_timeperiod:检查时间段notification_timeperiod:通知时间段current_state:当前状态output:检查结果last_check:上次检查时间next_check:下次检查时间}其中变量check_command和check_timeperiod是被监控主机20的配置信息的内容。以上是包括主机监控信息的监控结果的数据结构的例子。然后,通过步骤S109和S112来将监控结果文件的数据转换成数据流写入缓冲区(例如,异步socket缓冲区),再将写入到缓冲区中的数据写入数据库30。步骤S109,文件内容转换,将文件数据转换成数据流写入缓冲区,触发数据写入数据库请求。优选地,在检测到存在空闲socket时,触发数据写入数据库请求。进一步地,根据文件的时间顺序对文件处理进行优先级排序,根据当前空闲率决定创建的异步socket个数。打开对应的文件,将文件内容读取到异步socket中。这样,可进一步提高本方法及系统的监控数据处理效率。
优选地,判断文件优先级的算法如下:首先筛选监控结果;所述筛选监控结果的处理,具体根据如下预设规则至少之一在所有监控结果文件中筛选要写入数据库30的文件:a)针对同一被监控主机20或同一被监控主机20的服务的监控结果文件,仅将时间戳较新的监控结果文件写入数据库30,进一步地,可根据主机名的不可重复性作为判断文件是否为同一主机或服务的监控结果的依据;b)对于不是同一被监控主机20或同一被监控主机20的服务的监控结果文件优先写入时间戳较旧且检查主机和/或服务时间间隔较短的监控结果文件。根据上述规则,可进一步减少数据库30的负载,从而提高数据检索效率。步骤S110,等待数据写入数据库请求;一旦接收到数据写入请求,则进入步骤
Slllo步骤S111,进行数据结构转换;为了使文件存储的数据为了能够插入到数据库30中,需要进行数据的结构化,将文件中读取的数据结构转换为数据库30需要的数据结构。具体方法是,首先定义数据结构,结构中的每个变量与数据库30的数据库表相关列对应,并按照类型给出初始化的默认值;当将文件内容读取到字符串中后,根据字符串的标识,选择相应的数据结构,依次解析每个变量对应的值并赋值给数据结构相应的变量,最后形成和数据库表一致的数据结构。步骤SI 12,将数据写入数据库30 ;对已经过数据结构转换的监控结果数据,为了能够解析已定义的数据结构,需要按照json (Javascript Object Notation)轻量级的数据交换语言数据结构解析并存储监控结果写入数据库30,具体包括如下步骤:1、根据参数信息初始化所需变量;2、打开监控端的配置文件,将配置文件内容赋值给已知变量,如果读取失败则退出并返回错误信息;3、如果配置定义了需要使用ssl,则初始化ssl连接,所有的网络通信将会被封装;4、检查socket是否可以正常连接,如果正常进行后面的步骤,否则返回错误信息;5、根据使用的数据库30的类型,检查数据库30的驱动是否可用,并初始化信号处理;6、初始化和检查都正确结束后,进程等待处理连接请求;当连接请求到来时,创建处理线程,初始化数据库连接相关变量值,创建与数据库30的连接,如果连接成功,同主进程断开连接,申请特定的内存空间,循环获取数据信息,解析json数据的key-value值,根据key判断数据库的属性名称,将value作为值插入到相应的行中,判断数据是否已经接收完成,如果完成则结束线程,断开数据库30连接,释放内存空间,完成一次数据的写入。 本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。虽然本发明所揭露的实施方式如上,但所述的内容只是为了便于理解本发明而采用的实施方式,并非用以限定本发明。任何本发明所属技术领域内的技术人员,在不脱离本发明所揭露的精神和范围的前提下,可以在实施的形式上及细节上作任何的修改与变化,但本发明的专利保护范围,仍 须以所附的权利要求书所界定的范围为准。
权利要求
1.一种分布式监控系统的数据存储方法,其特征在于,包括: 监控端获取来自一个或多个被监控主机的监控数据; 将包括所获取的监控数据的监控结果写入监控结果文件中; 将监控结果文件的数据转换成数据流写入缓冲区,再将写入到缓冲区中的数据写入数据库。
2.根据权利要求1所述的方法,其特征在于,所述监控端获取来自一个或多个被监控主机的监控数据的步骤,进一步包括: 所述监控端通过运行监控脚本连接一个或多个被监控主机并向其发出监控请求; 作为对所述监控请求的响应,所述被监控主机向所述监控端发送关于其运行状况的监控数据。
3.根据权利要求2所述的方法,其特征在于,所述作为对所述监控请求的响应、所述被监控主机向 所述监控端发送关于其运行状况的监控数据的步骤中, 用于存储所述监控数据的数据结构包括表示被监控对象的运行状态的变量和表示被监控对象输出结果的变量。
4.根据权利要求1所述的方法,其特征在于,所述监控数据至少包括主机监控数据和/或服务监控数据,其中, 将所获取的服务监控数据作为对该监控主机的服务监控结果以预先设定的结构写入监控结果文件;以及/或者 将被监控主机的配置信息与所获取的相应被监控主机的主机监控信息的组合作为对该监控主机的监控结果,以预先设定的结构写入监控结果文件。
5.根据权利要求1至4中任一项所述的方法,其特征在于,在将监控结果文件的数据转换成数据流写入缓冲区、再将写入到缓冲区中的数据写入数据库的步骤中, 监控端在检测到存在空闲socket时,将监控结果文件的数据换成数据流写入异步socket连接的缓冲区,再将写入到缓冲区中的数据写入数据库。
6.根据权利要求1至4中任一项所述的方法,其特征在于,所述将监控结果文件的数据转换成数据流写入缓冲区、再将写入到缓冲区中的数据写入数据库的步骤,进一步包括: 在所有所述监控结果文件中筛选要写入数据库的文件; 将筛选要写入数据库的文件的数据转换成数据流写入缓冲区,再将写入到缓冲区中的数据写入数据库。
7.根据权利要求6所述的方法,其特征在于,根据如下规则至少之一在所有所述监控结果文件中筛选要写入数据库的文件: a)针对同一被监控主机或同一被监控主机的服务的监控结果文件,仅将时间戳较新的监控结果文件写入数据库; b)对于不是同一被监控主机的监控结果文件或不是同一被监控主机的服务的监控结果文件,优先写入时间戳较旧且检查主机和/或服务时间间隔较短的监控结果文件。
8.一种分布式监控系统,其特征在于,包括一监控端、一个或多个被监控主机,其中, 所述监控端获取来自一个或多个被监控主机的监控数据; 所述监控端将包括所获取的监控数据的监控结果写入监控结果文件中; 所述监控端将监控结果文件的数据转换成数据流写入缓冲区,再将写入到缓冲区中的数据写入数据库。
9.根据权利要求8所述的系统,其特征在于, 所述监控端进一步在检测到存在空闲socket时将监控结果文件的数据换成数据流写入异步socket连接的缓冲区、再将写入到缓冲区中的数据写入数据库。
10.根据权利要求9所述的系统,其特征在于, 所述监控端进一步根据如下规则至少之一在所有所述监控结果文件中筛选要写入数据库的文件,将筛选要写入数据库的文件的数据转换成数据流写入缓冲区,再将写入到缓冲区中的数据写入数据库: a)针对同一被监控主机或同一被监控主机的服务的监控结果文件,仅将时间戳较新的监控结果文件写入数据库,进一步地,可根据主机名的不可重复性作为判断文件是否为同一主机或服务的监控结果的依据; b)对于不是同一被监控主机或同一被监控主机的服务的监控结果文件优先写入时间戳较旧且检查主机和/或服 务时间间隔较短的监控结果文件。
全文摘要
本发明公开了一种分布式监控系统及其数据存储方法。该方法包括监控端获取来自一个或多个被监控主机的监控数据;将包括所获取的监控数据的监控结果写入监控结果文件中;将监控结果文件的数据转换成数据流写入缓冲区,再将写入到缓冲区中的数据写入数据库。利用本发明,既能尽量保证监控数据的安全性及查询效率又能够尽量避免因低效的数据库写入而导致的数据写入拥堵及内存占用大的问题。
文档编号H04L12/24GK103220167SQ20131009862
公开日2013年7月24日 申请日期2013年3月25日 优先权日2013年3月25日
发明者徐晓娟 申请人:中标软件有限公司