发送包含自定义数据的 SNMP 陷阱

Mat*_*att 5 python snmp mib pysnmp

客户要求我们将 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)
Run Code Online (Sandbox Code Playgroud)

任何帮助表示感谢!谢谢。

McD*_*ell 5

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

如果您的陷阱或其 varbind 不符合标准消息/类型,您的 OID 应以1.3.6.1.4.1.YOUR_ENTERPRISE_NUMBER开头。如果您的公司或客户没有注册的私人企业编号 (PEN),您可以向 IANA免费申请一个。如果有人管理您的 PEN,您应该向他们询问您的产品域的 OID。

PEN 列表充满了个人的电子邮件地址。这个系统中有一个行业级信任的元素。与控制竞争对手企业号码的人合作并不罕见。如果您承担笔会的责任,那么您也就承担了随之而来的道德责任。

您不必为企业范围编写或发布 MIB,尽管您可能希望为了客户的利益而编写它们。

SNMP 是一个古老的协议。首选替代品是NETCONF,至少我是这么告诉的。