php - 网络监控

标签 php networking ubuntu interface snmp

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

我已经使用 Php 和 SNMP 构建了一个网络接口(interface)监视器,但是现在当我在 localhost 上执行它时,我看到我的图表一次又一次地转到 origin(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'], ",").']}';


             ?>

最佳答案

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

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

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

  • 请求数据的频率低于更新计数器的频率(30 秒轮询通常可以正常工作)。显然,如果你能找出准确的刷新间隔,那么你就可以使用它。
  • 修改您的设备配置以更快地刷新其计数器。有时这是可能的,有时则不是;它仅取决于制造商、软件以及已实现的内容。

  • 对于 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) 被标记为读写,因此您可以发出“设置”命令来更改缓存持续时间。

    关于php - 网络监控,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17402885/

    相关文章:

    C# UDP 数据包发送和接收

    linux - 如何在 UNIX 中读取一个值

    php - Propel:无交叉表的多对多关系

    php - 是否可以在 apache 的不同目录中使用多个版本的 php?

    ruby-on-rails - Redis:奇怪的协议(protocol)/网络错误

    python - 使用 Python 与 TUN\TAP for MAC OSX (Lion) 接口(interface)

    linux - "vagrant halt"死于错误 "The SSH connection was unexpectedly closed by the remote end..."但机器成功关闭。 (

    python - 在 Ubuntu 服务器上部署 Django 应用程序时遇到问题

    php - 在foreach循环中跳过没有值的数组中的键

    php - 如何使用 HTML 和 PHP 在字段的下拉列表中添加新项目?