如何获得计算机的平均CPU /处理器使用率?

现在我正在用PHP和Perl编写一个程序来读取计算机的系统数据,我们一直在使用SNMP来收集数据(或者是强制)。 检索数据后,我们应该将数据存储在数据库中,然后使用这些数据绘制出一个线图。

目前,我正在使用这个perl脚本来检索计算机的CPU /处理器使用情况。

$MIB1 = ".1.3.6.1.2.1.25.3.3.1.2"; #Cpu Processors $HOST = shift; #or localhost for testing $count = 0; #print out all the processors of the computer and their values #SNMP is used with perl because of the libraries #snmpwalk retrieves information from the computers by the computer name and MIB #as there are many values, they are stored in an array to be used (@values) = &snmpwalk("$HOST","$MIB1"); foreach $value (@values) { $count++; if ($value) { #fixes the value for presentation $goodvalue = &strip_comment($value); #prints out the result. $count will count out the processor number print "CPU Usage of Processor $count: $goodvalue%\n"; } if ($value > 90){ #warns user if the processor usage is over 90% print "Warning: CPU Usage over 90%! \n" } else { warn "No response from host :$HOST:\n"; } #provides error } 

代码,或者更确切地说,SNMP检索几个单独的处理器,许多人应该知道在一台计算机上可能有许多处理器,因此将这些数据存储到一个不太实际的数据库中(例如,如果一台计算机只有2个处理器,有4个房间有100个)

所以我想知道是否有人可以帮助更好的代码或改变它,以便我可以将它们加在一起,并findCPU /处理器使用的平均值并将其存储到数据库中。 因为我不太清楚如何去做,因为循环一次只能扫描一个处理器,可能不知道有多less处理器。

提前致谢。

使用主机和CPU号码作为一个双重的密钥,和一组来获得平均。

这里是一个与sqlite3的例子。

首先创建表格:

 CREATE TABLE cpu (host string, cpu integer, load integer, primary key (host, cpu)); 

然后插入一些测试数据(这将由您的perl脚本完成):

 INSERT INTO cpu (host, cpu, load) VALUES ("appserv", 1, 25); INSERT INTO cpu (host, cpu, load) VALUES ("appserv", 2, 15); INSERT INTO cpu (host, cpu, load) VALUES ("dbserv", 1, 10); INSERT INTO cpu (host, cpu, load) VALUES ("dbserv", 2, 30); INSERT INTO cpu (host, cpu, load) VALUES ("dbserv", 3, 5); INSERT INTO cpu (host, cpu, load) VALUES ("dbserv", 4, 5); 

现在你可以得到每个主机的平均负载,可以使用PHP检索和绘制:

 SELECT host, avg(load) FROM cpu GROUP BY host; appserv|20.0 dbserv|12.5 

所有主机的总平均数:

 SELECT avg(load) FROM cpu; 15.0 

或者找到任何高负载的主机:

 SELECT host FROM cpu WHERE load > 25; dbserv 

你可能会想制作一个你所有计算机的表格,并把它连接到上面的cpu表格,用computer_id交换主机字符串。

所有这一切都假设你正在使用关系数据库(即SQLite,MySQL,Oracle等)。