2016-01-07 35 views
4

客户端已请求我们将SNMP陷阱发送到其Nagios服务器,而不是发送电子邮件警报。我在昨天之前唯一知道的关于SNMP的事情是,它听起来像是一个缩写,所以请原谅(并纠正我)对我可能有的任何误解。发送包含自定义数据的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) 

任何帮助表示赞赏!谢谢。

回答

2

在一个纯粹的技术层面上,你可以使用任何OID用于任何目的。但是,SNMP被设计为委员会管理的协议。

如果你的陷阱或自己用变量不符合标准的消息/类型您的OID应该1.3.6.1.4.1.YOUR_ENTERPRISE_NUMBER开始。如果您的公司或您的客户没有注册私人企业号码(PEN),您可以免费获得request one from IANA。如果有人正在管理您的笔,您应该要求他们为您的产品域提供OID。

PEN list满是个人的电子邮件地址。这个系统有一个行业级的信任元素。与控制竞争对手企业编号的人合作并不罕见。如果你承担笔的责任,那么你承担了与之相关的道德责任。

您不必为企业范围编写或发布MIB,尽管您可能想为他们的客户创造利益。

SNMP是一个旧的协议。首选的替代品是NETCONF,或者我被告知。

1

一般而言,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))]))