php - 网络监视

  显示原文与译文双语对照的内容
0 0

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

我已经建立了一个网络接口使用php和snmp监视器,但是现在当我在本地主机执行它一次又一次我看到我的图→ origin(0) ( 请看图像) 和速度在y轴上是错误的。 有时它会出现在Millons和上百万的地方。

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


<?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 0

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

如果计数器每 15秒更新一次,并且请求每 5秒数据,那么你将在一行( 根据延迟,处理时间,等等 ) 中一次或者两次收到相同的值。 如果你收到相同值两次,然后你会看到一个零值δ( 你的照片显示) 。

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

  1. 要求数据经常低于柜台( 。30-second 轮询通常工作正常) 更新。 如果你能找到确切的刷新间隔,那么你可以使用。
  2. 修改设备的配置以刷新它的计数器更快 。 有时这是可能的,有时它不是;它只取决于制造商。软件和已经实现的内容。

对于 net snmp"snmpd"守护进程,你可以遍历 NET-SNMP-AGENT-MIB::nsCacheTable ( 1.3.6.1. 4. 1. 8 072.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. 8 072.1.5.3. 1. 2 ) 标记为读写,因此你可能能够发出一个"集合集"命令来更改缓存持续时间。

...