网络监控

时间:2013-07-01 11:01:01

标签: php networking ubuntu interface snmp

图片:http://i40.tinypic.com/2hodx55.png

我已经使用Php和SNMP构建了一个网络接口监视器,但现在当我在localhost上执行它时,我看到我的图形一次又一次地转到原点(0)(请看图像),并且Y轴上的速度是错误。有时它会进入Millons和Millions。

请有人告诉我下面代码中的问题是什么

<?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'], ",").']}';


             ?>

1 个答案:

答案 0 :(得分:0)

您在这里看到的是一个经典的案例,比其刷新间隔更快地轮询 。通常情况下,计数器(在这种情况下,接口计数器)每隔几秒更新一次(10-15秒是一个常见值)。

如果计数器每15秒更新一次,并且您每5秒钟要求一次数据,那么您将连续一次或两次收到相同的值(取决于延迟,处理时间等)。如果您收到相同的两次,那么您将看到delta的零值(这是您的图像所示)。

有两种方法可以解决这个问题:

  1. 比计数器更新要求数据更少(30秒轮询通常可以正常工作)。显然,如果你能找到确切的刷新间隔,那么就可以使用它。
  2. 修改设备的配置以更快地刷新其计数器 。有时这是可能的,有时则不是;它只取决于制造商,软件以及已实施的内容。
  3. 对于Net-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”命令来更改缓存持续时间。