Pertenço à geração de "networkers selvagens" que, no início do século, começaram a construir redes de vários tamanhos no espaço pós-soviético. De tudo não bastava - dinheiro, educação, especialistas, equipamentos ... Mas o entusiasmo e a autoconfiança eram incomensuráveis. Eles esculpiram redes de praticamente qualquer coisa, ou de qualquer coisa que houvesse dinheiro suficiente para isso. Ainda me lembro do dia em que comprei meu primeiro switch L2 - o famoso DES-3526 .
Naturalmente, em algum momento há um crescimento qualitativo, e torna-se necessário monitorar todo o zoológico da rede. Existem tantos métodos e softwares de monitoramento que mesmo listando-os e as breves características exigirão mais de um artigo.
Cerca de 5 anos atrás, comprometi-me a reescrever um módulo NMS escrito por mim mesmo no ABillS . O faturamento era escrito em Perl e, naquela época, eu era "ágil" nele. A documentação da API de faturamento foi suficiente para eu transferir a webcam do PHP para o Perl. No início, para pesquisas periódicas de peças de ferro, usei um análogo de fping em Perl e obtive estatísticas SNMP separadamente. O que é mais irritante ao trabalhar com SNMP são os terríveis atrasos e, à medida que o número de dispositivos pesquisados aumenta, eles também aumentam. Eles estão lutando contra isso com métodos diferentes: paralelização, aumento do tempo limite e assim por diante.
Na verdade, gostaria de compartilhar aqui minha implementação de sondagem SNMP para equipamentos de rede. É utilizada a biblioteca SNMP , que faz parte do projeto Net-SNMP . Para ser honesto, o código funciona com o princípio "novatos têm sorte" (a versão tolerante é "tolos têm sorte"). Copiei o código em uma espécie de folha de sabão (não vou dar link - não achei), terminei um pouco para minhas necessidades, lancei e no primeiro momento nem acreditei nos meus olhos. O Observium que eu estava usando na época pesquisou minha grade não tão grande (menos de 300 interruptores) por mais de um minuto e em quatro fluxos (noto imediatamente que um mínimo de sensores foram usados durante a pesquisa, caso contrário, a pesquisa pode demorar 5 minutos). E meu script fez a mesma coisa em 8 a 10 segundos.
Bem, e então o próprio código com comentários:
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, . .
O que está escrito claramente não atrai um artigo, mas sim uma nota. Eu o escrevi porque sinto muito pelos desenvolvimentos ausentes, que agora estão se tornando desnecessários. O tempo passa, o mundo está mudando. Pequenos fornecedores vão à falência, são absorvidos por grandes empresas e mudam para modelos de agência. Como resultado, muita experiência acumulada simplesmente se torna supérflua. Acho que isso não é correto :)