Ich gehöre zur Generation der "wilden Netzwerker", die zu Beginn des Jahrhunderts begannen, im postsowjetischen Raum Netzwerke unterschiedlicher Größe aufzubauen. Es gab nicht genug von allem - Geld, Ausbildung, Spezialisten, Ausrüstung ... Aber Begeisterung und Selbstvertrauen waren unermesslich. Sie formten Netze aus fast allem oder aus allem, wofür es genug Geld gab. Ich erinnere mich noch an den Tag, als ich meinen ersten L2-Schalter kaufte - den berühmten DES-3526 .
Natürlich gibt es irgendwann ein qualitatives Wachstum, und es wird notwendig, den gesamten Netzwerkzoo zu überwachen. Es gibt so viele Methoden und Software zur Überwachung, dass selbst das Auflisten und kurze Merkmale mehr als einen Artikel benötigt.
Vor ungefähr 5 Jahren habe ich mich verpflichtet, ein selbstgeschriebenes NMS-Modul in ABillS neu zu schreiben . Die Abrechnung wurde in Perl geschrieben, und zu dieser Zeit war ich darin "flink". Die Dokumentation zur Abrechnungs-API reichte aus, um die Webcam von PHP auf Perl zu übertragen. Zuerst verwendete ich für die regelmäßige Abfrage von Eisenstücken ein Analogon von fping in Perl und nahm separat SNMP-Statistiken. Was bei der Arbeit mit SNMP am ärgerlichsten ist, sind die schrecklichen Verzögerungen, und mit zunehmender Anzahl der abgefragten Geräte nehmen auch diese zu. Sie kämpfen damit mit verschiedenen Methoden: Parallelisierung, zunehmende Zeitüberschreitungen und so weiter.
Eigentlich möchte ich hier meine Implementierung von SNMP-Polling für Netzwerkgeräte teilen. Es wird die SNMP- Bibliothek verwendet , die Teil des Net-SNMP- Projekts ist . Um ehrlich zu sein, funktioniert der Code nach dem Prinzip "Neulinge haben Glück" (die tolerante Version lautet "Narren haben Glück"). Ich kopierte den Code in eine Art Seifenblatt (ich werde keinen Link geben - ich habe ihn nicht gefunden), beendete ihn ein wenig für meine Bedürfnisse, startete ihn und traute im ersten Moment nicht einmal meinen Augen. Das Observium, das ich zu dieser Zeit benutzte, hat mein nicht so großes Gitter (weniger als 300 Schalter) länger als eine Minute und in vier Streams abgefragt (ich stelle sofort fest , dass beim Abrufen ein Minimum an Sensoren verwendet wurde, ansonsten die Abfrage könnte 5 Minuten dauern). Und mein Skript hat das gleiche in 8-10 Sekunden getan.
Nun, und dann der Code selbst mit Kommentaren:
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, . .
Was klar geschrieben steht, zieht keinen Artikel an, sondern eine Notiz. Ich habe es geschrieben, weil mir die fehlenden Entwicklungen leid tun, die jetzt unnötig werden. Die Zeit vergeht, die Welt verändert sich. Kleine Anbieter gehen bankrott, werden von großen Akteuren absorbiert und wechseln zu Agenturmodellen. Infolgedessen wird viel gesammelte Erfahrung einfach überflüssig. Ich denke das ist nicht richtig :)