系统管理员工具包: 使用 SNMP 数据
2008-11-13 08:29:29 来源:WEB开发网该脚本分为两个部分,并使用了 Net::SNMP 模块(此模块允许您在从主机获得 SNMP 值时调用一个函数)中的一些功能,同时结合了在简单但高效的循环中连续地监视主机和 SNMP 对象的方法。
第一部分设置每个主机以监视信息。我们仅监视其中的一个信息部分,但是可以作为该解决方案的一部分来监视其他信息部分。该对象被配置为“非阻塞的”,以便脚本将不会在无法访问主机时等待,而是简单地继续到下一个主机。最后,在对 get_request() 的调用中,我们提交了回调信息。这里的第一个参数是要在从代理接收到响应时调用的函数的名称。第二个参数是将在调用该函数时应用于该函数的参数。
我们使用此参数是为了能够记录和跟踪由 SNMP 调用返回的前一个值。在回调函数中,我们将新返回的值与以前一个值进行了比较。如果存在减少,则计算减少百分比,然后报告一个警告。
该回调的最后一部分是指定应该进行另一次检索,并在这里指定下一次检索应该延迟 60 秒。现有的回调信息将保留。实际上,该脚本从 SNMP 代理获得值,调用回调函数,然后回调函数把将来的另一次检索排入队列。由于已经定义了同一个回调,该过程将在一个无限循环中重复。
顺便提一下,该脚本使用 dskAvail OID 值,并基于上一个值和新的值来计算差异百分比。此属性所在的 dskTable 树实际上有一个磁盘百分比属性,我们原本应该查询此属性而不是手动对其进行计算。然而,返回的值也许没有足够细的粒度,从而不适用。
通过使用 snmpwalk 来输出 dskTable 树(此树本身是 UCD MIB 的一部分),您可以看到此属性和当前值(请参见清单 8)。
清单 8. 获取可用 MIB 数据的转储
$ snmpwalk -v 1 localhost -c public UCD-SNMP-MIB::dskTable
UCD-SNMP-MIB::dskIndex.1 = INTEGER: 1
UCD-SNMP-MIB::dskPath.1 = STRING: /
UCD-SNMP-MIB::dskDevice.1 = STRING: /dev/sda3
UCD-SNMP-MIB::dskMinimum.1 = INTEGER: 100000
UCD-SNMP-MIB::dskMinPercent.1 = INTEGER: -1
UCD-SNMP-MIB::dskTotal.1 = INTEGER: 72793272
UCD-SNMP-MIB::dskAvail.1 = INTEGER: 62024000
UCD-SNMP-MIB::dskUsed.1 = INTEGER: 7071512
UCD-SNMP-MIB::dskPercent.1 = INTEGER: 10
UCD-SNMP-MIB::dskPercentNode.1 = INTEGER: 3
UCD-SNMP-MIB::dskErrorFlag.1 = INTEGER: noError(0)
UCD-SNMP-MIB::dskErrorMsg.1 = STRING:
更多精彩
赞助商链接