【发布时间】:2015-01-11 18:47:31
【问题描述】:
我的设备未启用 SNMP。我有 API 来获取它的状态,并正在为它实现一个 SNMP 代理。我使用 SNMP4j 做到了这一点,并且可以回答 GET 请求并发送陷阱。
我遇到的问题是,有几 (2) 个这样的设备要使用我的程序的 same 实例进行监控。到目前为止,我为 MIB 中的每个设备添加了一个分支,例如 1.3.6.1.4.1.PEN.devices.1.xxx 和 1.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