首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl: SNMP -通配符OID

Perl: SNMP -通配符OID
EN

Stack Overflow用户
提问于 2012-04-13 02:22:34
回答 1查看 1.7K关注 0票数 0

我有一个Perl脚本,可以监视任何支持SNMP的服务。

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

示例:

代码语言:javascript
复制
[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路径中使用通配符进行收集的逻辑。因此,我的配置文件现在需要如下所示:

代码语言:javascript
复制
[switch]
switch_stuff1 = 1.5.1.6.*
switch_stuff2 = 1.45.*.12

因此,当收集发生时,它会以某种方式循环如下:

代码语言:javascript
复制
      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库:

http://metacpan.org/pod/Net::SNMP

这有可能做到吗?我在考虑以某种方式通过get_entries或get_table方法模拟"snmpwalk“,但我不太确定这是否可行。

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

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-13 02:42:21

对于像switch_stuff1 = 1.5.1.6.*这样的条目,只要获得数据,就可以简单地发送第一个请求,然后通过get_next_request发送请求。

然而,对于像switch_stuff2 = 1.45.*.12这样的配置,事情就不再那么简单了。您不能使用get_next_request,您必须自己迭代可能的值。问题是,数字“通常”是连续的,但并不总是连续的,在后一种情况下,尝试所有可能的数字会给系统带来相当大的压力。至少,如果您确实需要这样做,那么我建议以某种方式缓存现有的OID,而不是每次收集数据时都扫描它们。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10129476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档