mirror of
https://github.com/opinkerfi/nagios-plugins.git
synced 2026-02-13 02:20:57 +01:00
Compare commits
41 Commits
nagios-okp
...
nagios-plu
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
22e4293db7 | ||
|
|
9b89a3d998 | ||
|
|
553a182dd1 | ||
|
|
9501bef37b | ||
|
|
b672f6f508 | ||
|
|
04d25281e3 | ||
|
|
9b2474fb49 | ||
|
|
156459046c | ||
|
|
a93d887721 | ||
|
|
2dbec06282 | ||
|
|
734e7d5596 | ||
|
|
623c1d5159 | ||
|
|
19312f9b55 | ||
|
|
c1005cb911 | ||
|
|
f5d4cde8b5 | ||
|
|
067f58f52e | ||
|
|
5d0df0bfe9 | ||
|
|
735b2795d8 | ||
|
|
5593391a3b | ||
|
|
ee4b10b291 | ||
|
|
b10d555e52 | ||
|
|
971afc97f7 | ||
|
|
fcf90cae3e | ||
|
|
73b632a828 | ||
|
|
b375ae66ee | ||
|
|
3606e03170 | ||
|
|
63f285a037 | ||
|
|
be7032f4e4 | ||
|
|
d259894a9d | ||
|
|
6d0ce2c869 | ||
|
|
4aae5f6327 | ||
|
|
2112847349 | ||
|
|
f382acb1a6 | ||
|
|
d7efe24a34 | ||
|
|
72f2c0de16 | ||
|
|
7c41c09b2f | ||
|
|
f87963f554 | ||
|
|
38a207065e | ||
|
|
831156308b | ||
|
|
356bb2c762 | ||
|
|
bc15b653b1 |
59
check_cpu.py/nagios-okplugin-check_cpu.spec
Normal file
59
check_cpu.py/nagios-okplugin-check_cpu.spec
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
%define debug_package %{nil}
|
||||||
|
|
||||||
|
Summary: A Nagios plugin to check CPU on Linux servers
|
||||||
|
Name: nagios-okplugin-check_cpu
|
||||||
|
Version: 1.1
|
||||||
|
Release: 1%{?dist}
|
||||||
|
License: GPLv2+
|
||||||
|
Group: Applications/System
|
||||||
|
URL: https://github.com/opinkerfi/nagios-plugins/
|
||||||
|
Source0: https://github.com/opinkerfi/nagios-plugins/archive/%{name}-%{version}-%{release}.tar.gz
|
||||||
|
Requires: nagios-okplugin-common
|
||||||
|
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||||
|
Packager: Tomas Edwardsson <tommi@tommi.org>
|
||||||
|
BuildArch: noarch
|
||||||
|
|
||||||
|
%description
|
||||||
|
Check cpu states on line machines
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%setup -q
|
||||||
|
|
||||||
|
%build
|
||||||
|
|
||||||
|
|
||||||
|
%install
|
||||||
|
rm -rf %{buildroot}
|
||||||
|
install -D -p -m 0755 okplugin_check_cpu %{buildroot}%{_libdir}/nagios/plugins/okplugin_check_cpu
|
||||||
|
install -D -p -m 0755 nrpe.d/okplugin_check_cpu.cfg %{buildroot}/etc/nrpe.d/okplugin_check_cpu.cfg
|
||||||
|
|
||||||
|
|
||||||
|
%clean
|
||||||
|
rm -rf %{buildroot}
|
||||||
|
|
||||||
|
%post
|
||||||
|
/sbin/service nrpe reload
|
||||||
|
|
||||||
|
%files
|
||||||
|
%defattr(-,root,root,-)
|
||||||
|
%{_libdir}/nagios/plugins/*
|
||||||
|
%{_sysconfdir}/nrpe.d/*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
* Mon Jan 20 2014 Tomas Edwardsson <tommi@tommi.org> 1.1-1
|
||||||
|
- new package built with tito
|
||||||
|
|
||||||
|
* Thu Aug 23 2012 Pall Sigurdsson <palli@opensource.is> 1.0-1
|
||||||
|
- Version number bumped
|
||||||
|
- Updates buildarch to noarch (tommi@tommi.org)
|
||||||
|
|
||||||
|
* Mon Mar 12 2012 Pall Sigurdsson <palli@opensource.is> 0.3-1
|
||||||
|
- new package built with tito
|
||||||
|
|
||||||
|
* Thu Nov 25 2010 Pall Sigurdsson <palli@opensource.is> 0.1-2
|
||||||
|
- Nrpe config now ships with plugin by default
|
||||||
|
* Mon Mar 1 2010 Tomas Edwardsson <tommi@ok.is> 0.1-1
|
||||||
|
- Initial packaging
|
||||||
|
|
||||||
1
check_cpu.py/nrpe.d/okplugin_check_cpu.cfg
Normal file
1
check_cpu.py/nrpe.d/okplugin_check_cpu.cfg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
command[okplugin_check_cpu]=/usr/lib/nagios/plugins/okplugin_check_cpu
|
||||||
132
check_cpu.py/okplugin_check_cpu
Normal file
132
check_cpu.py/okplugin_check_cpu
Normal file
@@ -0,0 +1,132 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
#
|
||||||
|
# Copyright 2014, Tomas Edwardsson
|
||||||
|
#
|
||||||
|
# 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/>.
|
||||||
|
"""
|
||||||
|
Gathers information on cpu usage on a linux machine
|
||||||
|
|
||||||
|
It returns performance data for both the last 5 seconds and from last run.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from pynag.Plugins import PluginHelper, ok, unknown
|
||||||
|
import os
|
||||||
|
import time
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
"""The main logic of the program"""
|
||||||
|
|
||||||
|
# See man proc and search for /proc/stat
|
||||||
|
stat_fields = ['cpu', 'user', 'nice', 'system', 'idle', 'iowait', 'irq',
|
||||||
|
'softirq', 'steal', 'guest', 'guest_nice']
|
||||||
|
|
||||||
|
pyplug = PluginHelper()
|
||||||
|
|
||||||
|
# Get the statistics from last run
|
||||||
|
old_stat = get_saved_stat()
|
||||||
|
|
||||||
|
# Get current state
|
||||||
|
stat = get_stat()
|
||||||
|
|
||||||
|
# Resample
|
||||||
|
time.sleep(5)
|
||||||
|
stat2 = get_stat()
|
||||||
|
|
||||||
|
try:
|
||||||
|
save_stat(stat)
|
||||||
|
except IOError, err:
|
||||||
|
pyplug.exit(unknown, "Unable to save cpu statistics: %s" % err)
|
||||||
|
|
||||||
|
|
||||||
|
# Calculate averages for the last few seconds
|
||||||
|
current_averages = diff_stats(stat2, stat)
|
||||||
|
for pos in range(len(current_averages)):
|
||||||
|
pyplug.add_metric(label=stat_fields[pos+1],
|
||||||
|
value=current_averages[pos],
|
||||||
|
uom="%")
|
||||||
|
|
||||||
|
# Calculate averages from last run
|
||||||
|
if old_stat:
|
||||||
|
last_run_avg = diff_stats(old_stat, stat)
|
||||||
|
for pos in range(len(current_averages)):
|
||||||
|
pyplug.add_metric(label=stat_fields[pos+1]+"_avg",
|
||||||
|
value=last_run_avg[pos],
|
||||||
|
uom="%")
|
||||||
|
|
||||||
|
pyplug.add_status(ok)
|
||||||
|
pyplug.add_summary("CPU load %.2f%%" % (100.0 - current_averages[3]))
|
||||||
|
pyplug.exit()
|
||||||
|
|
||||||
|
def diff_stats(older, newer):
|
||||||
|
"""Calculates the percentage between two stat arrays"""
|
||||||
|
if older:
|
||||||
|
diff = []
|
||||||
|
for pos in range(len(newer)):
|
||||||
|
diff.append(newer[pos] - older[pos])
|
||||||
|
averages = calc_avg(diff)
|
||||||
|
else:
|
||||||
|
averages = calc_avg(newer)
|
||||||
|
|
||||||
|
return averages
|
||||||
|
|
||||||
|
|
||||||
|
def remove_stale_state():
|
||||||
|
"""Removes the last state file if we have rebooted"""
|
||||||
|
|
||||||
|
try:
|
||||||
|
state_mtime = os.stat("/var/lib/nagios-okplugin/check_cpu").st_mtime
|
||||||
|
boot_time = os.stat("/proc/1").st_mtime
|
||||||
|
if state_mtime < boot_time:
|
||||||
|
print "unlinking"
|
||||||
|
os.unlink("/var/lib/nagios-okplugin/check_cpu")
|
||||||
|
except OSError:
|
||||||
|
return None
|
||||||
|
|
||||||
|
return state_mtime
|
||||||
|
|
||||||
|
def calc_avg(stat):
|
||||||
|
"""Calculates the average of each int in array"""
|
||||||
|
stat_sum = sum(stat)
|
||||||
|
avg = []
|
||||||
|
for pos in range(len(stat)):
|
||||||
|
avg.append(float(stat[pos]) / stat_sum * 100)
|
||||||
|
return avg
|
||||||
|
|
||||||
|
def get_stat():
|
||||||
|
"""Fetches the first line from /proc/stat and returns the numbers"""
|
||||||
|
stat_fh = open("/proc/stat")
|
||||||
|
return [int(pos) for pos in stat_fh.readline().split()[1:]]
|
||||||
|
|
||||||
|
def get_saved_stat():
|
||||||
|
"""Fetches information about the last run to be able to do averages"""
|
||||||
|
|
||||||
|
remove_stale_state()
|
||||||
|
try:
|
||||||
|
stat_fh = open("/var/lib/nagios-okplugin/check_cpu")
|
||||||
|
except IOError:
|
||||||
|
return None
|
||||||
|
return [int(pos) for pos in stat_fh.readline().split()[1:]]
|
||||||
|
|
||||||
|
def save_stat(stat):
|
||||||
|
"""Save statistics to compare to in next run"""
|
||||||
|
stat_fh = open("/var/lib/nagios-okplugin/check_cpu", "w")
|
||||||
|
|
||||||
|
stat_fh.write("cpu " + " ".join([str(pos) for pos in stat]) + "\n")
|
||||||
|
stat_fh.close()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
|
||||||
|
# vim: sts=4 expandtab
|
||||||
@@ -49,7 +49,7 @@ timeout = 0 # 0 means no timeout
|
|||||||
server_side_troubleshooting = False
|
server_side_troubleshooting = False
|
||||||
|
|
||||||
# No real need to change anything below here
|
# No real need to change anything below here
|
||||||
version = "1.0"
|
version = "1.0.1"
|
||||||
ok = 0
|
ok = 0
|
||||||
warning = 1
|
warning = 1
|
||||||
critical = 2
|
critical = 2
|
||||||
@@ -239,15 +239,15 @@ def run_sssu(system=None, command="ls system full"):
|
|||||||
if output.pop(0).strip() != '':
|
if output.pop(0).strip() != '':
|
||||||
error = 1
|
error = 1
|
||||||
if output.pop(0).strip() != '':
|
if output.pop(0).strip() != '':
|
||||||
error = 1
|
error = 2
|
||||||
if output.pop(0).strip() != 'SSSU for HP StorageWorks Command View EVA':
|
if output.pop(0).strip().find('SSSU for HP') != 0:
|
||||||
error = 1
|
error = 3
|
||||||
if output.pop(0).strip().find('Version:') != 0:
|
if output.pop(0).strip().find('Version:') != 0:
|
||||||
error = 1
|
error = 4
|
||||||
if output.pop(0).strip().find('Build:') != 0:
|
if output.pop(0).strip().find('Build:') != 0:
|
||||||
error = 1
|
error = 5
|
||||||
if output.pop(0).strip().find('NoSystemSelected> ') != 0:
|
if output.pop(0).strip().find('NoSystemSelected> ') != 0:
|
||||||
error = 1
|
error = 6
|
||||||
#if output.pop(0).strip() != '': error = 1
|
#if output.pop(0).strip() != '': error = 1
|
||||||
#if output.pop(0).strip().find('NoSystemSelected> ') != 0: error=1
|
#if output.pop(0).strip().find('NoSystemSelected> ') != 0: error=1
|
||||||
#if output.pop(0).strip() != '': error = 1
|
#if output.pop(0).strip() != '': error = 1
|
||||||
@@ -260,7 +260,7 @@ def run_sssu(system=None, command="ls system full"):
|
|||||||
if i.find('information:') > 0:
|
if i.find('information:') > 0:
|
||||||
break
|
break
|
||||||
if error > 0:
|
if error > 0:
|
||||||
print "Error running the sssu command"
|
print "Error running the sssu command: " + str(error)
|
||||||
print commandstring
|
print commandstring
|
||||||
print str_buffer
|
print str_buffer
|
||||||
exit(unknown)
|
exit(unknown)
|
||||||
@@ -572,7 +572,7 @@ def check_generic(command="ls disk full", namefield="objectname", perfdata_field
|
|||||||
if i.has_key(x):
|
if i.has_key(x):
|
||||||
longoutput("- %s = %s\n" % (x, i[x]))
|
longoutput("- %s = %s\n" % (x, i[x]))
|
||||||
|
|
||||||
end(summary, perfdata, longserviceoutput, nagios_state)
|
end(summary, perfdata, longserviceoutput, nagios_state)
|
||||||
|
|
||||||
|
|
||||||
def check_multiple_objects(my_object, name):
|
def check_multiple_objects(my_object, name):
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
check_ipa
|
|
||||||
|
|
||||||
Various checks for IPA http://freeipa.org/ server
|
|
||||||
19
check_ipa/README.md
Normal file
19
check_ipa/README.md
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
check_ipa_replication
|
||||||
|
=====================
|
||||||
|
You need some configuration for this plugin to have access to replication
|
||||||
|
information.
|
||||||
|
|
||||||
|
Allow anonymous read to replication information
|
||||||
|
-----------------------------------------------
|
||||||
|
You will need to do this for every IPA server, masters and replicas
|
||||||
|
|
||||||
|
```
|
||||||
|
ldapmodify -x -D "cn=directory manager" -W -f grant_anonymous_replication_view.ldif -h ipa-host.example.com
|
||||||
|
```
|
||||||
|
|
||||||
|
Configure the directory manager credentials
|
||||||
|
-------------------------------------------
|
||||||
|
NOT RECOMENDED, you can use -D and -w with the directory manager credentials
|
||||||
|
and the plugin will work as expected.
|
||||||
|
|
||||||
|
|
||||||
4
check_ipa/grant_anonymous_replication_view.ldif
Normal file
4
check_ipa/grant_anonymous_replication_view.ldif
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
dn: cn="dc=mr,dc=lan",cn=mapping tree,cn=config
|
||||||
|
changetype: modify
|
||||||
|
add: aci
|
||||||
|
aci: (targetattr=*)(targetfilter="(|(objectclass=nsds5replicationagreement)(objectclass=nsDSWindowsReplicationAgreement))")(version 3.0; aci "permission:Read Replication Agreements"; allow (read, search, compare) groupdn = "ldap:///anyone";)
|
||||||
@@ -37,6 +37,7 @@ rm -rf %{buildroot}
|
|||||||
%files
|
%files
|
||||||
%defattr(-,root,root,-)
|
%defattr(-,root,root,-)
|
||||||
%doc README
|
%doc README
|
||||||
|
%doc grant_anonymous_replication_view.ldif
|
||||||
%{_libdir}/nagios/plugins/*
|
%{_libdir}/nagios/plugins/*
|
||||||
%config(noreplace) %{_sysconfdir}/nrpe.d/check_ipa.cfg
|
%config(noreplace) %{_sysconfdir}/nrpe.d/check_ipa.cfg
|
||||||
|
|
||||||
|
|||||||
1
check_msa_hardware-pl/README.md
Normal file
1
check_msa_hardware-pl/README.md
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Checks hardware status of MSA disk arrays also known as HP P2000
|
||||||
0
check_msa_hardware-pl/check_msa_hardware-pl → check_msa_hardware-pl/check_msa_hardware
Normal file → Executable file
0
check_msa_hardware-pl/check_msa_hardware-pl → check_msa_hardware-pl/check_msa_hardware
Normal file → Executable file
67
check_msa_hardware-pl/nagios-okplugin-check_msa.spec
Normal file
67
check_msa_hardware-pl/nagios-okplugin-check_msa.spec
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
%define debug_package %{nil}
|
||||||
|
%define plugin check_msa_hardware
|
||||||
|
%define packager Pall Sigurdsson <palli@opensource.is>
|
||||||
|
|
||||||
|
Summary: A Nagios plugin to check status of an MSA (HP P2000) disk array
|
||||||
|
Name: nagios-okplugin-%{plugin}
|
||||||
|
Version: 1.0.5
|
||||||
|
Release: 1%{?dist}
|
||||||
|
License: GPLv3+
|
||||||
|
Group: Applications/System
|
||||||
|
URL: https://github.com/opinkerfi/nagios-plugins/tree/master/%{plugin}
|
||||||
|
Source0: https://github.com/opinkerfi/nagios-plugins/tree/master/%{plugin}/releases/%{name}-%{version}.tar.gz
|
||||||
|
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||||
|
Packager: %{packager}
|
||||||
|
BuildArch: noarch
|
||||||
|
Requires: pynag
|
||||||
|
|
||||||
|
|
||||||
|
%description
|
||||||
|
Checks status of a remote MSA disk array, also known as HP P2000
|
||||||
|
%prep
|
||||||
|
%setup -q
|
||||||
|
|
||||||
|
%build
|
||||||
|
|
||||||
|
|
||||||
|
%install
|
||||||
|
rm -rf %{buildroot}
|
||||||
|
install -D -p -m 0755 %{plugin} %{buildroot}%{_libdir}/nagios/plugins/%{plugin}
|
||||||
|
mkdir -p %{buildroot}%{_sysconfdir}/nrpe.d
|
||||||
|
sed "s^/usr/lib64^%{_libdir}^g" nrpe.d/%{plugin}.cfg > %{buildroot}%{_sysconfdir}/nrpe.d/%{plugin}.cfg
|
||||||
|
|
||||||
|
# Temporary fix for selinux
|
||||||
|
chcon system_u:object_r:nagios_unconfined_plugin_exec_t:s0 %{plugin} %{buildroot}%{_libdir}/nagios/plugins/%{plugin}
|
||||||
|
|
||||||
|
%clean
|
||||||
|
rm -rf %{buildroot}
|
||||||
|
|
||||||
|
%post
|
||||||
|
/sbin/service nrpe status &> /dev/null && /sbin/service nrpe reload || :
|
||||||
|
|
||||||
|
%files
|
||||||
|
%defattr(-,root,root,-)
|
||||||
|
%doc README.md
|
||||||
|
%{_libdir}/nagios/plugins/*
|
||||||
|
%config(noreplace) %{_sysconfdir}/nrpe.d/%{plugin}.cfg
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
* Thu Jan 30 2014 Pall Sigurdsson <palli@opensource.is> 1.0.5-1
|
||||||
|
-
|
||||||
|
|
||||||
|
* Thu Jan 30 2014 Pall Sigurdsson <palli@opensource.is> 1.0.4-1
|
||||||
|
- README.md added (you@example.com)
|
||||||
|
- nrpe.d added to check_msa (you@example.com)
|
||||||
|
- rename check_msa_hardware-pl (you@example.com)
|
||||||
|
|
||||||
|
* Thu Jan 30 2014 Pall Sigurdsson <palli@opensource.is> 1.0.3-1
|
||||||
|
- new package built with tito
|
||||||
|
|
||||||
|
* Thu Jan 30 2014 Pall Sigurdsson <palli@opensource.is> 1.0.2-1
|
||||||
|
- new package built with tito
|
||||||
|
|
||||||
|
* Thu Jan 30 2014 Unknown name 1.0.1-1
|
||||||
|
- new package built with tito
|
||||||
|
|
||||||
|
* Fri Jan 27 2014 Pall Sigurdsson 1.0.0-1
|
||||||
|
- Initial Packaging
|
||||||
1
check_msa_hardware-pl/nrpe.d/check_msa_hardware.cfg
Normal file
1
check_msa_hardware-pl/nrpe.d/check_msa_hardware.cfg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
command[check_msa_hardware]=/usr/lib64/nagios/plugins/check_msa_hardware
|
||||||
77
check_storwize/README.md
Normal file
77
check_storwize/README.md
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
check_storwize.py
|
||||||
|
=================
|
||||||
|
|
||||||
|
Nagios plugin to check the status of a remote Storwize disk array.
|
||||||
|
|
||||||
|
This plugin is designed to be syntactically compatible with check_storwize.sh from nagios exchange
|
||||||
|
with the following differences:
|
||||||
|
|
||||||
|
- Outputs performance data
|
||||||
|
- GPL License
|
||||||
|
- Written in python
|
||||||
|
- More stable plugin results when disk array is broken
|
||||||
|
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
=============
|
||||||
|
```
|
||||||
|
python check_storwize.py --help
|
||||||
|
Usage: check_storwize.py [options]
|
||||||
|
|
||||||
|
Options:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
-H HOSTNAME, -M HOSTNAME, --hostname=HOSTNAME
|
||||||
|
Hostname or ip address
|
||||||
|
-U USER, --user=USER Log in as this user to storwize
|
||||||
|
-Q QUERY, --query=QUERY
|
||||||
|
Query to send to storwize (see also -L)
|
||||||
|
-L, --list-queries List of valid queries
|
||||||
|
--test Run this plugin in test mode
|
||||||
|
|
||||||
|
Generic Options:
|
||||||
|
--timeout=50 Exit plugin with unknown status after x seconds
|
||||||
|
--threshold=range Thresholds in standard nagios threshold format
|
||||||
|
--th=range Same as --threshold
|
||||||
|
--extra-opts=@file Read options from an ini file. See
|
||||||
|
http://nagiosplugins.org/extra-opts
|
||||||
|
-d, --debug Print debug info
|
||||||
|
|
||||||
|
Display Options:
|
||||||
|
-v, --verbose Print more verbose info
|
||||||
|
--no-perfdata Dont show any performance data
|
||||||
|
--no-longoutput Hide longoutput from the plugin output (i.e. only
|
||||||
|
display first line of the output)
|
||||||
|
--no-summary Hide summary from plugin output
|
||||||
|
--get-metrics Print all available metrics and exit (can be combined
|
||||||
|
with --verbose)
|
||||||
|
--legacy Deprecated, do not use
|
||||||
|
```
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
========
|
||||||
|
```
|
||||||
|
# List array status
|
||||||
|
python check_storwize -H remote_host -U username -Q lsarray
|
||||||
|
|
||||||
|
# List vdisk status
|
||||||
|
python check_storwize -H remote_host -U username -Q lsarray
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
Valid modes
|
||||||
|
===========
|
||||||
|
The following is a list of valid modes (at the time of this writing). For an up-to-date list consult check_storwize -L
|
||||||
|
|
||||||
|
* lsarray
|
||||||
|
* lsdrive
|
||||||
|
* lsenclosurebattery
|
||||||
|
* lsenclosurecanister
|
||||||
|
* lsenclosurepsu
|
||||||
|
* lsenclosureslot
|
||||||
|
* lsenclosure
|
||||||
|
* lsmdiskgrp
|
||||||
|
* lsmdskgrp
|
||||||
|
* lsmgrp
|
||||||
|
* lsrcrelationship
|
||||||
|
* lsvdisk
|
||||||
205
check_storwize/check_storwize.py
Normal file
205
check_storwize/check_storwize.py
Normal file
@@ -0,0 +1,205 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
from pynag.Plugins import PluginHelper, ok, warning, critical, unknown
|
||||||
|
from pynag.Utils import runCommand
|
||||||
|
from collections import namedtuple
|
||||||
|
|
||||||
|
valid_queries = "lsarray lsdrive lsenclosurebattery lsenclosurecanister lsenclosurepsu lsenclosureslot lsenclosure lsmdiskgrp lsmdskgrp lsmgrp lsrcrelationship lsvdisk"
|
||||||
|
|
||||||
|
p = PluginHelper()
|
||||||
|
p.add_option("-H", "--hostname", '-M', help="Hostname or ip address", dest="hostname")
|
||||||
|
p.add_option("-U", "--user", help="Log in as this user to storwize", dest="user", default="nagios")
|
||||||
|
p.add_option("-Q", "--query", help="Query to send to storwize (see also -L)", dest="query", default="lsarray")
|
||||||
|
p.add_option("-L", "--list-queries", help="List of valid queries", dest="list_queries", action="store_true")
|
||||||
|
p.add_option("--test", help="Run this plugin in test mode", dest="test", action="store_true")
|
||||||
|
|
||||||
|
p.parse_arguments()
|
||||||
|
|
||||||
|
if p.options.list_queries is True:
|
||||||
|
p.parser.error("Valid Queries: %s" % valid_queries)
|
||||||
|
if not p.options.hostname:
|
||||||
|
p.parser.error("Required options -H is missing")
|
||||||
|
if p.options.query not in valid_queries.split():
|
||||||
|
p.parser.error("%s does not look like a valid query. Use -L for a list of valid queries" % p.options.query)
|
||||||
|
|
||||||
|
query = p.options.query
|
||||||
|
|
||||||
|
|
||||||
|
# Connect to remote storwize and run a connect
|
||||||
|
def run_query():
|
||||||
|
""" Connect to a remote storwize box and run query """
|
||||||
|
command = "ssh %s@%s %s -delim ':'" % (p.options.user, p.options.hostname, p.options.query)
|
||||||
|
if p.options.test:
|
||||||
|
command = "cat %s.txt" % (p.options.query)
|
||||||
|
return_code, stdout, stderr = runCommand(command)
|
||||||
|
|
||||||
|
if return_code != 0:
|
||||||
|
p.status(unknown)
|
||||||
|
p.add_summary("Got error %s when trying to log into remote storwize box" % return_code)
|
||||||
|
p.add_long_output("\ncommand:\n===============\n%s" % command)
|
||||||
|
p.add_long_output("\nStandard output:\n==============\n%s" % (stdout))
|
||||||
|
p.add_long_output("\nStandard stderr:\n==============\n%s" % (stderr))
|
||||||
|
p.exit()
|
||||||
|
if stderr:
|
||||||
|
p.status(unknown)
|
||||||
|
p.add_summary("Error when connecting to storwize: %s" % stderr)
|
||||||
|
p.exit()
|
||||||
|
|
||||||
|
# Parse the output of run query and return a list of "rows"
|
||||||
|
lines = stdout.splitlines()
|
||||||
|
top_line = lines.pop(0)
|
||||||
|
headers = top_line.split(':')
|
||||||
|
Row = namedtuple('Row', ' '.join(headers))
|
||||||
|
rows = []
|
||||||
|
for i in lines:
|
||||||
|
i = i.strip()
|
||||||
|
columns = i.split(':')
|
||||||
|
row = Row(*columns)
|
||||||
|
rows.append(row)
|
||||||
|
return rows
|
||||||
|
|
||||||
|
|
||||||
|
def check_lsmdiskgrp():
|
||||||
|
p.add_summary("%s diskgroups found" % (len(rows)))
|
||||||
|
p.add_metric("number of groups", len(rows))
|
||||||
|
for row in rows:
|
||||||
|
if row.status != 'online':
|
||||||
|
p.status(critical)
|
||||||
|
p.add_summary("group %s is %s." % (row.name, row.status))
|
||||||
|
p.add_long_output("%s: used: %s out of %s" % (row.name, row.used_capacity, row.capacity))
|
||||||
|
# Add a performance metric
|
||||||
|
metric_name = "%s_capacity" % row.name
|
||||||
|
p.add_metric(metric_name, value=row.used_capacity, max=row.capacity)
|
||||||
|
|
||||||
|
|
||||||
|
def check_lsdrive():
|
||||||
|
p.add_summary("%s drives found" % (len(rows)))
|
||||||
|
p.add_metric("number of drives", len(rows))
|
||||||
|
for row in rows:
|
||||||
|
if row.status != 'online':
|
||||||
|
p.status(critical)
|
||||||
|
p.add_summary("drive %s is %s" % (row.id, row.status))
|
||||||
|
|
||||||
|
|
||||||
|
def check_lsmgrp():
|
||||||
|
p.add_summary("%s groups found" % (len(rows)))
|
||||||
|
p.add_metric("number of groups", len(rows))
|
||||||
|
for row in rows:
|
||||||
|
if row.status != 'online':
|
||||||
|
p.status(critical)
|
||||||
|
p.add_summary("group %s is %s" % (row.name, row.status))
|
||||||
|
|
||||||
|
|
||||||
|
def check_lsenclosurebattery():
|
||||||
|
p.add_summary("%s batteries found" % (len(rows)))
|
||||||
|
p.add_metric("number of batteries", len(rows))
|
||||||
|
for row in rows:
|
||||||
|
if row.status != 'online':
|
||||||
|
p.status(critical)
|
||||||
|
p.add_summary("battery %s:%s is %s" % (row.enclosure_id, row.battery_id, row.status))
|
||||||
|
|
||||||
|
|
||||||
|
def check_lsenclosurecanister():
|
||||||
|
p.add_summary("%s canisters found" % (len(rows)))
|
||||||
|
p.add_metric("number of canisters", len(rows))
|
||||||
|
for row in rows:
|
||||||
|
if row.status != 'online':
|
||||||
|
p.status(critical)
|
||||||
|
p.add_summary("canister %s:%s is %s" % (row.enclosure_id, row.canister_id, row.status))
|
||||||
|
|
||||||
|
|
||||||
|
def check_lsenclosurepsu():
|
||||||
|
p.add_summary("%s psu found" % (len(rows)))
|
||||||
|
p.add_metric("number of psu", len(rows))
|
||||||
|
for row in rows:
|
||||||
|
if row.status != 'online':
|
||||||
|
p.status(critical)
|
||||||
|
p.add_summary("psu %s:%s is %s" % (row.enclosure_id, row.PSU_id, row.status))
|
||||||
|
|
||||||
|
|
||||||
|
def check_lsenclosure():
|
||||||
|
p.add_summary("%s enclosures found" % (len(rows)))
|
||||||
|
p.add_metric("number of enclosures", len(rows))
|
||||||
|
for row in rows:
|
||||||
|
if row.status != 'online':
|
||||||
|
p.status(critical)
|
||||||
|
p.add_summary("enclosure %s is %s" % (row.id, row.status))
|
||||||
|
|
||||||
|
|
||||||
|
def check_lsenclosureslot():
|
||||||
|
p.add_summary("%s slots found" % (len(rows)))
|
||||||
|
p.add_metric("number of slots", len(rows))
|
||||||
|
for row in rows:
|
||||||
|
if row.port_1_status != 'online':
|
||||||
|
p.status(critical)
|
||||||
|
p.add_summary("port1 on slot %s:%s is %s" % (row.enclosure_id, row.slot_id, row.port_1_status))
|
||||||
|
if row.port_2_status != 'online':
|
||||||
|
p.status(critical)
|
||||||
|
p.add_summary("port2 on slot %s:%s is %s" % (row.enclosure_id, row.slot_id, row.port_2_status))
|
||||||
|
|
||||||
|
|
||||||
|
def check_lsrcrelationship():
|
||||||
|
p.add_summary("%s cluster relationships found" % (len(rows)))
|
||||||
|
p.add_metric("number of relationships", len(rows))
|
||||||
|
for row in rows:
|
||||||
|
if row.state != 'consistent_synchronized':
|
||||||
|
p.status(critical)
|
||||||
|
p.add_summary("%s is %s" % (row.consistency_group_name, row.state))
|
||||||
|
|
||||||
|
|
||||||
|
def check_lsvdisk():
|
||||||
|
p.add_summary("%s disks found" % (len(rows)))
|
||||||
|
p.add_metric("number of disks", len(rows))
|
||||||
|
for row in rows:
|
||||||
|
if row.status != 'online':
|
||||||
|
p.status(critical)
|
||||||
|
p.add_summary("disk %s is %s" % (row.name, row.status))
|
||||||
|
|
||||||
|
|
||||||
|
def check_lsarray():
|
||||||
|
p.add_summary("%s arrays found" % (len(rows)))
|
||||||
|
p.add_metric("number of arrays", len(rows))
|
||||||
|
for row in rows:
|
||||||
|
if row.status != 'online':
|
||||||
|
p.add_summary("array %s is %s." % (row.mdisk_name, row.status))
|
||||||
|
p.status(critical)
|
||||||
|
if row.raid_status != 'online':
|
||||||
|
p.add_summary("array %s has raid status %s." % (row.mdisk_name, row.raid_status))
|
||||||
|
p.status(critical)
|
||||||
|
# Add some performance metrics
|
||||||
|
metric_name = row.mdisk_name + "_capacity"
|
||||||
|
p.add_metric(metric_name, value=row.capacity)
|
||||||
|
|
||||||
|
# Run our given query, and parse the output
|
||||||
|
rows = run_query()
|
||||||
|
|
||||||
|
if query == 'lsmdiskgrp':
|
||||||
|
check_lsmdiskgrp()
|
||||||
|
elif query == 'lsarray':
|
||||||
|
check_lsarray()
|
||||||
|
elif query == 'lsdrive':
|
||||||
|
check_lsdrive()
|
||||||
|
elif query == 'lsvdisk':
|
||||||
|
check_lsvdisk()
|
||||||
|
elif query == 'lsmgrp':
|
||||||
|
check_lsmgrp()
|
||||||
|
elif query == 'lsenclosure':
|
||||||
|
check_lsenclosure()
|
||||||
|
elif query == 'lsenclosurebattery':
|
||||||
|
check_lsenclosurebattery()
|
||||||
|
elif query == 'lsenclosurecanister':
|
||||||
|
check_lsenclosurecanister()
|
||||||
|
elif query == 'lsenclosurepsu':
|
||||||
|
check_lsenclosurepsu()
|
||||||
|
elif query == 'lsrcrelationship':
|
||||||
|
check_lsrcrelationship()
|
||||||
|
elif query == 'lsenclosureslot':
|
||||||
|
check_lsenclosureslot()
|
||||||
|
else:
|
||||||
|
p.status(unknown)
|
||||||
|
p.add_summary("unsupported query: %s. See -L for list of valid queries" % query)
|
||||||
|
p.exit()
|
||||||
|
|
||||||
|
# Check metrics and exit
|
||||||
|
p.check_all_metrics()
|
||||||
|
p.exit()
|
||||||
50
check_storwize/nagios-okplugin-check_storwize.spec
Normal file
50
check_storwize/nagios-okplugin-check_storwize.spec
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
%define debug_package %{nil}
|
||||||
|
%define plugin check_storwize
|
||||||
|
%define packager Pall Sigurdsson <palli@opensource.is>
|
||||||
|
|
||||||
|
Summary: A Nagios plugin to check status of a storwize disk array
|
||||||
|
Name: nagios-okplugin-%{plugin}
|
||||||
|
Version: 1.0.0
|
||||||
|
Release: 1%{?dist}
|
||||||
|
License: GPLv3+
|
||||||
|
Group: Applications/System
|
||||||
|
URL: https://github.com/opinkerfi/nagios-plugins/tree/master/%{plugin}
|
||||||
|
Source0: https://github.com/opinkerfi/nagios-plugins/tree/master/%{plugin}/releases/%{name}-%{version}.tar.gz
|
||||||
|
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||||
|
Packager: %{packager}
|
||||||
|
BuildArch: noarch
|
||||||
|
Requires: pynag
|
||||||
|
|
||||||
|
|
||||||
|
%description
|
||||||
|
Checks updates via PackageKit and can notify on various different situations
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%setup -q
|
||||||
|
|
||||||
|
%build
|
||||||
|
|
||||||
|
|
||||||
|
%install
|
||||||
|
rm -rf %{buildroot}
|
||||||
|
install -D -p -m 0755 %{plugin} %{buildroot}%{_libdir}/nagios/plugins/%{plugin}
|
||||||
|
mkdir -p %{buildroot}%{_sysconfdir}/nrpe.d
|
||||||
|
sed "s^/usr/lib64^%{_libdir}^g" nrpe.d/%{plugin}.cfg > %{buildroot}%{_sysconfdir}/nrpe.d/%{plugin}.cfg
|
||||||
|
# Temporary fix for selinux
|
||||||
|
chcon system_u:object_r:nagios_unconfined_plugin_exec_t:s0 %{plugin} %{buildroot}%{_libdir}/nagios/plugins/%{plugin}
|
||||||
|
|
||||||
|
%clean
|
||||||
|
rm -rf %{buildroot}
|
||||||
|
|
||||||
|
%post
|
||||||
|
/sbin/service nrpe status &> /dev/null && /sbin/service nrpe reload || :
|
||||||
|
|
||||||
|
%files
|
||||||
|
%defattr(-,root,root,-)
|
||||||
|
%doc README.md
|
||||||
|
%{_libdir}/nagios/plugins/*
|
||||||
|
%config(noreplace) %{_sysconfdir}/nrpe.d/%{plugin}.cfg
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
* Fri Dec 6 2013 Pall Sigurdsson 1.0.0-1
|
||||||
|
- Initial Packaging
|
||||||
33
check_storwize/test.sh
Normal file
33
check_storwize/test.sh
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
CURRENT_PATH=`pwd`
|
||||||
|
cd $CURRENT_PATH/tests/ok
|
||||||
|
tests=`echo * | sed 's/.txt//g'`
|
||||||
|
for i in $tests ; do
|
||||||
|
command="python $CURRENT_PATH/check_storwize.py --test -H testhost -U nagios -Q $i"
|
||||||
|
$command > /dev/null 2>&1
|
||||||
|
RESULT=$?
|
||||||
|
if [ $RESULT -ne 0 ]; then
|
||||||
|
echo "FAIL"
|
||||||
|
echo "cd `pwd`"
|
||||||
|
echo "Command: $command"
|
||||||
|
else
|
||||||
|
echo "$i working as expected"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
cd $CURRENT_PATH/tests/critical
|
||||||
|
tests=`echo * | sed 's/.txt//g'`
|
||||||
|
for i in $tests ; do
|
||||||
|
command="python $CURRENT_PATH/check_storwize.py --test -H testhost -U nagios -Q $i"
|
||||||
|
$command > /dev/null 2>&1
|
||||||
|
RESULT=$?
|
||||||
|
if [ $RESULT -ne 2 ]; then
|
||||||
|
echo "FAIL"
|
||||||
|
echo "cd `pwd`"
|
||||||
|
echo "Command: $command"
|
||||||
|
else
|
||||||
|
echo "$i working as expected"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
Summary: A Nagios plugin to check uptime of a remote host via NRPE
|
Summary: A Nagios plugin to check uptime of a remote host via NRPE
|
||||||
Name: nagios-okplugin-check_uptime
|
Name: nagios-okplugin-check_uptime
|
||||||
Version: 1.0.1
|
Version: 1.0.2
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
License: GPLv2+
|
License: GPLv2+
|
||||||
Group: Applications/System
|
Group: Applications/System
|
||||||
@@ -41,6 +41,9 @@ rm -rf %{buildroot}
|
|||||||
/etc/nrpe.d/check_uptime.cfg
|
/etc/nrpe.d/check_uptime.cfg
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Dec 30 2013 Tomas Edwardsson <tommi@tommi.org> 1.0.2-1
|
||||||
|
- Updated tag for build with newer tito
|
||||||
|
|
||||||
* Mon Mar 12 2012 Pall Sigurdsson <palli@opensource.is> 1.0.1-1
|
* Mon Mar 12 2012 Pall Sigurdsson <palli@opensource.is> 1.0.1-1
|
||||||
- new package built with tito
|
- new package built with tito
|
||||||
|
|
||||||
|
|||||||
46
nagios-okplugin-common/nagios-okplugin-common.spec
Normal file
46
nagios-okplugin-common/nagios-okplugin-common.spec
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
%define debug_package %{nil}
|
||||||
|
|
||||||
|
Summary: A common package for the okplugin suite
|
||||||
|
Name: nagios-okplugin-common
|
||||||
|
Version: 1.2
|
||||||
|
Release: 1%{?dist}
|
||||||
|
License: GPLv2+
|
||||||
|
Group: Applications/System
|
||||||
|
URL: https://github.com/opinkerfi/nagios-plugins/
|
||||||
|
Source0: https://github.com/opinkerfi/nagios-plugins/archive/%{name}-%{version}-%{release}.tar.gz
|
||||||
|
Requires: nrpe
|
||||||
|
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||||
|
Packager: Tomas Edwardsson <tommi@ok.is>
|
||||||
|
BuildArch: noarch
|
||||||
|
|
||||||
|
%description
|
||||||
|
Common utilities for okplugins
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%setup -q
|
||||||
|
|
||||||
|
%build
|
||||||
|
|
||||||
|
|
||||||
|
%install
|
||||||
|
rm -rf %{buildroot}
|
||||||
|
mkdir -m 0770 -p %{buildroot}%{_sharedstatedir}/nagios-okplugin
|
||||||
|
|
||||||
|
%clean
|
||||||
|
rm -rf %{buildroot}
|
||||||
|
|
||||||
|
%post
|
||||||
|
|
||||||
|
%files
|
||||||
|
%defattr(-,root,root,-)
|
||||||
|
%dir %attr(0770, nrpe, nrpe) %{_sharedstatedir}/nagios-okplugin
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
* Mon Jan 20 2014 Tomas Edwardsson <tommi@tommi.org> 1.2-1
|
||||||
|
-
|
||||||
|
|
||||||
|
* Mon Jan 20 2014 Tomas Edwardsson <tommi@tommi.org> 1.1-1
|
||||||
|
- new package built with tito
|
||||||
|
|
||||||
|
* Mon Jan 20 2014 Tomas Edwardsson <tommi@tommi.org> 1.0-1
|
||||||
|
- Initial build
|
||||||
1
rel-eng/packages/nagios-okplugin-check_cpu
Normal file
1
rel-eng/packages/nagios-okplugin-check_cpu
Normal file
@@ -0,0 +1 @@
|
|||||||
|
1.1-1 check_cpu.py/
|
||||||
1
rel-eng/packages/nagios-okplugin-check_msa_hardware
Normal file
1
rel-eng/packages/nagios-okplugin-check_msa_hardware
Normal file
@@ -0,0 +1 @@
|
|||||||
|
1.0.5-1 check_msa_hardware-pl/
|
||||||
@@ -1 +1 @@
|
|||||||
1.0.1-1 check_uptime/
|
1.0.2-1 check_uptime/
|
||||||
|
|||||||
1
rel-eng/packages/nagios-okplugin-common
Normal file
1
rel-eng/packages/nagios-okplugin-common
Normal file
@@ -0,0 +1 @@
|
|||||||
|
1.2-1 nagios-okplugin-common/
|
||||||
@@ -1,36 +1,12 @@
|
|||||||
# Fedora FC18
|
# Fedora FC20
|
||||||
[test-fc18-x86_64]
|
[test-fc20-x86_64]
|
||||||
releaser = tito.release.YumRepoReleaser
|
releaser = tito.release.YumRepoReleaser
|
||||||
builder = tito.builder.MockBuilder
|
builder = tito.builder.MockBuilder
|
||||||
builder.mock = fedora-18-x86_64
|
builder.mock = fedora-20-x86_64
|
||||||
builder.test = 1
|
builder.test = 1
|
||||||
rsync = tito@opensource.is:/var/www/sites/opensource.ok.is/repo/testing/fedora18/x86_64/
|
rsync = tito@opensource.is:/var/www/sites/opensource.ok.is/repo/testing/fedora20/x86_64/
|
||||||
|
|
||||||
|
# RHEL 6 Production
|
||||||
[production-fc18-x86_64]
|
|
||||||
releaser = tito.release.YumRepoReleaser
|
|
||||||
builder = tito.builder.MockBuilder
|
|
||||||
builder.mock = fedora-18-x86_64
|
|
||||||
rsync = tito@opensource.is:/var/www/sites/opensource.ok.is/repo/fedora18/x86_64/
|
|
||||||
|
|
||||||
# Fedora FC17
|
|
||||||
[test-fc17-x86_64]
|
|
||||||
releaser = tito.release.YumRepoReleaser
|
|
||||||
builder = tito.builder.MockBuilder
|
|
||||||
builder.mock = fedora-17-x86_64
|
|
||||||
builder.test = 1
|
|
||||||
rsync = tito@opensource.is:/var/www/sites/opensource.ok.is/repo/testing/fedora17/x86_64/
|
|
||||||
|
|
||||||
|
|
||||||
[production-fc17-x86_64]
|
|
||||||
releaser = tito.release.YumRepoReleaser
|
|
||||||
builder = tito.builder.MockBuilder
|
|
||||||
builder.mock = fedora-17-x86_64
|
|
||||||
rsync = tito@opensource.is:/var/www/sites/opensource.ok.is/repo/fedora17/x86_64/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# RHEL 6
|
|
||||||
[production-el6-x86_64]
|
[production-el6-x86_64]
|
||||||
releaser = tito.release.YumRepoReleaser
|
releaser = tito.release.YumRepoReleaser
|
||||||
builder = tito.builder.MockBuilder
|
builder = tito.builder.MockBuilder
|
||||||
|
|||||||
Reference in New Issue
Block a user