为什么 SNMP 代理需要 MIB 文件?

Avi*_*ano 5 snmp net-snmp

在阅读了 SNMP 和这里的一些问题之后,我认为将代理角色理解为设备的 SNMP 服务(像 SQL 一样,它是存储的 API)。

当您执行 SQL 查询时,SQL 引擎会完成所有工作并返回结果 - 您无需了解存储方式和存储位置。

但是 MIB 不是实际存储,那么我的代理的作用是什么?
如果代理只像我在本教程中一样注册 MIB ,那么它根本不用作处理程序,这意味着有一个 pyhiscal 存储,您可以设置并到达那里而无需绕过处理程序。在本教程中,您可以这样做:

netsnmp_register_int_instance("my example int variable",
                                  my_registration_oid,
                                  OID_LENGTH(my_registration_oid),
                                  &example1, NULL);
Run Code Online (Sandbox Code Playgroud)

不需要处理程序来处理调用。

假设我想监控我的应用程序的待处理请求队列,所以我想要一个代理,所有对 application_pending_request 的 SNMP 请求都将被触发,它会返回队列深度。当我需要轮询我的应用程序队列以获得结果时,为什么我需要一个实际的 MIB?

vor*_*aq7 7

您对 SNMP 的工作原理存在根本性的误解。快速而肮脏的比较:SNMP MIB 就像主机名。MIB 将 OID 映射到友好名称——例如
.1.3.6.1.2.1.1.1.0=> SNMPv2-MIB::sysDescr.0=> Host Description(uname 输出)。

为了从 SNMP 服务器(代理)检索信息,该信息必须在特定的 OID 上发布。
为了让 SNMP 守护进程发布信息,它(通常)需要两件事:

  1. 一种获取该信息(脚本、程序等)的方法
  2. 放置该信息的位置(OID)
    (某些 SNMP 守护程序可能还需要映射 OID 的 MIB 文件)

为了检索信息,您必须知道 OID - 这可以是数字 OID 或SNMP 客户端上 MIB 文件中的“友好”名称。

SNMP“浏览器”通常需要一个 MIB 文件,因为没有一个它们可以呈现给您的是毫无意义的数字列表。

所以回答你的问题是“你不NEED MIB文件,他们是谁需要与SNMP交互人类只是有帮助”。


以您的示例(报告队列长度)为例,听起来您喜欢使用的教程net-snmp(UCD-SNMP)。
net-snmp包括用于这类事情的内置工具——通读手册页和示例配置文件(特别注意exec运行外部脚本的指令:通常你会运行一个打印队列长度的脚本,并在您的监控软件/SNMP 客户端)

  • @user1495181 使用 `snmpset` 的能力是由默认整数处理程序提供的(这是你注册一个 `int` 类型的 OID 和一个 `NULL` 处理程序函数时得到的)。代理将值存储在内存中,并在询问该 OID 时返回它(直到代理重新启动或设置新值)。您*可以*理论上通过定期使用脚本`snmpset` OID来实现您想要的监控,但这是次优的。外部脚本调用(或适当的处理函数)是*正确*的方式来做到这一点...... (2认同)