2013-07-01 120 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”命令来更改缓存持续时间。