diff options
Diffstat (limited to 'contrib/check_hprsc.pl')
-rwxr-xr-x | contrib/check_hprsc.pl | 221 |
1 files changed, 0 insertions, 221 deletions
diff --git a/contrib/check_hprsc.pl b/contrib/check_hprsc.pl deleted file mode 100755 index 7a856502..00000000 --- a/contrib/check_hprsc.pl +++ /dev/null | |||
@@ -1,221 +0,0 @@ | |||
1 | #!/usr/bin/perl -wT | ||
2 | # | ||
3 | # Copyright (c) 2000 Hugo Gayosso | ||
4 | # | ||
5 | # Description: | ||
6 | # Nagios plug-in that monitors the resources on an HP-UX machine | ||
7 | # by querying the SNMP daemon | ||
8 | # | ||
9 | # License: General Public License (GPL) | ||
10 | # http://www.gnu.org/copyleft/gpl.txt | ||
11 | # | ||
12 | # ChangeLog | ||
13 | # | ||
14 | |||
15 | # Requirements: Perl 5.005 or higher | ||
16 | |||
17 | # Variable initialization | ||
18 | $ENV{'PATH'}=""; | ||
19 | $ENV{'ENV'}=""; | ||
20 | $ENV{'BASH_ENV'}=""; | ||
21 | |||
22 | |||
23 | if (-e "/usr/bin/snmpwalk") { | ||
24 | $snmpwalk = "/usr/bin/snmpwalk"; | ||
25 | } elsif (-e "/usr/local/bin/snmpwalk") { | ||
26 | $snmpwalk = "/usr/local/bin/snmpwalk"; | ||
27 | } | ||
28 | |||
29 | |||
30 | # HP-UX SNMP OIDs | ||
31 | $filesystemID1_OID = ".1.3.6.1.4.1.11.2.3.1.2.2.1.1"; | ||
32 | $mounted_OID = ".1.3.6.1.4.1.11.2.3.1.2.2.1.3"; | ||
33 | $totalspace_OID = ".1.3.6.1.4.1.11.2.3.1.2.2.1.4"; | ||
34 | $freespace_OID = ".1.3.6.1.4.1.11.2.3.1.2.2.1.6"; | ||
35 | $path_OID = ".1.3.6.1.4.1.11.2.3.1.2.2.1.10"; | ||
36 | $cpu_5min_OID = ".1.3.6.1.4.1.11.2.3.1.1.4"; | ||
37 | |||
38 | use Getopt::Long; | ||
39 | |||
40 | GetOptions( "check-filesystem" => \$chk_fs, | ||
41 | "show-filesystems" => \$show_fs, | ||
42 | "check-filesystemID" => \$chk_fsid, | ||
43 | "check-cpu" => \$chk_cpu, | ||
44 | "host=s" => \$target_host, | ||
45 | "community=s" => \$target_community, | ||
46 | "filesystemID1=i" => \$fsid1_opt, | ||
47 | "filesystem=s" => \$fs_opt, | ||
48 | "protocol:s" => \$proto_opt, | ||
49 | "warning=i" => \$warning_opt, | ||
50 | "critical=i" => \$critical_opt); | ||
51 | |||
52 | $proto_opt = 1 | ||
53 | unless $proto_opt == 1 || | ||
54 | $proto_opt == '2c' || | ||
55 | $proto_opt == 3; | ||
56 | |||
57 | if ($chk_fs) { | ||
58 | walk_data($snmpwalk, $target_host, $target_community, $mounted_OID,$proto_opt ); | ||
59 | walk_data($snmpwalk, $target_host, $target_community, $totalspace_OID,$proto_opt ); | ||
60 | walk_data($snmpwalk, $target_host, $target_community, $freespace_OID,$proto_opt ); check_filesystem($fs_opt, $warning_opt, $critical_opt); | ||
61 | } elsif ($show_fs) { | ||
62 | walk_data($snmpwalk, $target_host, $target_community, $filesystemID1_OID,$proto_opt); | ||
63 | walk_data($snmpwalk, $target_host, $target_community, $mounted_OID,$proto_opt ); | ||
64 | walk_data($snmpwalk, $target_host, $target_community, $path_OID,$proto_opt); | ||
65 | show_filesystem(); | ||
66 | } elsif ($chk_fsid){ | ||
67 | $totalspace_fsID_OID = "$totalspace_OID.$fsid1_opt"; | ||
68 | $freespace_fsID_OID = "$freespace_OID.$fsid1_opt"; | ||
69 | walk_data($snmpwalk, $target_host, $target_community, $totalspace_fsID_OID,$proto_opt); | ||
70 | walk_data($snmpwalk, $target_host, $target_community, $freespace_fsID_OID,$proto_opt); | ||
71 | check_filesystemID1($fsid1_opt, $warning_opt, $critical_opt); | ||
72 | } elsif ($chk_cpu) { | ||
73 | get_cpu_load($snmpwalk, $target_host, $target_community, $cpu_5min_OID,$proto_opt); | ||
74 | check_cpu_5min($cpu, $warning_opt, $critical_opt); | ||
75 | } else { | ||
76 | print "\n\nUsage:\n"; | ||
77 | print "Checking 5-min CPU Load:\n"; | ||
78 | print " $0 --check-cpu -warning <threshold> --critical <threshold> --host <yourhost> --community <SNMP community> --protocol <SNMP version [1|2c|3]>\n\n"; | ||
79 | print "Checking local filesystem mounted on a host:\n"; | ||
80 | print " $0 --show-filesystems --host <hostname> --community <SNMP community> --protocol <SNMP version [1|2c|3]>\n\n"; | ||
81 | print "Checking by filesystem name:\n"; | ||
82 | print " $0 --check-filesystem --filesystem </dev/vg00/lvol1> --warning <% used space> --critical <% used space> --host <hostname> --community <SNMP community> --protocol <SNMP version [1|2c|3]>\n\n"; | ||
83 | print "Checking by filesystem ID:\n"; | ||
84 | print " $0 --check-filesystemID --filesystemID <filesystemID1> --warning <% used space> --critical <% used space> --host <hostname> --community <SNMP community> --protocol <SNMP version [1|2c|3]>\n\n"; | ||
85 | } | ||
86 | |||
87 | sub get_cpu_load { | ||
88 | my ($snmpwalk, $target_host, $target_community, $OID,$vers) = @_; | ||
89 | die "cannot fork: $!" unless defined($pid = open(SNMPWALK, "-|")); | ||
90 | |||
91 | if ($pid) { # parent | ||
92 | while (<SNMPWALK>) { | ||
93 | my @snmpdata = split(/:/,$_); | ||
94 | $cpu = $snmpdata[1]/100; | ||
95 | } | ||
96 | close(SNMPWALK) or warn "kid exited $?"; | ||
97 | } else { # child | ||
98 | exec($snmpwalk,'-c',$target_community,'-v',$vers,$target_host,$OID) or die "can't exec program: $!"; | ||
99 | } | ||
100 | } | ||
101 | |||
102 | sub walk_data { | ||
103 | #This function queries the SNMP daemon for the specific OID | ||
104 | my ($snmpwalk, $target_host, $target_community, $OID,$vers) = @_; | ||
105 | |||
106 | die "cannot fork: $!" unless defined($pid = open(SNMPWALK, "-|")); | ||
107 | |||
108 | if ($pid) { # parent | ||
109 | while (<SNMPWALK>) { | ||
110 | $output = $_; | ||
111 | sort_walk_data($output); | ||
112 | } | ||
113 | close(SNMPWALK) or warn "kid exited $?"; | ||
114 | } else { # child | ||
115 | exec($snmpwalk,'-c',$target_community,'-v',$vers,$target_host,$OID) or die "can't exec program: $!"; | ||
116 | } | ||
117 | } | ||
118 | |||
119 | sub sort_walk_data { | ||
120 | my ($snmp_data) = @_; | ||
121 | @fields = split(/\./,$snmp_data); | ||
122 | $item = $fields[8]; | ||
123 | $filesystemID1 = $fields[9]; | ||
124 | @fields2 = split(/=/,$fields[10]); | ||
125 | # $filesystemID2 = $fields2[0]; | ||
126 | $value = $fields2[1]; | ||
127 | chomp($value); | ||
128 | if ($value =~ /"/) { | ||
129 | @fields3 = split(/"/,$value); | ||
130 | $value = $fields3[1]; | ||
131 | } | ||
132 | if ($item == 3) { | ||
133 | $mounted{$filesystemID1} = "$value"; | ||
134 | } elsif ($item == 4) { | ||
135 | $totalspace{$filesystemID1} = "$value"; | ||
136 | } elsif ($item == 6) { | ||
137 | $freespace{$filesystemID1} = "$value"; | ||
138 | } elsif ($item == 10) { | ||
139 | $filesystempath{$filesystemID1} = "$value"; | ||
140 | } | ||
141 | } | ||
142 | |||
143 | sub show_filesystem { | ||
144 | print "\n\nfilesystemID1\tmounted filesystem\tfilesystem path\n"; | ||
145 | foreach $element (keys %mounted) { | ||
146 | print "$element\t$mounted{$element}\t\t$filesystempath{$element}\n"; | ||
147 | } | ||
148 | print "\n\n"; | ||
149 | } | ||
150 | |||
151 | sub check_filesystem { | ||
152 | |||
153 | # Warning = percentage of used space >= $warning and < $critical | ||
154 | # Critical = percentage of used space > $warning and >= $critical | ||
155 | # OK = percentage of used space < $warning and < $critical | ||
156 | |||
157 | my ($mounted_filesystem, $warning, $critical) = @_; | ||
158 | foreach $element (keys %mounted) { | ||
159 | if ($mounted{$element} eq $mounted_filesystem) { | ||
160 | my $warning_result = $totalspace{$element}*(100-$warning)/100; | ||
161 | my $critical_result = $totalspace{$element}*(100-$critical)/100; | ||
162 | my $result_percent = $freespace{$element}*100/$totalspace{$element}; | ||
163 | if (($freespace{$element} <= $warning_result) && ($freespace{$element} > $critical_result)) { | ||
164 | printf "Only %d M (%d%s) free\n",$freespace{$element}/1024,$result_percent,"%"; | ||
165 | exit 1; | ||
166 | } elsif ($freespace{$element} <= $critical_result) { | ||
167 | printf "Only %d M (%d%s) free\n",$freespace{$element}/1024,$result_percent,"%"; | ||
168 | exit 2; | ||
169 | } else { | ||
170 | printf "Disk ok - %d M (%d%s) free\n",$freespace{$element}/1024,$result_percent,"%"; | ||
171 | exit 0; | ||
172 | } | ||
173 | } | ||
174 | } | ||
175 | print "$mounted_filesystem doesn't exist in $target_host\n\n"; | ||
176 | exit -1; | ||
177 | } | ||
178 | |||
179 | sub check_filesystemID1{ | ||
180 | # Warning = percentage of used space >= $warning and < $critical | ||
181 | # Critical = percentage of used space > $warning and >= $critical | ||
182 | # OK = percentage of used space < $warning and < $critical | ||
183 | |||
184 | my ($fsid1, $warning, $critical) = @_; | ||
185 | foreach $element (keys %totalspace) { | ||
186 | if ($element eq $fsid1) { | ||
187 | my $warning_result = $totalspace{$element}*(100-$warning)/100; | ||
188 | my $critical_result = $totalspace{$element}*(100-$critical)/100; | ||
189 | my $result_percent = $freespace{$element}*100/$totalspace{$element}; | ||
190 | if (($freespace{$element} <= $warning_result) && ($freespace{$element} >= $critical_result)) { | ||
191 | printf "Only %d M (%d%s) free\n",$freespace{$element}/1024,$result_percent,"%"; | ||
192 | exit 1; | ||
193 | } elsif ($freespace{$element} <= $critical_result) { | ||
194 | printf "Only %d M (%d%s) free\n",$freespace{$element}/1024,$result_percent,"%"; | ||
195 | exit 2; | ||
196 | } else { | ||
197 | printf "Disk ok - %d M (%d%s) free\n",$freespace{$element}/1024,$result_percent,"%"; | ||
198 | exit 0; | ||
199 | } | ||
200 | } | ||
201 | } | ||
202 | print "$fsid1 doesn't exist in $target_host\n\n"; | ||
203 | exit -1; | ||
204 | } | ||
205 | |||
206 | sub check_cpu_5min { | ||
207 | my ($cpu, $warn, $crit) = @_; | ||
208 | if ($cpu >= $crit) { | ||
209 | print "Critical- 5-min load: $cpu\n"; | ||
210 | exit 2; | ||
211 | } elsif ($cpu >= $warn) { | ||
212 | print "Warning - 5-min load: $cpu\n"; | ||
213 | exit 1; | ||
214 | } else { | ||
215 | print "Load ok - 5-min load: $cpu\n"; | ||
216 | exit 0; | ||
217 | } | ||
218 | } | ||
219 | |||
220 | |||
221 | |||