2012-11-14 88 views
2

最近我们为NMS系统制作了MIB文件,这样做后我在Linux机器上部署MIB来查询它后,发现我需要在最后添加101.1,在那里只有标准Linux mib .0需要附加。我无法理解这一点,为什么我的价值在101.1而不是.0。关于SNMP的查询获得

例如,当我这样做与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

当我做我的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的,我只是在末尾添加1.0和获得的价值。 对象类型是所有人的标量。

感谢大家提前

回答

4

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

在您的示例中,您尝试访问企业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),甚至不必指定它们。

要了解如何描述这些表的索引,您需要引用您的企业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” - 表示完整脚本路径的实体索引1的id为3的数据列STRING语法)
  • * .100。1 = 0 - 使用id = 100个数据栏用于表示某个整数值 等实体索引1 ...

列索引(0.1,0.2,0.3,0.100,0.101 .. )如果MIB设计者希望将来在.3和.100之间添加一些列,可能会包含差距。或者只是实体索引1不支持这些列(如果它们是在MIB中定义的)。允许跳过空列。

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