私は、世紀の初めにポストソビエト空間でさまざまなサイズのネットワークを構築し始めた「野生のネットワーク担当者」の世代に属しています。お金、教育、専門家、設備など、すべてが十分ではありませんでした...しかし、熱意と自信は計り知れませんでした。彼らは、ほぼすべてのものから、または十分なお金があったものからネットを彫刻しました。私が最初のL2スイッチを購入した日のことを今でも覚えています-有名なDES-3526。
当然、ある時点で質的な成長が見られ、このネットワーク動物園全体を監視する必要があります。監視するための方法とソフトウェアは非常に多いため、それらをリストするだけでも、簡単な特性には複数の記事が必要になります。
約5年前、私はABillSで自作のNMSモジュールを書き直すことに着手しました。請求はPerlで書かれていて、当時私はその中で「機敏」でした。課金APIのドキュメントは、WebカメラをPHPからPerlに転送するのに十分でした。最初は、鉄片を定期的にポーリングするために、Perlでのfpingの類似物を使用し、SNMP統計を個別に取得しました。SNMPを使用するときに最も厄介なのは、ひどい遅延であり、ポーリングされるデバイスの数が増えると、それらも増加します。彼らは、並列化、タイムアウトの増加など、さまざまな方法でこれに苦労しています。
実際、ここでは、ネットワーク機器のSNMPポーリングの実装について説明します。Net-SNMPプロジェクトの一部であるSNMPライブラリが使用されます。正直なところ、コードは「初心者はラッキー」という原則に基づいて機能します(許容バージョンは「愚か者はラッキー」です)。私はある種の石鹸シートにコードをコピーし(リンクは提供しません-見つかりませんでした)、必要に応じて少し仕上げて起動しましたが、最初は自分の目を信じることさえできませんでした。当時使用していたObserviumは、それほど大きくないグリッド(300スイッチ未満)を1分以上、4つのストリームでポーリングしました(ポーリング時に最小限のセンサーが使用されたことにすぐに注意します。それ以外の場合はポーリングします。 5分かかる場合があります)。そして、私のスクリプトは8〜10秒で同じことをしました。
それでは、コード自体にコメントを付けます。
use SNMP;
# , @obj_list.
my @obj_list = ('10.0.0.100', '10.0.0.101', '10.0.0.102');
# , .
my %snmpparms;
$snmpparms{Version} = 2;
$snmpparms{Retries} = 1;
$snmpparms{UseSprintValue} = 0;
$snmpparms{Community} = 'public';# :)
# OID.
my @mibs;
push @mibs, SNMP::Varbind->new( [ 'sysObjectID', 0 ] );
push @mibs, SNMP::Varbind->new( [ 'sysName', 0 ] );
push @mibs, SNMP::Varbind->new( [ 'sysLocation', 0 ] );
#
my $vb = SNMP::VarList->new(@mibs);
sub nms_poll {
foreach my $obj (@obj_list) {
my $sess = SNMP::Session->new(
%snmpparms,
DestHost => $obj,
);
$sess->get( $vb, [ \&nms_clb, $obj ] );
&SNMP::MainLoop(2);
}
return 1 if $status;
return undef;
}
# ,
sub nms_clb {
my ( $obj, $vl ) = @_;
# ,
if ( defined $vl->[0] ) {
&SNMP::finish();
}
else {
}
return ();
}
, . SNMP::MainLoop:
to be used with async SNMP::Session calls. MainLoop must be called after initial async calls so return packets from the agent will not be processed. If no args suplied this function enters an infinite loop so program must be exited in a callback or externally interupted.
5.04. "" SNMP, . .
はっきりと書かれていることは記事を引き付けるのではなく、むしろメモを引き付けます。不要になりつつある開発不足を気の毒に思って書いた。時が経ち、世界は変化しています。小規模なプロバイダーは破産し、大規模なプレーヤーに吸収され、代理店モデルに切り替えます。その結果、蓄積された多くの経験は単に不必要になります。私はこれが正しくないと思います:)