1

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

Php と SNMP を使用して Network Interface Monitor を構築しましたが、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'], ",").']}';


             ?>
4

1 に答える 1

0

ここに表示されているのは、更新間隔よりも高速にカウンターをポーリングする典型的なケースです。多くの場合、カウンター (この場合はインターフェイス カウンター) は数秒ごとに更新されます (一般的な値は 10 ~ 15 秒です)。

カウンターが 15 秒ごとに更新され、5 秒ごとにデータを要求すると、同じ値が 1 回または 2 回続けて受信されます (待ち時間、処理時間などによって異なります)。同じを 2 回受け取ると、デルタの値がゼロになります (これが画像に表示されます)。

これを回避するには、次の 2 つの方法があります。

  1. カウンターが更新されるよりも少ない頻度でデータを要求します(通常、30 秒のポーリングは正常に機能します)。明らかに、正確な更新間隔がわかれば、それを使用できます。
  2. 機器の構成を変更して、カウンターをより速く更新します。これは可能な場合もあれば、不可能な場合もあります。メーカー、ソフトウェア、および実装されているものに依存します。

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) を 3 秒ごとにキャッシュしていることがわかります。私の場合、3 秒ごとよりも頻繁にデータを要求することはありません。NET-SNMP-AGENT-MIB::nsCacheTimeout (.1.3.6.1.4.1.8072.1.5.3.1.2) は読み取り/書き込みとしてマークされているため、「設定」コマンドを発行してキャッシュ期間を変更できる場合があります。

于 2014-01-07T02:34:55.000 に答える