发明内容
为解决上述问题,本发明提供一种物理机资源信息的数据处理方法及***,以减少传输数据中的冗余信息。
为达到上述发明目的,本发明提供一种物理机资源信息的数据处理方法,该方法包括:
步骤1,从linux命令的资源信息和proc文件***的文件中获取物理机的静态信息以及当前时刻以当前状态值或累加值的形式表示的动态信息;
步骤2,1秒后再次获取物理机的新动态信息,将以累加值的形式表示的新动态信息中的数据减去上一秒获取的动态信息的数据,得到1秒内的资源使用信息;
步骤3,创建低冗余数据表格:DTI用于标识数据类型,CI用于标识数据位置,DRB用于标识数据后续传输的数据项,DV用于标识数据项的值按顺序排列的结果;
步骤4,将所述静态信息、所述新动态信息以及所述1秒内的资源使用信息分别用低冗余数据表格进行表示,然后将其发送给目标节点,重复执行上述步骤,获取该目标节点的实时资源信息。
进一步的,所述步骤1中的静态信息获取方法包括:
步骤11:从Linux提供的查看网卡配置信息的ifconfig命令的输出信息中提取IP地址;
步骤12,读取proc文件***中的cpuinfo文件,获取处理器的核数和频率;
步骤13,读取proc文件***中的meminfo文件,获取内存总大小;
步骤14,读取proc文件***中的partitions文件,获取磁盘总大小;
步骤15,,从Linux提供的查看各部件状态的dmesg命令的输出信息中获取网络带宽;
步骤16,读取proc文件***中的stat文件,获取自开机以来的处理器使用量的累加值;
步骤17,读取proc文件***中的net/dev文件,获取自开机以来的网络带宽使用量的累加值。
进一步的,所述步骤1中的动态信息获取方法包括:
步骤111,读取proc文件***中的stat文件,获取自开机以来的处理器使用量的累加值;
步骤112,读取proc文件***中的meminfo文件,获取内存使用量;
步骤113,从Linux提供的查看磁盘资源的df命令的输出信息中提取磁盘使用量;
步骤114,读取proc文件***中的net/dev文件,获取自开机以来的网络带宽使用量的累加值。
进一步的,所述步骤2包括:
步骤21,将所述自开机以来的处理器使用量的累加值减去上一秒获取的处理器使用量累加值,得到该秒内的处理器的使用量;
步骤22,将所述自开机以来的网络带宽使用量累加值减去上一秒获取的网络带宽使用量累加值,得到该秒内的网络带宽的使用量。
进一步的,所述步骤3中:
若数据类型有NDTI种,则使用每条数据的前位作为DTI,其中表示不小于m的最小整数;
所述CI,用一位表示,若该位为1,则表示该条数据在数据报文中不是最后一条,若该位为0,则表示该条数据是数据报文的最后一条;
所述DV中的数据项的值为长度可变的字符串,则在该字符串的前面加上一个字节表示该字符串的长度;
每类数据的数据项数最多为NDRB,则使用传输的每条数据的至少NDRB位作为DRB,所述DRB的每一位对应一个数据项,如果某位为1,则表示DV包含该位对应的数据项的值,若该位为0,则DV不包含该数据项的值。
进一步的,所述步骤3中:
如果软件***内部传输的数据仅有一类,则可将DTI删去;若每次传输的数据的数据项均相同,则可将DRB删去。
为实现上述发明目的,本发明还提供一种物理机资源信息的数据处理***,该***包括:
信息获取模块,从linux命令的资源信息和proc文件***的文件中获取物理机的静态信息以及当前时刻以当前状态值或累加值的形式表示的动态信息;
信息处理模块,1秒后再次获取物理机的新动态信息,将以累加值的形式表示的新动态信息中的数据减去上一秒获取的动态信息的数据,得到1秒内的资源使用信息;
表格创建模块,创建低冗余数据表格:DTI用于标识数据类型,CI用于标识数据位置,DRB用于标识数据后续传输的数据项,DV用于标识数据项的值按顺序排列的结果;
结果获取模块,将所述静态信息、所述新动态信息以及所述1秒内的资源使用信息分别用低冗余数据表格进行表示,然后将其发送给目标节点,重复执行上述模块,获取该目标节点的实时资源信息。
进一步的,所述信息获取模块包括:
提取IP地址模块,从Linux提供的查看网卡配置信息的ifconfig命令的输出信息中提取IP地址;
第一读取proc文件***模块,读取proc文件***中的cpuinfo文件,获取处理器的核数和频率,读取proc文件***中的meminfo文件,获取内存总大小,读取proc文件***中的partitions文件,获取磁盘总大小,读取proc文件***中的stat文件,获取自开机以来的处理器使用量的累加值,读取proc文件***中的net/dev文件,获取自开机以来的网络带宽使用量的累加值;
运行dmesg命令模块,从Linux提供的查看各部件状态的dmesg命令的输出信息中获取网络带宽。
进一步的,所述信息获取模块还包括:
第二读取proc文件***模块,读取proc文件***中的stat文件,获取自开机以来的处理器使用量的累加值,读取proc文件***中的meminfo文件,获取内存使用量,读取proc文件***中的net/dev文件,获取自开机以来的网络带宽使用量的累加值;
执行df模块,从Linux提供的查看磁盘资源的df命令的输出信息中提取磁盘使用量。
进一步的,其特征在于,所述信息处理模块包括:
第一处理模块,将所述自开机以来的处理器使用量的累加值减去上一秒获取的处理器使用量累加值,得到该秒内的处理器的使用量;
第二处理模块,将所述自开机以来的网络带宽使用量累加值减去上一秒获取的网络带宽使用量累加值,得到该秒内的网络带宽的使用量。
本发明的有益效果在于:大大减少了数据传输中的冗余。若本发明被用于大规模的监控***中,可通过降低由监控数据产生的网络传输,从而增加了监控***的扩展性。而且,本发明采集数据的方法是直接利用操作***提供的数据,不存在使用中间数据采集工具带来的开销。
以下结合附图和具体实施例对本发明进行详细描述,但不作为对本发明的限定。
具体实施方式
图7是本发明的物理机资源信息的数据处理方法流程图。如图7所示,该方法包括:
S1,从linux命令的资源信息和proc文件***的文件中获取物理机的静态信息以及当前时刻以当前状态值或累加值的形式表示的动态信息;
S2,1秒后再次获取物理机的新动态信息,将以累加值的形式表示的新动态信息中的数据减去上一秒获取的动态信息的数据,得到1秒内的资源使用信息;
S3,创建低冗余数据表格:DTI用于标识数据类型,CI用于标识数据位置,DRB用于标识数据后续传输的数据项,DV用于标识数据项的值按顺序排列的结果;
S4,将所述静态信息、所述新动态信息以及所述1秒内的资源使用信息分别用低冗余数据表格进行表示,然后将其发送给目标节点,重复执行上述步骤,获取该目标节点的实时资源信息。
进一步的,所述S1中的静态信息获取方法包括:
S11:,从Linux提供的查看网卡配置的信息的ifconfig命令的输出信息中提取IP地址;
S12,读取proc文件***中的cpuinfo文件,获取处理器的核数和频率;
S13,读取proc文件***中的meminfo文件,获取内存总大小;
S14,读取proc文件***中的partitions文件,获取磁盘总大小;
S15,从Linux提供的查看各部件状态的dmesg命令的输出信息中获取网络带;
S16,读取proc文件***中的stat文件,获取自开机以来的处理器使用量的累加值;
S17,读取proc文件***中的net/dev文件,获取自开机以来的网络带宽使用量的累加值。
进一步的,所述S1中的动态信息获取方法包括:
S111,读取proc文件***中的stat文件,获取自开机以来的处理器使用量的累加值;
S112,读取proc文件***中的meminfo文件,获取内存使用量;
S113,,从Linux提供的查看磁盘资源的df命令的输出信息中提取磁盘使用量;
S114,读取proc文件***中的net/dev文件,获取自开机以来的网络带宽使用量的累加值。
进一步的,所述S2包括:
S21,将所述自开机以来的处理器使用量的累加值减去上一秒获取的处理器使用量累加值,得到该秒内的处理器的使用量;
S22,将所述自开机以来的网络带宽使用量累加值减去上一秒获取的网络带宽使用量累加值,得到该秒内的网络带宽的使用量。
进一步的,所述S3中:
若数据类型有NDTI种,则使用每条数据的前位作为DTI,其中表示不小于m的最小整数;
所述CI,用一位表示,若该位为1,则表示该条数据在数据报文中不是最后一条,若该位为0,则表示该条数据是数据报文的最后一条;
所述DV中的数据项的值为长度可变的字符串,则在该字符串的前面加上一个字节表示该字符串的长度;
每类数据的数据项数最多为NDRB,则使用传输的每条数据的至少NDRB位作为DRB,所述DRB的每一位对应一个数据项,如果某位为1,则表示DV包含该位对应的数据项的值,若该位为0,则DV不包含该数据项的值。
进一步的,所述S3中:
如果软件***内部传输的数据仅有一类,则可将DTI删去;若每次传输的数据的数据项均相同,则可将DRB删去。
图8是本发明的物理机资源信息的数据处理***示意图。如图8所示,该***包括:
信息获取模块100,从linux命令的资源信息和proc文件***的文件中获取物理机的静态信息以及当前时刻以当前状态值或累加值的形式表示的动态信息;
信息处理模块200,1秒后再次获取物理机的新动态信息,将以累加值的形式表示的新动态信息中的数据减去上一秒获取的动态信息的数据,得到1秒内的资源使用信息;
表格创建模块300,创建低冗余数据表格:DTI用于标识数据类型,CI用于标识数据位置,DRB用于标识数据后续传输的数据项,DV用于标识数据项的值按顺序排列的结果;
结果获取模块400,将所述静态信息、所述新动态信息以及所述1秒内的资源使用信息分别用低冗余数据表格进行表示,然后将其发送给目标节点,重复执行上述模块,获取该目标节点的实时资源信息。
进一步的,所述信息获取模块100包括:
提取IP地址模块,从Linux提供的查看网卡配置的信息ifconfig命令的输出中提取IP地址;
第一读取proc文件***模块,读取proc文件***中的cpuinfo文件,获取处理器的核数和频率,读取proc文件***中的meminfo文件,获取内存总大小,读取proc文件***中的partitions文件,获取磁盘总大小,读取proc文件***中的stat文件,获取自开机以来的处理器使用量的累加值,读取proc文件***中的net/dev文件,获取自开机以来的网络带宽使用量的累加值;
运行dmesg命令模块,从Linux提供的查看各部件状态的dmesg命令中获取网络带宽。
进一步的,所述信息获取模块100还包括:
第二读取proc文件***模块,读取proc文件***中的stat文件,获取自开机以来的处理器使用量的累加值,读取proc文件***中的meminfo文件,获取内存使用量,读取proc文件***中的net/dev文件,获取自开机以来的网络带宽使用量的累加值;
执行df模块,从Linux提供的查看磁盘资源的df命令的输出信息中提取磁盘使用量。
进一步的,其特征在于,所述信息处理模块200包括:
第一处理模块,将所述自开机以来的处理器使用量的累加值减去上一秒获取的处理器使用量累加值,得到该秒内的处理器的使用量;
第二处理模块,将所述自开机以来的网络带宽使用量累加值减去上一秒获取的网络带宽使用量累加值,得到该秒内的网络带宽的使用量。
进一步的,所述表格创建模块300中:
若数据类型有NDTI种,则使用每条数据的前位作为DTI,其中表示不小于m的最小整数;
所述CI,用一位表示,若该位为1,则表示该条数据在数据报文中不是最后一条,若该位为0,则表示该条数据是数据报文的最后一条;
所述DV中的数据项的值为长度可变的字符串,则在该字符串的前面加上一个字节表示该字符串的长度;
每类数据的数据项数最多为NDRB,则使用传输的每条数据的至少NDRB位作为DRB,所述DRB的每一位对应一个数据项,如果某位为1,则表示DV包含该位对应的数据项的值,若该位为0,则DV不包含该数据项的值。
进一步的,所述表格创建模块300中:
如果软件***内部传输的数据仅有一类,则可将DTI删去;若每次传输的数据的数据项均相同,则可将DRB删去。
本发明的资源信息采集方法面向的是Linux操作***,信息来源为Linux提供的命令和proc文件***,proc文件***主要包括资源总量和资源的使用情况,资源使用情况是以自开机以来的累加值(如CPU的负载和网络传输量等)和当前状态(如内存使用量和磁盘的使用量等)的形式表示的。
一个数据报文可以包含一条或多条数据。使用该发明中的数据表示方法,一条完整的数据的表示如图1,一个具有多条数据的数据报的表示如图2。
一个大规模***的监控***,传输的数据共两类:静态数据和动态数据。其中的每类数据所包含的数据项(假设各数据项值的大小和单位,以下数字均用10进制表示)如下:
静态数据(共6项):网络地址(10.10.10.10,占4个字节)、处理器核数(8个,占一个字节)、处理器频率(2048MHZ,占两个字节)、内存总大小(4192MB,占两个字节)、磁盘总大小(140272MB,占四个字节)和网卡带宽(1000Mbps,占两个字节)。
动态数据(共5项):网络地址(10.10.10.10占4个字节)、处理器负载(123MHZ,占两个字节)、内存使用量(2001MB,占两个字节)、磁盘使用量(2013MB,占四个字节)和网卡带宽使用量(28Mbps,占两个字节)。
其中处理器负载和网卡带宽使用量是以自开机以来的累加值的形式表示,其它的均以当前状态的形式表示。因为该软件***内部传输的数据共两类,所以每条数据的DTI为位,1表示静态数据,0表示动态数据。DRB为6位:对于静态数据,DRB的6位(第一位到第六位)依次对应网络地址、处理器核数、处理器频率、内存总大小、磁盘总大小和网卡带宽;对于动态数据,DRB的前5位(第一位到第五位)依次对应网络地址、处理器负载、内存使用量、磁盘使用量和网卡带宽使用量。
为便于实现,使用一个字节来表示DTI(第8位)、CI(第7位)和DRB(前6位)。
数据采集的具体步骤如下:
步骤A:利用Linux提供的一些命令和proc文件***的文件获取物理机的静态信息和该时刻以累加值的形式表示的动态信息;
步骤B:将获取的静态信息处理成低冗余的数据报文,发送给需要获取该物理机信息的目标节点;
步骤C:1秒后从新从proc文件***的文件中读取物理机的动态信息;
步骤D:对于以累加值的形式表示的动态信息,将步骤C获取的数据分别减去1秒前获取的数据,得到该1秒内的资源使用情况;
步骤E:将步骤C获得的以当前状态为表示形式的动态信息和步骤D计算得出的动态信息处理成低冗余的数据报文,发送给需要获取该物理机信息的目标节点;
步骤F:重复步骤C‐E,目标节点就可以获取该节点实时的资源信息。
其中步骤A的具体步骤为:
步骤A1:运行ifconfig(Linux中查看网卡配置的信息),提取输出信息中的IP地址(10.10.10.10);
步骤A2:读取proc文件***中的cpuinfo文件,获取处理器的核数(8)和频率(2048MHZ);
步骤A3:读取proc文件***中的meminfo文件,获取内存总大小(4192MB);
步骤A4:读取proc文件***中的partitions文件,获取磁盘总大小(140272MB);
步骤A5:运行dmesg命令(Linux提供的查看各部件状态的命令),获取网络带宽(1000Mbps);
步骤A6:读取proc文件***中的stat文件,获取自开机以来的处理器使用量的累加值;
步骤A7:读取proc文件***中的net/dev文件,获取自开机以来的网络带宽使用量的累加值。
步骤B中处理得到的数据报文如图3,其中BF(二进制为10111111)为表示DTI、CI和DRB的8位数,其余的分别表示各静态数据项的值。
步骤C又包括一下步骤:
步骤C1:读取proc文件***中的stat文件,获取自开机以来的处理器使用量的累加值;
步骤C2:读取proc文件***中的meminfo文件,获取内存使用量(2001MB);
步骤C3:执行df(Linux提供的查看磁盘资源的命令),从该命令输出信息中提取磁盘使用量(2013MB);
步骤C4:读取proc文件***中的net/dev文件,获取自开机以来的网络带宽使用量的累加值;
步骤D包括一下步骤:
步骤D1:将步骤C1获取的处理器使用量累加值减去上一秒(从步骤A6或步骤C1)获取的处理器使用量累加值,得到该秒内的处理器的使用量(123MHZ);
步骤D2:将步骤C4获取的网络带宽使用量累加值减去上一秒(从步骤A7或步骤C4)获取的网络带宽使用量累加值,得到该秒内的网络带宽的使用量(28Mbps);
步骤E处理得到的数据报文如图4,其中1F(二进制为00011111)为表示DTI、CI和DRB的8位数,其余的分别表示各动态数据项的值。
如果要将步骤A获得的静态数据与步骤C获取的动态数据一起发送,则将这些数据处理得到的数据报文如图5,其中FF(二进制为11111111)和1F(二进制为00011111)分别为表示静态和动态数据的DTI、CI和DRB的前8位数,静态数据的CI为1(FF的第7位)表示该条数据后还有数据(动态数据),而动态数据的CI为0(1F的第7位)表示该条数据为最后一条。
如果目标节点仅需要获得该物理机节点的处理器负载、内存使用量和磁盘使用量的动态数据,则步骤E处理得到的数据报如图6,其中0F(二进制为00001111)为表示DTI、CI和DRB的8位数。DRB为0F(二进制为01111),表示该数据报文的数据中的DV仅含有网络地址、处理器负载、内存使用量和磁盘使用量的值,不包含网卡带宽使用量。
使用本发明的数据表示方法需要知道软件***内部传输的数据种类个数和每类数据包含的数据项的个数。对于值是数字的数据项需要知道该数据项的大小。
每条数据的DTI用于标识数据的类型。一个软件***内部传输的数据共有NDTI类,则使用每条数据的前(表示不小于m的最小整数)位作为DTI,来表示该条数据的类型。
紧随DTI的是CI,用一位表示。若该位为1,则表示该条数据在数据报文中不是最后一条,反之,则表示该条数据是数据报文的最后一条。
CI之后是DRB,用于标识其后续的数据项。每类数据的数据项数最多为NDRB,则使用传输的每条数据的至少NDRB位作为DRB。DRB的每一位对应一个数据项。DRB中,如果某位为1,则表示DV包含该位对应的数据项的值,反之,DV不包含该数据项的值。
最后DV为按照CI制定的顺序将每个数据项的值进行排列的结果。如果该值为长度可变的字符串,则在该字符串的前面加上一个字节表示该字符串的长度。
如果软件***内部传输的数据仅有一类,则可将DTI删去;若每次传输的数据的数据项均相同,则可将DRB删去。从而进一步的减少软件内部传输数据的冗余。
当然,本发明还可有其它多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。