2

最近我们正在为 NMS 系统制作 MIB 文件,这样做时我发现在 Linux 机器上部署 MIB 以查询它后,我需要在末尾添加 101.1,而对于标准 Linux mib,只需附加 .0。我无法理解为什么我的值在 101.1 而不是 .0 中返回。

例如,当我使用 linux MIB 执行此操作时,我得到了值

snmpget -v 2c -c public localhost 1.3.6.1.2.1.1.3.0
SNMPv2-MIB::sysUpTime.0 = Timeticks: (105543) 0:17:35.43

但是为了让我的 mib 工作,我需要附加 101.1

snmpwalk -v 2c localhost -c public .1.3.6.1.4.1.****.1.2.3.101.1 
SNMPv2-SMI::enterprises.****.1.2.3.101.1 = STRING: "388 MB"

当我带着我的 MIB 散步时,我得到以下信息。

snmpwalk -v 2c localhost -c public .1.3.6.1.4.1.****.1.2.3

SNMPv2-SMI::enterprises.****.1.2.3.1.1 = INTEGER: 1
SNMPv2-SMI::enterprises.****.1.2.3.2.1 = STRING: "getSystemMemoryUsage.sh"
SNMPv2-SMI::enterprises.****.1.2.3.3.1 = STRING:
"/opt/nagios/plugins/fetch_scripts/System/getSystemMemoryUsage.sh"
SNMPv2-SMI::enterprises.****.1.2.3.100.1 = INTEGER: 0
SNMPv2-SMI::enterprises.****.1.2.3.101.1 = STRING: "388 MB"
SNMPv2-SMI::enterprises.****.1.2.3.102.1 = INTEGER: 0
SNMPv2-SMI::enterprises.****.1.2.3.103.1 = ""

任何人都可以建议为什么在我们的 MIB 中出现这种行为以及需要做什么,以便我的 MIB 表现得像 Linux Mib,我只需在最后添加 .0 并获得价值。对象类型是所有的标量。

提前谢谢大家

4

1 回答 1

4

MIB 命名法支持以表格行和非表格标量表示的数据。使用 OID.0 索引访问以标量形式呈现的数据。“.0”部分表示访问标量对象——系统中的单个对象实例。这些表包含列(每列代表某种数据)和行(每行代表一个表实例 - 某种支持该表的实体)。

在您的示例中,您尝试访问 Enterprise MIB 中的某个表。此表包含一个索引(可能有单个或多个索引 MIB 表)。要确定该表中的第一个可用索引,您可以通过以下方式使用 snmpgetnext 命令开始:

snmpgetnext -v2c -c public localhost .1.3.6.1.4.1.****.1.2.3

或者

snmpgetnext -v2c -c public localhost .1.3.6.1.4.1.****.1.2.3.0

或者

snmpgetnext -v2c -c public localhost .1.3.6.1.4.1.****.1.2.3.0.0

如您所见,上述所有命令通过更新最后两个 OID 部分 (.0.0) 为您提供了第一个现有行实例。这两个 OID 不必明确指定,因此您可以只使用一个空索引 (.0),甚至根本不必指定它们。

要了解这些表的索引是如何描述的,您需要参考您的 Enterprise MIB - 查找此 OID 描述的表:.1.3.6.1.4.1。* *.1.2.3 并了解索引方案以及这些索引代表什么。编写良好的 MIB 应包含此信息。

解释可能如下:

  • *.1.1 = 1 - id=1 的数据列,用于实体索引 1
  • *.2.1 = "getSystemMemoryUsage.sh" - id=2 的数据列,用于表示脚本名称的实体索引 1(STRING 语法)
  • *.3.1 = "/opt/nagios/plugins/fetch_scripts/System/getSystemMemoryUsage.sh" - id=3 的数据列,用于表示完整脚本路径的实体索引 1(STRING 语法)
  • *.100.1 = 0 - id=100 的数据列,用于实体索引 1,表示某个 INTEGER 值,依此类推...

如果 MIB 设计人员希望将来在 .3 和 .100 之间添加一些列,则列索引(.1、.2、.3、.100、.101 ...)可能会包含间隙。或者只是实体索引 1 不支持这些列(如果它们在 MIB 中定义)。允许跳过空列。

如果您想了解标量对象和柱状对象之间的差异,请参阅RFC1212

于 2012-11-18T09:43:32.627 回答