客户要求我们将 SNMP 陷阱发送到他们的 Nagios 服务器,而不是电子邮件警报。昨天之前我对 SNMP 唯一了解的是它听起来像一个缩写词,所以请原谅(并纠正我)我对它可能有的任何误解。
需要在陷阱中发送的唯一信息与我们向客户发出警报的事件的数据有关,这只是从我们的数据库中提取的几个值。不用说,这些不在任何类型的 MIB 中,也没有任何 OID,这就是我无法找到答案的地方。
我不知道如何在不使用 MIB OID 的情况下将我们的特定数据添加到陷阱中,而我没有 MIB OID。
我正在使用 PySNMP 生成请求,但现在只有不完整的代码,因为我不确定如何将我们的数据合并到数据包中。
from pysnmp.hlapi import *
def sendSNMP(destination, community_string, data):
community = CommunityData(community_string, mpModel = 0)
target = UdpTransportTarget((destination, 162))
notification_type = None
req = sendNotification(SnmpEngine(), community, target, ContextData(), 'trap', notification_type)
errorIndication, errorStatus, errorIndex, varBinds = next(req)
如有任何帮助,我们将不胜感激!谢谢。
在纯粹的技术层面上,您可以将任何 OID 用于任何目的。然而,SNMP 被设计为一个委员会管理的协议。
如果您的陷阱或其 varbind 不符合标准消息/类型,您的 OID 应以 1.3.6.1.4.1.YOUR_ENTERPRISE_NUMBER 开头。如果您的公司或客户没有注册的私人企业编号 (PEN),您可以向 IANA 申请一个免费的编号。如果有人管理您的 PEN,您应该向他们询问您的产品域的 OID。
PEN 列表 充满了个人的电子邮件地址。这个系统中有一个行业级信任的元素。与控制竞争对手企业号码的人合作并不罕见。如果您承担笔会的责任,那么您就承担了随之而来的道德责任。
您不必为企业范围编写或发布 MIB,尽管您可能希望为了客户的利益而编写它们。
SNMP 是一个旧协议。首选替代品是 NETCONF,至少我是这么被告知的。
示例代码(启用调试以提示您正在发送的内容):
from pysnmp.hlapi import *
from pysnmp import debug
debug.setLogger(debug.Debug('msgproc'))
next(sendNotification(SnmpEngine(),
CommunityData('public'),
UdpTransportTarget(('demo.pysnmp.com', 162)),
ContextData(),
'trap',
# sequence of custom OID-value pairs
[ObjectType(ObjectIdentity('1.3.6.1.2.1.1.1.0'), OctetString('my string')),
ObjectType(ObjectIdentity('1.3.6.1.2.1.1.3.0'), Integer32(42))]))