【问题标题】:Monitor several instances of the same equipment with one SNMP agent使用一个 SNMP 代理监控同一设备的多个实例
【发布时间】:2015-01-11 18:47:31
【问题描述】:

我的设备未启用 SNMP。我有 API 来获取它的状态,并正在为它实现一个 SNMP 代理。我使用 SNMP4j 做到了这一点,并且可以回答 GET 请求并发送陷阱。

我遇到的问题是,有几 (2) 个这样的设备要使用我的程序的 same 实例进行监控。到目前为止,我为 MIB 中的每个设备添加了一个分支,例如 1.3.6.1.4.1.PEN.devices.1.xxx1.3.6.1.4.1.PEN.devices.2.xxx,但是 1-这很难看,2-我不能为每个设备提供一个可用的 MIB,而是为整个系统提供一个带有冗余的 MIB信息,这也很丑;)

我不确定 MIB Table 对象是否适合这种情况,但这听起来不像是要走的路(我有固定数量的设备)。我还看到RFC 3413 §3.5 描述了 SNMP 代理转发器,但我不确定这是我需要实现的(我的设备不支持 SNMP),而 SNMP4j ProxyForwarder 似乎将一个 MIB 映射到另一个 MIB。

使用 SNMP4j,我实现了 CommandResponder 接口的 processPDU() 方法,我希望,如果将 Supervision 软件配置为使用我的程序作为“代理转发器”,那么在CommandResponderEvent 让我发送正确的响应 PDU(虽然我没有找到任何这样的东西,但我可能错过了一些东西)。

我可以启动我的代理的多个实例(每台设备一个),但出于资源稀少的原因,我宁愿不这样做。 解决这个问题的最佳方法是什么?桌子?代理?其他?不可能?

编辑:

我发现一些 NNM 在 GET 请求中添加了一个额外的变量绑定来指示要寻址的设备(类似 SNMP 代理),而另一些则通过更改 GET 中的社区来映射设备。这些是可行的选择吗?哪一个是最常见/可接受的?

【问题讨论】:

  • 您能否详细说明您对使用两行表格的担忧?
  • @k1eran 真的没有,但我有点不愿意使用表,因为我对 SNMP 还很陌生,还没有完全了解那部分。我正在尝试通读 RFC,但有很多。是否可以将 OID 树保留在表格元素中?
  • tools.ietf.org/html/rfc4133 可能很有趣;我会从那里开始,因为它有一个 entPhysicalTable。或者,您可以做一个供应商特定的。 opennms.org/wiki/Hardware_Inventory_Entity_MIB 展示了一个特定的 NMS 如何与这两种方法集成。我真的不明白你的评论。 '表格元素中的 OID-tree',因为我相信它们是密不可分的。
  • @k1eran 谢谢,我会通读的。我的意思是每一行都代表一个设备,但每个设备下都有一整棵标量树。如果表 OID 是toid 并且toid.2 是第二个设备,我可以查询toid.2.1.0(第1 列)和toid.2.3.8.0(第3 列,节点8)还是仅限于toid.2.<n>.0(列不能有子元素)?
  • 评论太长,所以添加了一个“答案”,显示访问各种方式。

标签: java proxy monitoring snmp snmp4j


【解决方案1】:

这里使用一个简单的表格来展示表格和行的一般概念...

这是检索示例表的方法(带有一个索引和另外 2 个列)。也许你的每一个设备都是你自己表中的一行(在你自己的列中有一堆数据)

snmptable  -M +.  -m +ALL -v 2c -c public  -Ci  myhost   SNMPv2-MIB::sysORTable
SNMP table: SNMPv2-MIB::sysORTable

 index                                        sysORID                                              sysORDescr  sysORUpTime
     1          SNMP-MPD-MIB::snmpMPDMIBObjects.3.1.1         The MIB for Message Processing and Dispatching. 0:0:00:00.33
     2       SNMP-USER-BASED-SM-MIB::usmMIBCompliance         The MIB for Message Processing and Dispatching. 0:0:00:00.33

走那张桌子:

snmpwalk   -M +.  -m +ALL -v 2c -c public  myhost  SNMPv2-MIB::sysORTable
SNMPv2-MIB::sysORID.1 = OID: SNMP-MPD-MIB::snmpMPDMIBObjects.3.1.1
SNMPv2-MIB::sysORID.2 = OID: SNMP-USER-BASED-SM-MIB::usmMIBCompliance
SNMPv2-MIB::sysORDescr.1 = STRING: The MIB for Message Processing and Dispatching.
SNMPv2-MIB::sysORDescr.2 = STRING: The MIB for Message Processing and Dispatching.
SNMPv2-MIB::sysORUpTime.1 = Timeticks: (33) 0:00:00.33
SNMPv2-MIB::sysORUpTime.2 = Timeticks: (33) 0:00:00.33 

步行前往以上部分:

snmpwalk   -M +.  -m +ALL -v 2c -c public  myhost  SNMPv2-MIB::sysORDescr.2
SNMPv2-MIB::sysORDescr.2 = STRING: The MIB module for SNMPv2 entities

通过 GET 访问上面的一部分:

snmpget   -M +.  -m +ALL -v 2c -c public  myhost  SNMPv2-MIB::sysORDescr.2
SNMPv2-MIB::sysORDescr.2 = STRING: The MIB module for SNMPv2 entities

编辑: 要了解此 OID 如何适合树,请查看 ...

snmptranslate -M+. -m +ALL    1.3.6.1.2.1.1
SNMPv2-MIB::system
snmptranslate -M+. -m +ALL    1.3.6.1.2.1.1.9
SNMPv2-MIB::sysORTable
snmptranslate -M+. -m +ALL    1.3.6.1.2.1.1.9.1
SNMPv2-MIB::sysOREntry
snmptranslate -M+. -m +ALL    1.3.6.1.2.1.1.9.1.3
SNMPv2-MIB::sysORDescr
snmptranslate -M+. -m +ALL    1.3.6.1.2.1.1.9.1.3.2
SNMPv2-MIB::sysORDescr.2

【讨论】:

  • 谢谢,感觉清楚一点了。现在我只需要知道获取类似snmpget ... myhost SNMPv2-MIB::sysORDescr.2.1 的东西是否合法?也就是说,当前定义为Octet StringSNMPv2-MIB::sysORDescr能否定义为OBJECT IDENTIFIER
  • OID 只是树的特定部分的 id,更类似于 C++ 指针而不是 C++ 对象。 SNMPv2-MIB::sysORDescr.2 更像是一种“原始类型”。我更新了答案,提供了有关 SNMPv2-MIB::sysORDescr.2 是什么的更多信息。
  • 好的,我到了:) 所以我知道sysORDescr.2 是原始类型(标量),因此不能成为树的一部分。我本来希望在它下面包含一个完整的 MIB(即sysOrDescr.2.4.12.3),但我想这是不可能的,所以表格不是我想要的。谢谢你对我的包容! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多