以下为网上找到的,该错误可能的情况,我自己遇到的问题是第二种情况,需要在snmpd.conf中开启权限:
1.MIB文件没有正确添加到MIB树里面,因此agent在收到查询以后真的找不到目标OID.
2.MIB文件添加成功了,但是snmpd.conf里面的关于权限的配置不对。agent在收到client的查询以后也找到了该OID但是因为没有权限因此返回“No Such Instance currently exists at this OID”。关于权限粗看会以为很复杂,尤其是在心浮气燥的时候,其实静下心来仔细看看就会发现也就那么回事。以USM命名的权限管理还是很清晰的。
3.第三种情况比较特殊,对于net-snmp不熟的也可能会范理解上的错误。
使用snmpget而忘记了添加OID结尾的实例标识符,net-snmp则会报出“No Such Instance currently exists at this OID”的错误。
如果怀疑是这中错误可以用snmpgetnext先试一试。
SNMP中的GETNEXT请求的作用类似snmpget,但是更加具有通用性,它是一个具有模糊匹配特性的GET请求。有时使用snmpget会报错但是使用snmpgetnext则不会报错,它会向下查找 并找到距离最近的一个实例,然后返回它的值。(单独使用snmpgetnext操作的机会不太多,它经常被当作遍历表中所有数据的一个基本操作。
4.我是想获取硬盘的使用情况,出现该错误
snmpwalk -v 2c -c public localhost .1.3.6.1.4.1.2021.9.1.7
UCD-MIB:dskAvail.1: No Such Instance currently exists at this OID
所以,我查看了snmpd.conf文件,将其中的 disk checks 配置如下
# disk checks
disk / 10000
load [1MAX=12.0] [5MAX=12.0] [15MAX=12.0]load 12 14 14
enterprises.ucdavis.loadTable.laEntry.loadaveIndex.1 = 1
enterprises.ucdavis.loadTable.laEntry.loadaveIndex.2 = 2
enterprises.ucdavis.loadTable.laEntry.loadaveIndex.3 = 3
enterprises.ucdavis.loadTable.laEntry.loadaveNames.1 = "Load-1"
enterprises.ucdavis.loadTable.laEntry.loadaveNames.2 = "Load-5"
enterprises.ucdavis.loadTable.laEntry.loadaveNames.3 = "Load-15"
enterprises.ucdavis.loadTable.laEntry.loadaveLoad.1 = "0.49" Hex: 30 2E 34 39
enterprises.ucdavis.loadTable.laEntry.loadaveLoad.2 = "0.31" Hex: 30 2E 33 31
enterprises.ucdavis.loadTable.laEntry.loadaveLoad.3 = "0.26" Hex: 30 2E 32 36
enterprises.ucdavis.loadTable.laEntry.loadaveConfig.1 = "12.00"
enterprises.ucdavis.loadTable.laEntry.loadaveConfig.2 = "14.00"
enterprises.ucdavis.loadTable.laEntry.loadaveConfig.3 = "14.00"
enterprises.ucdavis.loadTable.laEntry.loadaveErrorFlag.1 = 0
enterprises.ucdavis.loadTable.laEntry.loadaveErrorFlag.2 = 0
enterprises.ucdavis.loadTable.laEntry.loadaveErrorFlag.3 = 0
enterprises.ucdavis.loadTable.laEntry.loadaveErrMessage.1 = ""
enterprises.ucdavis.loadTable.laEntry.loadaveErrMessage.2 = ""
enterprises.ucdavis.loadTable.laEntry.loadaveErrMessage.3 = ""
至此可以正常获取到硬盘资源了