WEB开发网
开发学院操作系统Linux/Unix 系统管理员工具包: 使用 SNMP 数据 阅读

系统管理员工具包: 使用 SNMP 数据

 2008-11-13 08:29:29 来源:WEB开发网   
核心提示: 在该脚本中,我们提供了系统的完整数字 OID、sysUpTime 属性,系统管理员工具包: 使用 SNMP 数据(6),在使用 get_request() 方法作为对数组的引用时,您必须提供要获得的 OID 的列表,在该脚本中,我们输出了累计总数,然后从返回的散列中提取信息,在清单 5 中

在该脚本中,我们提供了系统的完整数字 OID、sysUpTime 属性。在使用 get_request() 方法作为对数组的引用时,您必须提供要获得的 OID 的列表,然后从返回的散列中提取信息。在清单 5 中,我们在调用期间动态地构建了数组引用,然后在打印结果时使用 OID 作为散列键。

使用该脚本,我们可以获取命令行上提供的每个主机的正常运行时间列表(请参见清单 6)。

清单 6. 每个主机的正常运行时间列表

$ perl uptime.pl tweedledum t1000
Uptime for tweedledum: 4 minutes, 52.52
Uptime for t1000: 6 minutes, 26.12

当然,人工观察此信息是非常低效的。

跟踪一段时间内的 SNMP 数据

一次查看某个 SNMP OID 属性的单个实例并不非常具有实际意义。通常,您希望监视某些属性(例如可用性)在一段时间内的情况,或者希望监视特定值的变化情况。一个很好的示例就是磁盘空间。可以配置 SNMP 以记录所有类型的信息,其中磁盘空间是您希望监视的常见系统,以便不仅能够确定磁盘空间何时达到某个特定的级别,而且还可以确定何时磁盘空间存在重大变化(这可能指示某个问题)。

例如,清单 7 显示了一个基于回调的解决方案,以连续监视磁盘空间。在该脚本中,我们输出了累计总数,但是可以配置该脚本仅输出存在磁盘空间减少时触发的警告消息。

清单 7. 获取 SNMP 属性的累计视图

#! /usr/local/bin/perl
use strict;
use warnings;
use Net::SNMP qw(snmp_dispatcher);
my $diskspaceOID = '1.3.6.1.4.1.2021.9.1.7.1';
foreach my $host (@ARGV)
{
  my ($session, $error) = Net::SNMP->session(
    -hostname  => $host,
    -nonblocking => 0x1,
    );
  if (!defined($session))
  {
    warn "ERROR: $host produced $error - not monitoringn"
  }
  else
  {
    my ($last_poll) = (0);
    $session->get_request(
      -varbindlist => [$diskspaceOID],
      -callback  => [
         &diskspace_cb, $last_poll
      ]
      );
  }
}
snmp_dispatcher();
exit 0;
sub diskspace_cb
{
  my ($session, $last_poll) = @_;
  if (!defined($session->var_bind_list))
  {
    printf("%-15s ERROR: %sn", $session->hostname, $session->error);
  }
  else
  {
    my $space = $session->var_bind_list->{$diskspaceOID};
    if ($space < ${$last_poll})
    {
      my $diff = ((${$last_poll}-$space)/${$last_poll})*100;
      printf("WARNING: %s has lost %0.2f%% diskspace)n",
          $session->hostname,$diff);
    }
    printf("%-15s Ok (%s)n",
        $session->hostname,
        $space
        );
    ${$last_poll} = $space;
  }
  $session->get_request(
    -delay    => 60,
    -varbindlist => [$diskspaceOID]
    );
}

上一页  1 2 3 4 5 6 7 8  下一页

Tags:系统 管理员 工具包

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接