Interrogation SNMP rapide des périphériques réseau

J'appartiens à la génération des «networkers sauvages» qui au début du siècle ont commencé à construire des réseaux de différentes tailles dans l'espace post-soviétique. Il n'y avait pas assez de tout - argent, éducation, spécialistes, équipement ... Mais l'enthousiasme et la confiance en soi étaient incommensurables. Ils ont sculpté des filets à partir de n'importe quoi ou de tout ce pour quoi il y avait assez d'argent. Je me souviens encore du jour où j'ai acheté mon premier switch L2 - le fameux DES-3526 .





Naturellement, à un moment donné, il y a une croissance qualitative, et il devient nécessaire de surveiller tout ce réseau de zoo. Il existe tellement de méthodes et de logiciels de surveillance que même une simple liste et de brèves caractéristiques nécessitera plus d'un article.





Il y a environ 5 ans, j'ai entrepris de réécrire un module NMS auto-écrit dans ABillS . La facturation était écrite en Perl, et à ce moment-là j'étais "agile". La documentation de l'API de facturation me suffisait pour transférer la webcam de PHP vers Perl. Au début, pour l'interrogation périodique de morceaux de fer, j'ai utilisé un analogue de fping en Perl et pris séparément des statistiques SNMP. Ce qui est le plus ennuyeux lorsque vous travaillez avec SNMP, ce sont les terribles retards, et à mesure que le nombre de périphériques interrogés augmente, ils augmentent également. Ils ont du mal avec cela avec différentes méthodes: parallélisation, augmentation des délais d'attente, etc.





En fait, je voudrais partager ici mon implémentation de l'interrogation SNMP pour les équipements réseau. La bibliothèque SNMP est utilisée , qui fait partie du projet Net-SNMP . Pour être honnête, le code fonctionne sur le principe «les débutants ont de la chance» (la version tolérante est «les imbéciles ont de la chance»). J'ai copié le code dans une sorte de feuille de savon (je ne donnerai pas de lien - je ne l'ai pas trouvé), je l'ai fini un peu pour mes besoins, je l'ai lancé et au premier moment je n'en ai même pas cru mes yeux. L' Observium que j'utilisais à ce moment-là a interrogé ma grille, pas si grande (moins de 300 commutateurs), pendant plus d'une minute, et en quatre flux (je note tout de suite qu'un minimum de capteurs a été utilisé lors du sondage, sinon le sondage pourrait prendre 5 minutes). Et mon script a fait la même chose en 8 à 10 secondes.





Eh bien, puis le code lui-même avec des commentaires:





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, . .





Ce qui est écrit clairement n'attire pas un article, mais plutôt une note. Je l'ai écrit parce que je suis désolé pour les développements manquants, qui deviennent maintenant inutiles. Le temps passe, le monde change. Les petits fournisseurs font faillite, sont absorbés par de grands acteurs et passent à des modèles d'agence. En conséquence, une grande partie de l'expérience accumulée devient tout simplement superflue. Je pense que ce n'est pas correct :)








All Articles