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

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

在阅读了 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);

无需在处理程序中处理调用。

假设我想监控应用程序的待处理请求队列,因此我需要一个代理,它将为它触发 application_pending_request 的所有 SNMP 请求,并返回队列深度。为什么我需要一个实际的 MIB,而我只需要轮询应用程序队列即可获得结果?

答案1

您对 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,也可以是 MIB 文件中的“友好”名称简单网络管理协议 客户

SNMP“浏览器”通常需要 MIB 文件,因为如果没有该文件,它们所能呈现给您的只是一串毫无意义的数字。

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


以您的示例(报告队列长度)为例,它听起来像您喜欢使用的教程net-snmp(UCD-SNMP)。
net-snmp包括用于此类事情的内置功能 - 通读手册页和示例配置文件(特别注意exec运行外部脚本的指令:通常,您将运行打印队列长度的脚本,并在监控软件/ SNMP 客户端中查询该 OID)

相关内容