客户已请求我们将SNMP陷阱发送到其Nagios服务器而不是电子邮件警报。我昨天才知道关于SNMP的唯一事情就是它听起来像一个缩写词,所以请原谅(并纠正我)对我可能存在的任何误解。
需要在陷阱中发送的唯一信息涉及我们警告客户的事件数据,这只是从我们的数据库中提取的几个值。毋庸置疑,这些不属于任何类型的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)
感谢任何帮助!感谢。
答案 0 :(得分:3)
在纯粹的技术层面上,您可以将任何OID用于任何目的。但是,SNMP被设计为委员会管理的协议。
如果您的陷阱或其varbinds不符合标准消息/类型,则您的OID应以 1.3.6.1.4.1.YOUR_ENTERPRISE_NUMBER 开头。如果您的公司或您的客户没有注册的私人企业号码(PEN),您可以免费request one from IANA。如果有人管理您的PEN,您应该要求他们为您的产品域提供OID。
PEN list充满了个人的电子邮件地址。该系统中存在行业级信任的要素。与控制竞争对手企业编号的人合作并不罕见。如果您承担PEN的责任,那么您将承担与此相关的道德责任。
您不必为企业范围编写或发布MIB,但您可能希望为了客户的利益而创作它们。
SNMP是一种旧协议。首选的替换是NETCONF,或者我被告知。
答案 1 :(得分:2)
通常,SNMP陷阱内容结构良好,便于随机系统之间的数据交换。内容由MIB以非常麻烦的方式定义。但是,如果您正在构建一个特殊的自定义系统,那么就不会阻止您将任何OID值填充到陷阱中。
示例代码(启用调试以提示您发送的内容):
from pysnmp.hlapi import *
from pysnmp import debug
debug.setLogger(debug.Debug('msgproc'))
next(sendNotification(SnmpEngine(),
CommunityData('public'),
UdpTransportTarget(('demo.snmplabs.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))]))