0

Net::SNMP を利用する Nagios プラグインを使用しようとすると問題が発生します。同時に多数の OID を照会しようとすると、応答がリンクの最大 MTU を超えるため、エラーが発生します。(メッセージ サイズ 2867 は maxMsgSize 1472 を超えています。)

このセクションのコードは次のとおりです。

$result = $session->get_request(
   Varbindlist => \@oids
);

Perlに方法はありますか

  1. @oid を小さなピースに分割する
  2. これらの部分を繰り返します
  3. 返された $results を単一のハッシュへの単一の参照に結合しますか?

これは、より多くのインターフェイスをサポートするためにスクリプトに加える最小の変更ですよね?

4

2 に答える 2

3
1) Split @oids into smaller pieces
2) Iterate over these pieces

リストを小さなリストに分割するには、 splice() を使用します。一度に 10 個が必要な場合:

while (@oids) {
    my @sublist = splice @oids, 0, 10;
    # do something with the 10 (or less) elements in @sublist
}
于 2011-06-11T12:50:26.990 に答える
0

このコードはテストされていませんが、リストを分割して実行する方法に関する一般的なアイデアとして提供しています。

my $divisions = int ( @oids / 10 );
my $offset = 0;
my @oids_list;
while ( $offset <= $#oids ) {
    my $top = $offset + $divisions;
    $top = $top <= $#oids ? $top : $#oids
    push @oids_list, [ @oids[ $offset .. $top ] ];
    $offset += $divisions + 1;
}
my @results;

foreach my $oids_ref ( @oids_list ) {
    push @results, $session->get_request(
        Varbindlist => $oids_ref
}

私の計算が正しければ、反復ごとの $session->get_request() からの戻り値のリストである @results が得られます。それがどのように見えるかわかりません。多分あなたはそれを連結するだけです。それを理解するのはあなたの部分です。;)

于 2011-06-11T04:49:25.267 に答える