0

SNMP対応サービスを監視するPerlスクリプトがあります。

それが機能する方法は、複数のサービスを含む構成ファイルがあり、各サービスには収集するメトリックのリストがあります。

例:

[switch]
switch_stuff1 = 1.3.6.1.2.1.7.1.0
switch_stuff2 = 1.3.6.1.2.1.7.4.0
switch_stuff3 = 1.3.6.1.2.1.6.2.0
switch_stuff4 = 1.3.6.1.2.1.6.3.0
switch_stuff5 = 1.3.6.1.2.1.6.5.0

[router]
router_stuff1 = 1.3.6.1.2.1.6.8.0
router_stuff2 = 1.3.6.1.2.1.6.8.0
router_stuff3 = 1.3.6.1.2.1.6.9.0

[database]
db_stuff1 = 1.3.6.1.2.1.6.4.0
db_stuff2 = 1.3.6.1.2.1.6.5.0

スクリプトは構成ファイルをループし、すべてのメトリックの情報を取得して、出力をCSVファイルに書き込みます。

さて、私が助けを必要としていることに。

SNMPパスでワイルドカードを使用して収集できるようにするロジックを実装するように依頼されました。したがって、私の設定ファイルは次のようになる必要があります。

[switch]
switch_stuff1 = 1.5.1.6.*
switch_stuff2 = 1.45.*.12

したがって、コレクションが発生すると、どういうわけか次のようにループします。

      switch_stuff1

1.5.1.6.0 – found, continue
1.5.1.6.1 – found, continue
1.5.1.6.2 – not found, stop

      switch_stuff2           

1.45.0.12 – found, continue
1.45.1.12 – found, continue
1.45.2.12 – found, continue
1.45.3.12 – not found, stop

私は現在Net::SNMPライブラリを使用しています:

http://metacpan.org/pod/Net::SNMP

これは可能でしょうか?get_entriesメソッドまたはget_tableメソッドを使用して「snmpwalk」をシミュレートすることを考えていましたが、それが機能するかどうかはよくわかりません。

誰かが助けてくれるか、少なくとも私を正しい方向に向けることができれば、それは大いにありがたいです。

ありがとうございました。

4

1 に答える 1

2

このようなエントリのswitch_stuff1 = 1.5.1.6.*場合、最初のリクエストを送信し、その後、get_next_requestデータを取得する限りループします。

ただし、このような構成switch_stuff2 = 1.45.*.12では、もはやそれほど単純ではありません。使用することはできずget_next_request、可能な値を自分で繰り返す必要があります。問題は、数字が「通常」連続的であるが常にではないことであり、後者の場合、システムがすべての可能な数字を試すことは非常にストレスになります。少なくともこれを本当に行う必要がある場合は、データを収集するたびにスキャンするのではなく、存在するOIDを何らかの方法でキャッシュすることをお勧めします。

于 2012-04-12T18:42:20.880 に答える