路徑:/usr/lib/nagios/plugins/check_snmp_win_cpuload.pl
#!/usr/bin/perl
# 語法: check_win_snmp_cpuload.pl HOST COMMUNITY WARN CRIT
# 返回所有 CPU 平均負載百分比
use strict;
use Net::SNMP;
my $host = shift;
my $community = shift;
my $warn = shift;
my $crit = shift;
unless($crit) {
errorExit("syntax: check_win_snmp_cpu.pl HOST COMMUNITY WARN CRIT");
}
our %ERRORS = (
OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3, DEPENDENT => 4
);
my $oidCpuTable = '.1.3.6.1.2.1.25.3.3.1.2'; # HOST-RESOURCES-MIB::hrProcessorLoad
# 建立 SNMP 會話
my ($snmp, $err) = Net::SNMP->session(
-hostname => $host,
-community => $community,
-port => 161,
-version => 1
);
errorExit($err) unless defined($snmp);
# 取得 CPU 負載表
my $response = $snmp->get_table(-baseoid => $oidCpuTable);
errorExit("error getting cpu table") unless $response;
my %value = %{$response};
$snmp->close();
# 計算平均負載
my $cnt = 0; my $sum = 0;
foreach my $load (values %value) {
$cnt += 1; $sum += $load;
}
my $pct = int($sum / $cnt);
# 判斷狀態
my $err = ($pct > $crit) ? 'CRITICAL' : ($pct > $warn) ? 'WARNING' : 'OK';
print "$err : CPU Load $pct%\n";
exit $ERRORS{$err};
sub errorExit {
my $msg = shift;
print "UNKNOWN: $msg\n";
exit $ERRORS{UNKNOWN};
}
賦予執行權限:chmod +x /usr/lib/nagios/plugins/check_snmp_win_cpuload.pl
檔案:mysnmp.cfg
define command {
command_name snmp_win_cpu
command_line /usr/lib/nagios/plugins/check_snmp_win_cpuload.pl '$HOSTADDRESS$' public 80 90
}
參數說明:`public` 為 Community String,`80` 警告閾值,`90` 嚴重閾值(依環境調整)。
檔案:service.cfg
define service {
host_name jw-inside
service_description CPU
check_command snmp_win_cpu
use generic-service
}
檔案:host.cfg
define host {
host_name jw-inside
alias jw-inside
address 10.10.10.11
use generic-host
icon_image vendors/windowsxp.png
icon_image_alt jw-inside-server
vrml_image vendors/windowsxp.png
statusmap_image vendors/windowsxp.png
}