2013-07-01 169 views
1

圖片:http://i40.tinypic.com/2hodx55.png網絡監控

我已經使用PHP和SNMP內置網絡接口的顯示器,但現在,當我執行它在本地主機上我看到我的圖(0)一次又一次地去原點(請參閱圖像)並且Y軸上的速度也是錯誤的。有時它以毫秒和百萬計。

請誰能告訴我什麼是低於

<?php 
    $int="wlan0"; 


session_start(); 

    $rx0 =snmpget('localhost','public','.1.3.6.1.2.1.2.2.1.10.3'); 
    $tx0 =snmpget('localhost','public','.1.3.6.1.2.1.2.2.1.16.3'); 
    sleep(5); 
    $rx1 =snmpget('localhost','public','.1.3.6.1.2.1.2.2.1.10.3'); 
    $tx1 =snmpget('localhost','public','.1.3.6.1.2.1.2.2.1.16.3'); 

     $rx0 = substr($rx0, 11); 
     $tx0 = substr($tx0, 11); 
     $rx1 = substr($rx1, 11); 
     $tx1 = substr($tx1, 11); 

     $tBps = $tx1 - $tx0; 
     $rBps = $rx1 - $rx0; 

     $round_rx=$rBps; 
     $round_tx=$tBps; 



     $time=date("U")."000"; 


    $_SESSION['rx'][] = "[$time, $round_rx]"; 
    $_SESSION['tx'][] = "[$time, $round_tx]"; 
     $data['label'] = $int; 
     $data['data'] = $_SESSION['rx']; 

       if (count($_SESSION['rx'])>60) 
     { 
     $x = min(array_keys($_SESSION['rx'])); 
     unset($_SESSION['rx'][$x]); 

     } 




      echo '{"label":"'.$int.'","data":['.implode($_SESSION['rx'], ",").']}'; 


      ?> 

回答

0

在代碼中有什麼問題,你在這裏看到的是輪詢的經典案例反比它的刷新間隔更快。通常情況下,計數器(在這種情況下是接口計數器)每隔幾秒更新一次(10-15秒是常見值)。

如果計數器每15秒更新一次,並且每5秒鐘詢問一次數據,那麼您將連續收到一次或兩次相同的值(取決於延遲,處理時間等)。如果您收到相同的兩次,那麼您將看到三角洲的零值(這是您的圖像顯示的值)。

有兩種方法來解決這個問題:

  1. 詢問數據不經常比計數器被更新(30秒輪詢通常正常工作)。很明顯,如果你能找到確切的刷新間隔,那麼你可以使用它。
  2. 修改您的設備配置刷新其計數器更快。有時候這是可能的,有時候不是這樣;它只取決於製造商,軟件和已實施的內容。

淨-SNMP 「snmpd的」 守護程序,你可以走NET-SNMP的AGENT-MIB :: nsCacheTable(1.3.6.1.4.1.8072.1.5.3)有關計數器其內部緩存的更多信息。

例如:

snmpwalk -v2c -cpublic localhost 1.3.6.1.4.1.8072.1.5.3 | grep .1.3.6.1.2.1.2.2 
NET-SNMP-AGENT-MIB::nsCacheTimeout.1.3.6.1.2.1.2.2 = INTEGER: 3 
NET-SNMP-AGENT-MIB::nsCacheStatus.1.3.6.1.2.1.2.2 = INTEGER: cached(4) 

在這裏,你可以看到我的特定的盒子是緩存IF-MIB :: ifTable中(.1.3.6.1.2.1.2.2),這是你的表每三秒鐘使用一次。就我而言,我不會每三秒鐘詢問一次數據。 NET-SNMP-AGENT-MIB :: nsCacheTimeout(.1.3.6.1.4.1.8072.1.5.3.1.2)被標記爲可讀寫,因此您可能能夠發出「set」命令來更改緩存持續時間。