X7ROOT File Manager
Current Path:
/usr/local/nagios/plugins
usr
/
local
/
nagios
/
plugins
/
📁
..
📄
check-vps-cxs-log.ini
(214 B)
📄
check-vps-cxs-log.sh
(4.22 KB)
📄
check_3ware-raid.pl
(10.93 KB)
📄
check_aacraid.py
(4.62 KB)
📄
check_cl_license
(943 B)
📄
check_cplicense
(268 B)
📄
check_csf
(3.78 KB)
📄
check_eximq
(3.16 KB)
📄
check_if_ips.py
(3.88 KB)
📄
check_mdadm
(771 B)
📄
check_megaraid_sas
(6.98 KB)
📄
check_mem.pl
(12.85 KB)
📄
check_newbackup
(7.08 KB)
📄
check_puppet
(4.35 KB)
📄
check_ro_fs.sh
(530 B)
📄
check_spamd
(6.74 KB)
📁
nc-smart-data-exporter
Editing: check_3ware-raid.pl
#!/usr/bin/perl # ------------------------------------------------------- # -=- <check_3ware-raid.pl> -=- # ------------------------------------------------------- # # Description : yet another plugin to check your 3ware RAID # controller # # Version : 0.1 # ------------------------------------------------------- # In : # - see the How to use section # # Out : # - only print on the standard output # # Features : # - perfdata output # # Fix Me/Todo : # - too many things ;) but let me know what do you think about it # # #################################################################### # #################################################################### # GPL v3 # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # #################################################################### # #################################################################### # How to use : # ------------ # # 1 to use this script you have to install firt tw_cli. You can find # the source here : http://www.3ware.com/support/download.asp # just follow the instructions to compile and deploy it # # 2 then you just have to run the following command : # $ ./check_3ware-raid.pl --help # # If you need to use this script with NRPE you just have to do the # following steps : # # 1 allow your user to run the script with the sudo rights. Just add # something like that in your /etc/sudoers (use visudo) : # nagios ALL=(ALL) NOPASSWD: /<path-to>/check_3ware-raid.pl # # 2 then just add this kind of line in your NRPE config file : # command[check_3ware]=/usr/bin/sudo /<path-to>/check_3ware-raid.pl # # 3 don't forget to restart your NRPE daemon # # #################################################################### # #################################################################### # Changelog : # ----------- # # -------------------------------------------------------------------- # Date:28/11/2009 Version:0.1 Author:Erwan Ben Souiden # >> creation # #################################################################### # #################################################################### # Don't touch anything under this line! # You shall not pass - Gandalf is watching you # #################################################################### use strict; use warnings; use Getopt::Long qw(:config no_ignore_case); # Generic variables # ----------------- my $version = '0.1'; my $author = 'Erwan Labynocle Ben Souiden'; my $a_mail = 'erwan@aleikoum.net'; my $script_name = 'check_3ware-raid.pl'; my $verbose_value = 0; my $version_value = 0; my $more_value = 0; my $help_value = 0; my $perfdata_value = 0; my %ERRORS=('OK'=>0,'WARNING'=>1,'CRITICAL'=>2,'UNKNOWN'=>3,'DEPENDENT'=>4); # Plugin default variables # ------------------------ my $display = 'CHECK 3ware RAID - '; my ($critical,$warning) = (2,1); my $tw_cli_path = '/usr/sbin/tw_cli'; my ($id_controller,$action) = ("",'disk_check'); GetOptions ( 'P=s' => \ $tw_cli_path, 'path-tw_cli=s' => \ $tw_cli_path, 'w=i' => \ $warning, 'warning=i' => \ $warning, 'c=i' => \ $critical, 'critical=i' => \ $critical, 'action=s' => \ $action, 'a=s' => \ $action, 'C=s' => \ $id_controller, 'controller=s' => \ $id_controller, 'm' => \ $more_value, 'more' => \ $more_value, 'V' => \ $version_value, 'version' => \ $version_value, 'h' => \ $help_value, 'H' => \ $help_value, 'help' => \ $help_value, 'display=s' => \ $display, 'D=s' => \ $display, 'perfdata' => \ $perfdata_value, 'p' => \ $perfdata_value, 'v' => \ $verbose_value, 'verbose' => \ $verbose_value ); print_usage() if ($help_value); print_version() if ($version_value); # Syntax check of your specified options # -------------------------------------- print "DEBUG : action : $action, path-tw_cli : $tw_cli_path\n" if ($verbose_value); if (($action eq "") or ($tw_cli_path eq "")) { print $display.'one or more following arguments are missing :action/path-tw_cli'."\n"; exit $ERRORS{"UNKNOWN"}; } print "DEBUG : check if $tw_cli_path exists and is executable\n" if ($verbose_value); if(! -x $tw_cli_path) { print $display."$tw_cli_path".' is not executable by you'."\n"; exit $ERRORS{"UNKNOWN"}; } print "DEBUG : warning threshold : $warning, critical threshold : $critical\n" if ($verbose_value); if (($critical < 0) or ($warning < 0) or ($critical < $warning)) { print $display.'the thresholds must be integers and the critical threshold higher or equal than the warning threshold'."\n"; exit $ERRORS{"UNKNOWN"}; } print "DEBUG : controller : $id_controller\n" if ($verbose_value); if ($id_controller ne "") { if (check_controller("$tw_cli_path",$id_controller) != 0) { print $display.'UNKNOWN - problem with the controller '."$id_controller ".'may be it does not exist'."\n"; exit $ERRORS{"UNKNOWN"}; } } # Core script # ----------- my ($return,$return_more,$plugstate) = ("","","OK"); my @controller_list; if (! $id_controller) { @controller_list = list_all_controller("$tw_cli_path"); if (! @controller_list) { print $display.'UNKNOWN - problem to have the controllers list'."\n"; exit $ERRORS{"UNKNOWN"}; } } else { push(@controller_list,$id_controller); } print "DEBUG : action = $action\n" if ($verbose_value); my @show_return; # disk_check action # ----------------- if ($action eq 'disk_check') { my ($c_ok,$c_other) = (0,0); foreach (@controller_list) { @show_return = `$tw_cli_path /$_ show`; foreach (@show_return) { if ($_=~/^(p\d+)\s+(\S+)\s/ ) { print "DEBUG : disk $1/status $2\n" if ($verbose_value); $c_ok++ if ($2 eq "OK"); $c_other++ if (($2 ne "OK") and ($2 ne "NOT-PRESENT")); $return_more .= " ($1,$2)"; } } $return .= "$c_ok disk(s) detected as OK"; $return .= " and $c_other with potential problem" if ($c_other); $return .= " -$return_more" if ($more_value); $return .= " | disksOK=$c_ok disksNOK=$c_other" if ($perfdata_value); $plugstate = "WARNING" if ($c_other >= $warning); $plugstate = "CRITICAL" if ($c_other >= $critical); } } # unit action # ----------- elsif ($action eq 'unit_check') { my ($c_ok,$c_rebuild,$c_other) = (0,0,0); foreach (@controller_list) { @show_return = `$tw_cli_path /$_ show`; foreach (@show_return) { if ($_=~/^(u\d+)\s+(\S+)\s+(\S+)/) { print "DEBUG : disk $1/type $2/status $3\n" if ($verbose_value); $c_ok++ if ($3 eq "OK"); $c_rebuild++ if ($3 eq "REBUILD"); $c_other++ if (($3 ne "OK") and ($3 ne "REBUILD")); $return_more .= " ($1,$2,$3)"; } } $return .= "$c_ok unit(s) detected as OK"; $return .= " and $c_rebuild as REBUILD" if ($c_rebuild); $return .= "and $c_other with potential problem" if ($c_other); $return .= " -$return_more" if ($more_value); $return .= " | unitOK=$c_ok unitREBUILD=$c_rebuild unitNOK=$c_other" if ($perfdata_value); $plugstate = "WARNING" if ($c_rebuild); $plugstate = "CRITICAL" if ($c_other); } } else { $return .= "action must be unit_check|disk_check"; $action = ""; $plugstate = "UNKNOWN"; } print $display.$action." - ".$plugstate." - ".$return; exit $ERRORS{$plugstate}; # #################################################################### # function 1 : display the help # ------------------------------ sub print_usage { print <<EOT; $script_name version $version by $author This plugin checks state of your physical disks and logical units of a 3ware RAID card. Usage: /<path-to>/$script_name [-a unit_check|disk_check] [-p] [-D "$display"] [-v] [-m] [-c 2] [-w 1] [-C /c1] Options: -h, --help Print detailed help screen -V, --version Print version information -D, --display=STRING to modify the output display... default is "CHECK 3ware RAID - " -P, --path-tw_cli=STRING specify the path to the tw_cli binary default value is /usr/sbin/tw_cli -a, --action=STRING specify the action : unit_check|disk_check default is disk_check disk_check : display state of all physical disks unit_check : display state of all logical unit -C, --controller=STRING allow you to specify only one controller to check the default behavior is to check each time every controller -c, --critical=INT specify a critical threshold for the number of disks in a non-OK state. default is 2 only for the disk_check action -w, --warning=INT specify a warning threshold for the number of disks in a non-OK state. default is 1 only for the disk_check action -m, --more Print a longer output. By default, the output is not complet because Nagios may truncate it. This option is just for you -p, --perfdata If you want to activate the perfdata output -v, --verbose Show details for command-line debugging (Nagios may truncate the output) Send email to $a_mail if you have questions regarding use of this software. To submit patches or suggest improvements, send email to $a_mail This plugin has been created by $author Hope you will enjoy it ;) Remember : This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. EOT exit $ERRORS{"UNKNOWN"}; } # function 2 : display version information # ----------------------------------------- sub print_version { print <<EOT; $script_name version $version EOT exit $ERRORS{"UNKNOWN"}; } # function 3 : check if controller exists # --------------------------------------- sub check_controller { my ($tw_cli_path,$id_controller) = @_; system("$tw_cli_path /$id_controller show >> /dev/null 2>&1"); return $?; } # function 4 : return the controllers list # ---------------------------------------- sub list_all_controller { my ($tw_cli_path) = @_; my @controller_list; my @cmd_output = `$tw_cli_path show`; if ($? == 0) { foreach (@cmd_output) { if ($_=~/^(c\d+)\s/ ) { push(@controller_list,$1); } } } return @controller_list; }
Upload File
Create Folder