系统管理员工具包: 使用 SNMP 数据
2008-11-13 08:29:29 来源:WEB开发网若要获得某个特定的信息部分,您可以使用 snmpget 命令,该命令直接读取一个或多个 OID,并报告它们的值。对于特殊类型,该命令还将其转换为可读的格式。例如,要获取系统描述和正常运行时间,可以使用以下命令(在清单 4 中)。
清单 4. 获取系统描述和正常运行时间
$ snmpget -v1 -c public t1000 system.sysUpTime.0 system.sysContact.0
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (867411) 2:24:34.11
SNMPv2-MIB::sysContact.0 = STRING: "System administrator"
孤立地看,所有这些方法都是非常有用的,但实际上,您需要监视和跟踪多台计算机和多个 OID,以了解全面的情况。这可以通过使用多个可编程的 SNMP 接口之一来实现。
以编程的方式获取 SNMP 数据
用于 Perl 的 Net::SNMP 模块使用 SNMP 从一个或多个代理获得信息。类似地,其他语言可以使用其他接口,包括 Python、Ruby 和 PHP(请参见参考资料)。接口的工作方式是创建一个与所需主机上的 SNMP 代理通信(并在必要时进行身份验证)的会话。一旦拥有了活动和有效的会话,您就可以直接从代理请求一个或多个 OID 的数据。信息以绑定 OID 与对应值的信息散列的形式返回。
清单 5 显示了一个非常简单的脚本,此脚本将获得命令行上提供的每个主机的系统正常运行时间。
清单 5. 使用 Perl 和 Net::SNMP 获得单个 SNMP 代理属性
#! /usr/local/bin/perl
use strict;
use Net::SNMP;
my $uptimeOID = '1.3.6.1.2.1.1.3.0';
foreach my $host (@ARGV)
{
my ($session, $error) = Net::SNMP->session(
-hostname => $host,
-community => 'public',
-port => 161
);
warn ("ERROR for $host: $errorn") unless (defined($session));
my $result = $session->get_request(
-varbindlist => [$uptimeOID]
);
if (!defined($result))
{
warn ("ERROR: " . $session->error . "n");
}
else
{
printf("Uptime for %s: %sn",$host, $result->{$uptimeOID});
}
$session->close;
}
更多精彩
赞助商链接