【问题标题】:Perl: SNMP - Wildcard OIDPerl:SNMP - 通配符 OID
【发布时间】:2012-04-12 18:22:34
【问题描述】:

我有一个 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

我目前正在使用 Net::SNMP 库:

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

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

如果有人可以提供帮助或至少为我指明正确的方向,将不胜感激。

谢谢。

【问题讨论】:

    标签: perl snmp oid


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2022-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-17
      • 2020-03-20
      相关资源
      最近更新 更多