Perl:SNMP-通配符OID

Perl:SNMP-通配符OID,perl,snmp,oid,Perl,Snmp,Oid,我有一个Perl脚本,可以监视任何启用SNMP的服务 它的工作方式是我有一个包含多个服务的配置文件,每个服务都有一个要收集的度量列表 例如: [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

我有一个Perl脚本,可以监视任何启用SNMP的服务

它的工作方式是我有一个包含多个服务的配置文件,每个服务都有一个要收集的度量列表

例如:

[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
因此,当收集发生时,它将以某种方式循环如下:

[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
我当前正在使用Net::SNMP库:

这可能吗?我想通过get_条目或get_表方法模拟“snmpwalk”,但我不太确定这是否可行

如果有人能帮助我,或者至少能为我指出正确的方向,我将不胜感激


谢谢。

对于像
开关1=1.5.1.6.*
这样的条目,您只需发送第一个请求,然后通过
获取下一个请求
循环,只要获得数据即可

但是,使用类似配置的
开关2=1.45.*.12
就不再那么简单了。您不能使用
get\u next\u request
,您必须自己迭代可能的值。问题在于,数字“通常”是连续的,但并不总是连续的,在后一种情况下,系统只需尝试所有可能的数字就相当有压力。至少如果您真的需要这样做,那么我建议以某种方式缓存存在的OID,而不是每次收集数据时都扫描它们