2012-04-12 8 views
0

SNMP対応サービスを監視するPerlスクリプトがあります。Perl:SNMP - ワイルドカードOID

私は設定ファイルに複数のサービスがあり、各サービスには収集するメトリクスのリストがあります。

例:

[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 

私は現在、ネットを使用しています:: SNMP図書館:

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

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

誰かが助けてくれ、少なくとも私が正しい方向に向いていれば、とても感謝しています。

ありがとうございます。

答えて

2

switch_stuff1 = 1.5.1.6.*のようなエントリの場合は、データを取得する限り、最初の要求を送信した後、そのループの後にget_next_requestを送信することができます。

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