2010-08-20 69 views
3

現在我正在使用PHP和Perl編寫程序來讀取計算機的系統數據,我們一直在使用SNMP來收集數據(或者更確切地說,被迫)。檢索數據後,我們應該將數據存儲在數據庫中,然後使用這些數據繪製折線圖。如何獲得計算機的平均CPU /處理器使用率?

目前,我正在使用此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個。)

所以我想知道是否有人可以幫助更好的代碼或改變它,以便我可以將它們加在一起,並找到一個平均值CPU /處理器的使用價值並將其存儲到數據庫中。因爲,我不太清楚如何去做,因爲循環一次只能掃描一個處理器,可能不知道有多少處理器。

在此先感謝。

+1

不用自己寫,你可以使用例如OpenNMS:http://www.opennms.org/ - 它應該能夠自動檢測您的機器,收集結果並顯示負載圖形。 – slu 2010-08-20 08:51:56

回答

3

使用主機和CPU號碼作爲雙鍵,並通過一組來獲得平均值。

下面是一個使用sqlite3的例子。

首先創建表:

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

然後插入一些TESTDATA(這將通過你的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等)。