1
0
mirror of https://github.com/opinkerfi/nagios-plugins.git synced 2026-02-13 02:20:57 +01:00

Compare commits

...

125 Commits

Author SHA1 Message Date
gardart
892f9c267e Lagfæring á spec skrá vegna tito 2016-12-21 13:20:51 +00:00
Richard Allen
3501677f20 Initial commit of check_firewall_active (#28)
* Initial commit of check_firewall_active
* Fixing things found in the review.  Started work on rpm spec file
* Fixing spec a bit
* Fixing url
2016-12-21 12:40:29 +00:00
hakong
6726f614ad Merge pull request #25 from FlorianHeigl/patch-1
make the output compliant with Nagios
2016-10-02 18:30:54 +00:00
Florian Heigl
ee5adc2363 make the output compliant with Nagios
First, use the proper keywords OK/WARN/UNKNOWN so the check follows the plugin guidelines
Second, to not confuse things, the UNKNOWN case would give multiline output. The first bit goes to the status line, the second to the extended status info.

I tried to not mess around, but I also made SELinux caps :-)
2016-10-02 20:25:42 +02:00
Pall Sigurdsson
7dc3b57582 Merge pull request #19 from TJM/issue-18-ipa-busy-replica
Issue #18 - Replica Busy is not critical
2015-10-17 22:49:26 +11:00
Pall Sigurdsson
688e8b8412 Merge pull request #20 from uakfdotb/patch-1
Fix "critical HDD detection" bug in check_hparray
2015-10-17 22:47:04 +11:00
uakfdotb
1ccc433779 Use $HPACUCLI 2015-10-14 19:24:53 -04:00
uakfdotb
ee05a4f24a Fix critical HDD detection bug in check_hparray 2015-10-14 16:23:12 -04:00
Tommy McNeely
871c8348fa Issue #18 - Replica Busy is not critical
Changed the plugin.status to allow for status 0 or status 1.
2015-10-01 15:45:14 -06:00
Pall Sigurdsson
944d47e18e Merge branch 'master' of github.com:opinkerfi/nagios-plugins 2014-11-16 15:02:17 +01:00
Pall Sigurdsson
40ba14c4cb check_hpacucli - critical on failed logical drives 2014-11-16 15:01:41 +01:00
Tomas Edwardsson
f986b73474 Automatic commit of package [nagios-okplugin-check_disks] release [1.0.7-1]. 2014-10-29 23:45:26 +00:00
Tomas Edwardsson
c8e7fbbff8 Fix invalid regex if mountpoint has . in path 2014-10-29 23:42:42 +00:00
Tomas Edwardsson
f23ac92b64 Automatic commit of package [nagios-okplugin-check_hpasm] release [4.1.4-1]. 2014-10-03 10:27:52 +00:00
Tomas Edwardsson
7ab36cbc66 Added rhel7 releaser 2014-09-03 07:57:38 +00:00
Tomas Edwardsson
bf0edd899b Regex filtering broke disk checks 2014-08-28 11:33:30 +00:00
Tomas Edwardsson
9060a171f0 Revert to working copy. 2014-06-26 13:06:45 +00:00
Tomas Edwardsson
1420e93c5c Added lvm mirror checks 2014-06-26 13:04:50 +00:00
Tomas Edwardsson
cbcaa14997 Add metrics without updates for known types
Closes #13
2014-06-21 16:51:15 +00:00
Tomas Edwardsson
03f7389842 Automatic commit of package [nagios-okplugin-apc] release [2.1.2-1]. 2014-06-09 22:45:32 +00:00
Tomas Edwardsson
f186de5585 Disable embedded perl 2014-06-09 22:42:22 +00:00
Tomas Edwardsson
c22b89893d hpacucli Bad permissions on sudoers file 2014-05-15 11:24:48 +00:00
Tomas Edwardsson
d3f75ec93a Changed release priority for rhel6 test build 2014-05-15 11:23:11 +00:00
Tomas Edwardsson
9862b3c0d9 hpasm invalid nrpe check command name 2014-05-15 11:22:13 +00:00
Tomas Edwardsson
790619d820 Automatic commit of package [nagios-okplugin-check_hpasm] release [4.1.3-1]. 2014-05-15 11:13:53 +00:00
Tomas Edwardsson
a743def0c8 hpacucli Missing !requiretty for sudo 2014-05-15 11:09:52 +00:00
Tomas Edwardsson
c414e17b30 Added prodcution builder for fc20 2014-04-13 18:31:36 +00:00
Tomas Edwardsson
b481aadbd5 Automatic commit of package [nagios-okplugin-check_uptime] release [1.0.3-1]. 2014-04-13 18:26:25 +00:00
Tomas Edwardsson
2049fbd692 Automatic commit of package [nagios-okplugin-ipa] release [0.0.4-1]. 2014-04-04 15:19:32 +00:00
Tomas Edwardsson
5f604b852f Automatic commit of package [nagios-okplugin-check_time] release [1.0.3-1]. 2014-04-04 13:10:38 +00:00
Tomas Edwardsson
e5772ab336 check_time - Added requirement for bc 2014-04-04 13:07:33 +00:00
Tomas Edwardsson
e5498e1554 okc-get_network_stat, Bad nrpe command name 2014-04-02 15:57:58 +00:00
Tomas Edwardsson
7d9ba339bc Automatic commit of package [nagios-okplugin-get_network_stat] release [1.0.1-1]. 2014-04-02 15:34:19 +00:00
Tomas Edwardsson
37d504a039 Added okc-get_network_stat 2014-04-02 15:34:07 +00:00
Tomas Edwardsson
e7af0e4098 Automatic commit of package [nagios-okplugin-check_disks] release [1.0.6-1]. 2014-03-25 17:57:03 +00:00
Tomas Edwardsson
6c126130cc Automatic commit of package [nagios-okplugin-check_disks] release [1.0.5-1]. 2014-03-25 14:23:28 +00:00
Tomas Edwardsson
f0968997e4 Automatic commit of package [nagios-okplugin-check_time] release [1.0.2-1]. 2014-03-25 12:08:35 +00:00
Tomas Edwardsson
95693e3c73 Automatic commit of package [nagios-okplugin-apc] release [2.1.1-1]. 2014-03-20 08:10:31 +00:00
Tomas Edwardsson
55daf8f4c9 Rework hostname detection to use local
Removed socket.gethostname to discover own hostname instead using the
local flag which is output from /usr/sbin/clustat -fx node definitions.
The gethostname does not always match the cluster node name which would
make the check fail.
2014-03-07 11:25:24 +00:00
Tomas Edwardsson
d11d29185a Remove debug print 2014-03-07 11:23:28 +00:00
Pall Sigurdsson
06194c84cc Automatic commit of package [nagios-okplugin-check_ibm_bladecenter] release [4-1]. 2014-02-21 11:10:55 +00:00
Pall Sigurdsson
184d7d3b4a Merge branch 'master' of github.com:opinkerfi/nagios-plugins 2014-02-21 11:07:39 +00:00
Pall Sigurdsson
1574cd13d3 ibm_bladecenter - another firmware bug workaround 2014-02-21 11:06:00 +00:00
Pall Sigurdsson
b0b55dcd3e pep8 fixes 2014-02-21 10:52:39 +00:00
Pall Sigurdsson
b96e973e60 Fix workaround for firmware bug
Blade chassis will sometimes report critical error that
there are no critical or warning events.

Fix plugin so it properly works around the issue.
2014-02-21 10:50:32 +00:00
Pall Sigurdsson
51b75943cf Automatic commit of package [nagios-okplugin-cifs] release [1.1-1]. 2014-02-20 18:11:40 +00:00
Pall Sigurdsson
8ff1cf84d0 Automatic commit of package [nagios-okplugin-check_yum] release [1-1]. 2014-02-20 18:09:38 +00:00
Pall Sigurdsson
5cb19c072e Automatic commit of package [nagios-plugins-check_cpu] release [2-1]. 2014-02-20 18:08:20 +00:00
Pall Sigurdsson
6db73d28d6 Automatic commit of package [nagios-okplugin-check_ironport] release [2-1]. 2014-02-20 18:07:50 +00:00
Pall Sigurdsson
5ba61f91b2 Automatic commit of package [nagios-okplugin-check_eva] release [2-1]. 2014-02-20 18:07:02 +00:00
Pall Sigurdsson
8f6faa8b59 Automatic commit of package [nagios-okplugin-check_snmp] release [2-1]. 2014-02-20 18:06:46 +00:00
Pall Sigurdsson
574538883c Automatic commit of package [nagios-okplugin-check_rhcs] release [1-1]. 2014-02-20 18:06:12 +00:00
Pall Sigurdsson
245ad9ba21 Automatic commit of package [nagios-okplugin-check_ibm_bladecenter] release [2-1]. 2014-02-20 18:05:51 +00:00
Pall Sigurdsson
854b08c601 Automatic commit of package [nagios-okplugin-check_hpacucli] release [2-1]. 2014-02-20 18:05:17 +00:00
Pall Sigurdsson
55ea04bd73 Automatic commit of package [nagios-okplugin-check_dataprotector] release [2-1]. 2014-02-20 18:04:49 +00:00
Pall Sigurdsson
09dcc39f94 Automatic commit of package [nagios-okplugin-brocade] release [0.0.5-1]. 2014-02-20 18:03:50 +00:00
Pall Sigurdsson
48d0a92707 Automatic commit of package [nagios-okplugin-bond] release [0.0.4-1]. 2014-02-20 18:03:15 +00:00
Pall Sigurdsson
e9222eb215 Automatic commit of package [nagios-okplugin-mailblacklist] release [1.1-1]. 2014-02-20 18:01:51 +00:00
Pall Sigurdsson
e64d51ebc3 remove check_cpu and okplugin-common 2014-02-20 17:58:10 +00:00
Pall Sigurdsson
5d94c9d3a2 Automatic commit of package [nagios-plugins-check_selinux] release [1.3-1]. 2014-02-20 17:56:25 +00:00
Pall Sigurdsson
22e4293db7 Merge branch 'master' of github.com:opinkerfi/nagios-plugins 2014-02-18 15:57:42 +00:00
Pall Sigurdsson
9b89a3d998 update rel-eng for fedora20 repos 2014-02-18 15:57:09 +00:00
Pall Sigurdsson
553a182dd1 Merge pull request #10 from gitmopp/patch-2
bug in for loop. Looped only once
2014-02-04 05:14:39 -08:00
Pall Sigurdsson
9501bef37b Merge pull request #9 from gitmopp/patch-1
Fixed output to be more compatible
2014-02-04 05:14:24 -08:00
gitmopp
b672f6f508 bug in for loop. Looped only once 2014-01-31 15:06:04 +01:00
gitmopp
04d25281e3 Fixed output to be more compatible
My SSSU 10.1.0 reports "SSSU for HP P6000 Command View" instead of "SSSU for HP StorageWorks Command View EVA". I fixed the output to just check for SSSU for HP
2014-01-30 17:36:33 +01:00
Pall Sigurdsson
9b2474fb49 Automatic commit of package [nagios-okplugin-check_msa_hardware] release [1.0.5-1]. 2014-01-30 16:07:10 +00:00
Pall Sigurdsson
156459046c Automatic commit of package [nagios-okplugin-check_msa_hardware] release [1.0.4-1]. 2014-01-30 16:04:50 +00:00
Your Name
a93d887721 README.md added 2014-01-30 15:53:12 +00:00
Your Name
2dbec06282 nrpe.d added to check_msa 2014-01-30 15:47:04 +00:00
Your Name
734e7d5596 rename check_msa_hardware-pl 2014-01-30 15:33:30 +00:00
Pall Sigurdsson
623c1d5159 Automatic commit of package [nagios-okplugin-check_msa_hardware] release [1.0.3-1]. 2014-01-30 11:32:35 +00:00
Pall Sigurdsson
19312f9b55 msa packaging 2014-01-30 11:32:31 +00:00
Pall Sigurdsson
c1005cb911 Merge branch 'master' of github.com:opinkerfi/nagios-plugins 2014-01-27 09:42:48 +00:00
Pall Sigurdsson
f5d4cde8b5 spec file for check_msa_hardware-pl added 2014-01-27 09:42:40 +00:00
Tomas Edwardsson
067f58f52e Added returning of a 5 second sample in perfdata 2014-01-20 17:51:04 +00:00
Tomas Edwardsson
5d0df0bfe9 Check would fail on first run 2014-01-20 11:41:11 +00:00
Tomas Edwardsson
735b2795d8 Removed unneeded directory for state 2014-01-20 11:05:52 +00:00
Tomas Edwardsson
5593391a3b Automatic commit of package [nagios-okplugin-check_cpu] release [1.1-1]. 2014-01-20 11:05:13 +00:00
Tomas Edwardsson
ee4b10b291 Added nagios-okplugin-check_cpu 2014-01-20 11:05:01 +00:00
Tomas Edwardsson
b10d555e52 Invalid directory fixed 2014-01-20 10:14:52 +00:00
Tomas Edwardsson
971afc97f7 Automatic commit of package [nagios-okplugin-common] release [1.2-1]. 2014-01-20 09:27:39 +00:00
Tomas Edwardsson
fcf90cae3e Removed invalid file reference 2014-01-20 09:26:36 +00:00
Tomas Edwardsson
73b632a828 Automatic commit of package [nagios-okplugin-common] release [1.1-1]. 2014-01-20 09:20:43 +00:00
Tomas Edwardsson
b375ae66ee Added nagios-okplugin-common 2014-01-20 09:20:16 +00:00
Tomas Edwardsson
3606e03170 Automatic commit of package [nagios-okplugin-check_uptime] release [1.0.2-1]. 2013-12-30 20:40:11 +00:00
Tomas Edwardsson
63f285a037 Added Fedora 20 2013-12-30 20:31:22 +00:00
Tomas Edwardsson
be7032f4e4 Added fedora 19 2013-12-30 20:30:35 +00:00
Pall Sigurdsson
d259894a9d spec file added 2013-12-06 15:56:44 +00:00
Pall Sigurdsson
6d0ce2c869 Allow -L without -H provided as well 2013-12-06 15:53:59 +00:00
Pall Sigurdsson
4aae5f6327 README updated 2013-12-06 15:53:42 +00:00
Pall Sigurdsson
2112847349 test script added 2013-12-06 15:49:07 +00:00
Pall Sigurdsson
f382acb1a6 lsmgrp added 2013-12-06 15:48:55 +00:00
Pall Sigurdsson
d7efe24a34 fix typos 2013-12-06 14:19:23 +00:00
Pall Sigurdsson
72f2c0de16 added support for more queries 2013-12-06 14:16:57 +00:00
Pall Sigurdsson
7c41c09b2f enclosure battery support added 2013-12-06 13:58:44 +00:00
Pall Sigurdsson
f87963f554 switched to semicolon format. lsdrive added 2013-12-06 13:48:39 +00:00
Pall Sigurdsson
38a207065e Refactor - support for lsdrive added 2013-11-19 15:59:36 +00:00
Pall Sigurdsson
831156308b check_storwize.py added
Experimental!

replaces check_storwize.sh

only lsarray and lsmdiskgrp are supported for now
2013-11-19 11:18:02 +00:00
Tomas Edwardsson
356bb2c762 Renamed to markdown 2013-10-27 23:05:51 +00:00
Tomas Edwardsson
bc15b653b1 Added examples and documentation 2013-10-27 22:57:43 +00:00
Tomas Edwardsson
814426a5a8 Automatic commit of package [nagios-okplugin-check_package_updates] release [0.0.7-1]. 2013-09-13 13:27:49 +00:00
Tomas Edwardsson
2f69dd02cb Merge pull request #8 from opinkerfi/refactor-check_package_updates
Refactor check package updates
2013-09-13 05:28:56 -07:00
Pall Sigurdsson
25b04e822e check_package_updates - minor refactor
Few very minor readability tricks

* replacing the typical "if x not in list: list[x] = ..."  pattern with defaultdict
* replace string.split('\n') with splitlines()
2013-09-13 11:51:16 +00:00
Pall Sigurdsson
f3909a08f6 check_package_updates - fix inconsistent tab/space 2013-09-13 11:43:04 +00:00
Tomas Edwardsson
53ec813478 Removed obsoletes and thresholds 2013-09-13 10:56:51 +00:00
Pall Sigurdsson
46024baa26 check_eva new Make sure --timeout is an integer 2013-09-12 09:14:58 +00:00
Pall Sigurdsson
3d867d84c0 check_eva new command line option --timeout 2013-09-11 15:14:50 +00:00
Pall Sigurdsson
6562732a91 check_eva Fix undefined fix typos 2013-09-11 15:04:52 +00:00
Pall Sigurdsson
c524ee0046 Merge branch 'master' of github.com:opinkerfi/nagios-plugins 2013-09-02 15:14:22 +00:00
Pall Sigurdsson
9907356c39 PEP8 cleanup 2013-09-02 15:14:07 +00:00
Pall Sigurdsson
39f2413957 merged 2013-09-02 15:02:51 +00:00
Pall Sigurdsson
840ef78a7b New plugin - check_other 2013-09-02 10:59:27 +00:00
Pall Sigurdsson
c6cb2b634d check_eva - minor bugfixes 2013-09-02 10:50:48 +00:00
Pall Sigurdsson
92a6643a4b New plugin - check_other 2013-09-02 10:50:00 +00:00
Pall Sigurdsson
a21b3adf43 check_eva.py more code cleanup with pycharm inspections 2013-08-21 14:08:41 +00:00
Pall Sigurdsson
39b7d6a7d9 check_eva.py - Make code more readable 2013-08-21 13:55:57 +00:00
Pall Sigurdsson
598a525ac8 convert from tabs to spaces 2013-08-21 13:50:34 +00:00
Pall Sigurdsson
ceb039eb45 check_eva - fix mixed tab/spaces 2013-08-21 13:48:56 +00:00
Tomas Edwardsson
5ab6e198ec Merge pull request #5 from argusb/patch-1
Update check_eva.py, looking good, merged. Thanks!
2013-08-12 08:05:47 -07:00
argusb
b0663e0495 Update check_eva.py
Change parsing of SSSU output header to make it work with Command View EVA >= 10.
2013-08-12 14:40:23 +02:00
Tomas Edwardsson
a01af47d86 Removed Draft, should be working pretty good 2013-07-17 07:59:40 +00:00
Tomas Edwardsson
30c4b15700 Added --legacy to default since that is the default format 2013-07-16 22:42:44 +00:00
Tomas Edwardsson
1099ad9c02 Added nrpe reload since moving from check_yum needs it 2013-07-16 22:24:47 +00:00
Tomas Edwardsson
677ec90e3e Added obsolete for okplugin check_updates
nagios-okplugin-check_updates was the wrong name for
nagios-okplugin-check_package_updates. It was renamed but some might
have installed check_updates in the mean time.
2013-07-16 22:22:36 +00:00
83 changed files with 2465 additions and 1128 deletions

View File

@@ -1,4 +1,5 @@
#!/usr/bin/perl #!/usr/bin/perl
# nagios: -epn
# #
# check_apcext.pl - APC Extra gear monitoring plugin for Nagios # check_apcext.pl - APC Extra gear monitoring plugin for Nagios
# 05.02.07 Paul Venezia # 05.02.07 Paul Venezia

View File

@@ -2,7 +2,7 @@
Summary: A Nagios plugin to check APC devices Summary: A Nagios plugin to check APC devices
Name: nagios-okplugin-apc Name: nagios-okplugin-apc
Version: 2.1.0 Version: 2.1.2
Release: 1%{?dist} Release: 1%{?dist}
License: GPLv2+ License: GPLv2+
Group: Applications/System Group: Applications/System
@@ -38,6 +38,15 @@ rm -rf %{buildroot}
%{_libdir}/nagios/plugins/* %{_libdir}/nagios/plugins/*
%changelog %changelog
* Mon Jun 09 2014 Tomas Edwardsson <tommi@tommi.org> 2.1.2-1
- Disable embedded perl (tommi@tommi.org)
* Thu Mar 20 2014 Tomas Edwardsson <tommi@tommi.org> 2.1.1-1
- Merge github.com:opinkerfi/misc (palli@opensource.is)
- Use the right value for the job nbmstemp (tommi@tommi.org)
- Fixed metric conversion for all mibs (tommi@opensource.is)
- Added fahrenheit to celsius conversion (tommi@tommi.org)
* Thu Aug 23 2012 Pall Sigurdsson <palli@opensource.is> 2.1.0-1 * Thu Aug 23 2012 Pall Sigurdsson <palli@opensource.is> 2.1.0-1
- Version number bumped to 2.1.0 (palli@opensource.is) - Version number bumped to 2.1.0 (palli@opensource.is)
- Added noarch buildarch (tommi@tommi.org) - Added noarch buildarch (tommi@tommi.org)

View File

@@ -2,7 +2,7 @@
Summary: A Nagios plugin to check SMTP blacklists Summary: A Nagios plugin to check SMTP blacklists
Name: nagios-okplugin-mailblacklist Name: nagios-okplugin-mailblacklist
Version: 1.0 Version: 1.1
Release: 1%{?dist} Release: 1%{?dist}
License: GPLv2+ License: GPLv2+
Group: Applications/System Group: Applications/System
@@ -38,6 +38,9 @@ rm -rf %{buildroot}
%{_libdir}/nagios/plugins/* %{_libdir}/nagios/plugins/*
%changelog %changelog
* Thu Feb 20 2014 Pall Sigurdsson <palli@opensource.is> 1.1-1
-
* Thu Aug 23 2012 Pall Sigurdsson <palli@opensource.is> 1.0-1 * Thu Aug 23 2012 Pall Sigurdsson <palli@opensource.is> 1.0-1
- Updated buildarch to noarch (tommi@tommi.org) - Updated buildarch to noarch (tommi@tommi.org)

View File

@@ -2,7 +2,7 @@
Summary: A Nagios plugin to check network bond devices Summary: A Nagios plugin to check network bond devices
Name: nagios-okplugin-bond Name: nagios-okplugin-bond
Version: 0.0.3 Version: 0.0.4
Release: 1%{?dist} Release: 1%{?dist}
License: GPLv2+ License: GPLv2+
Group: Applications/System Group: Applications/System
@@ -40,6 +40,10 @@ rm -rf %{buildroot}
%config(noreplace) %{_sysconfdir}/nrpe.d/check_bond.cfg %config(noreplace) %{_sysconfdir}/nrpe.d/check_bond.cfg
%changelog %changelog
* Thu Feb 20 2014 Pall Sigurdsson <palli@opensource.is> 0.0.4-1
- Merge pull request #5 from pallvalmundsson/check_yum_security_patch (palli-
github@minor.is)
* Wed Mar 13 2013 Pall Sigurdsson <palli@opensource.is> 0.0.3-1 * Wed Mar 13 2013 Pall Sigurdsson <palli@opensource.is> 0.0.3-1
- -

View File

@@ -2,7 +2,7 @@
Summary: A Nagios plugin to check Brocade devices Summary: A Nagios plugin to check Brocade devices
Name: nagios-okplugin-brocade Name: nagios-okplugin-brocade
Version: 0.0.4 Version: 0.0.5
Release: 1%{?dist} Release: 1%{?dist}
License: GPLv2+ License: GPLv2+
Group: Applications/System Group: Applications/System
@@ -36,6 +36,9 @@ rm -rf %{buildroot}
%{_libdir}/nagios/plugins/* %{_libdir}/nagios/plugins/*
%changelog %changelog
* Thu Feb 20 2014 Pall Sigurdsson <palli@opensource.is> 0.0.5-1
-
* Mon Mar 12 2012 Pall Sigurdsson <palli@opensource.is> 0.0.4-1 * Mon Mar 12 2012 Pall Sigurdsson <palli@opensource.is> 0.0.4-1
- new package built with tito - new package built with tito

View File

@@ -2,7 +2,7 @@
Summary: A Nagios plugin to check CIFS shares Summary: A Nagios plugin to check CIFS shares
Name: nagios-okplugin-cifs Name: nagios-okplugin-cifs
Version: 1.0 Version: 1.1
Release: 1%{?dist} Release: 1%{?dist}
License: GPLv2+ License: GPLv2+
Group: Applications/System Group: Applications/System
@@ -39,6 +39,9 @@ rm -rf %{buildroot}
%{_libdir}/nagios/plugins/* %{_libdir}/nagios/plugins/*
%changelog %changelog
* Thu Feb 20 2014 Pall Sigurdsson <palli@opensource.is> 1.1-1
- Merge github.com:opinkerfi/misc (palli@opensource.is)
* Thu Aug 23 2012 Pall Sigurdsson <palli@opensource.is> 1.0-1 * Thu Aug 23 2012 Pall Sigurdsson <palli@opensource.is> 1.0-1
- version number of scripts bumped (palli@opensource.is) - version number of scripts bumped (palli@opensource.is)
- Updates buildarch to noarch (tommi@tommi.org) - Updates buildarch to noarch (tommi@tommi.org)

View 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

View File

@@ -0,0 +1 @@
command[okplugin_check_cpu]=/usr/lib/nagios/plugins/okplugin_check_cpu

View File

@@ -0,0 +1,131 @@
#!/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:
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

View File

@@ -2,7 +2,7 @@
Summary: A Nagios plugin to check CPU on Linux servers Summary: A Nagios plugin to check CPU on Linux servers
Name: nagios-plugins-check_cpu Name: nagios-plugins-check_cpu
Version: 1.0 Version: 2
Release: 1%{?dist} Release: 1%{?dist}
License: GPLv2+ License: GPLv2+
Group: Applications/System Group: Applications/System
@@ -45,6 +45,11 @@ rm -rf %{buildroot}
%changelog %changelog
* Thu Feb 20 2014 Pall Sigurdsson <palli@opensource.is> 2-1
- Added nrpe reload to post section (tommi@tommi.org)
- Merge github.com:opinkerfi/misc (palli@opensource.is)
- Added dependency on bc (palli@opensource.is)
* Thu Aug 23 2012 Pall Sigurdsson <palli@opensource.is> 1.0-1 * Thu Aug 23 2012 Pall Sigurdsson <palli@opensource.is> 1.0-1
- Version number bumped - Version number bumped
- Updates buildarch to noarch (tommi@tommi.org) - Updates buildarch to noarch (tommi@tommi.org)

View File

@@ -2,7 +2,7 @@
Summary: Nagios Plugins to monitor HP Dataprotector Summary: Nagios Plugins to monitor HP Dataprotector
Name: nagios-okplugin-check_dataprotector Name: nagios-okplugin-check_dataprotector
Version: 1.0.1 Version: 2
Release: 1%{?dist} Release: 1%{?dist}
License: GPLv2+ License: GPLv2+
Group: Applications/System Group: Applications/System
@@ -45,6 +45,10 @@ rm -rf %{buildroot}
/etc/nrpe.d/check_dataprotector.cfg /etc/nrpe.d/check_dataprotector.cfg
%changelog %changelog
* Thu Feb 20 2014 Pall Sigurdsson <palli@opensource.is> 2-1
- removed warning threshold of 60 (palli@opensource.is)
- contrib removed from plugin path (palli@opensource.is)
* 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

View File

@@ -251,10 +251,10 @@ if ($ret > 1) {
# #
foreach my $l (@output) { foreach my $l (@output) {
if($l =~ /(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\%\s+([\/\w\d\.-]+)$/) {
next if ($l =~ m/$opt_R/); next if ($l =~ m/$opt_R/);
next if ($l !~ m/$opt_r/); next if ($l !~ m/$opt_r/);
next if ($l =~ m/$exclude_re/); next if ($l =~ m/$exclude_re/);
if($l =~ /(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\%\s+([\/\w\d\.-]+)$/) {
my ($s,$u,$f,$pu,$d) = ($1,$2,$3,$4,$5); my ($s,$u,$f,$pu,$d) = ($1,$2,$3,$4,$5);
$alldisks{$d}->{pused} = $pu; $alldisks{$d}->{pused} = $pu;
$alldisks{$d}->{pfree} = 100-$pu; $alldisks{$d}->{pfree} = 100-$pu;
@@ -268,10 +268,10 @@ foreach my $l (@output) {
# This is the output of df.exe on Windows # This is the output of df.exe on Windows
#C:\ 9097126 6094081 3003045 67% argon-c (ntfs) #C:\ 9097126 6094081 3003045 67% argon-c (ntfs)
else { else {
if ($l =~ /(\w)\:\\\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\%\s+(.*)$/) {
next if ($l =~ m/$opt_R/); next if ($l =~ m/$opt_R/);
next if ($l !~ m/$opt_r/); next if ($l !~ m/$opt_r/);
next if ($l =~ m/$exclude_re/); next if ($l =~ m/$exclude_re/);
if ($l =~ /(\w)\:\\\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\%\s+(.*)$/) {
my ($d,$s,$u,$f,$pu) = ("/$1",$2,$3,$4,$5); my ($d,$s,$u,$f,$pu) = ("/$1",$2,$3,$4,$5);
$alldisks{$d}->{pused} = $pu; $alldisks{$d}->{pused} = $pu;
$alldisks{$d}->{pfree} = 100-$pu; $alldisks{$d}->{pfree} = 100-$pu;
@@ -324,7 +324,7 @@ if($opt_f) {
if(defined($alldisks{$f})) { if(defined($alldisks{$f})) {
$checkdisks{$f}=$alldisks{$f}; $checkdisks{$f}=$alldisks{$f};
} }
} elsif ($f =~ /([\/\w\d]+)\:(\w+)\:(\w+)/) { } elsif ($f =~ /^(.+?)\:(\w+)\:(\w+)/) {
if(defined($alldisks{$1})) { if(defined($alldisks{$1})) {
$checkdisks{$1}=$alldisks{$1}; $checkdisks{$1}=$alldisks{$1};
updateRates($1,$2,$3,$checkdisks{$1}->{somme}); updateRates($1,$2,$3,$checkdisks{$1}->{somme});

View File

@@ -2,7 +2,7 @@
Summary: A Nagios plugin to check disks via NRPE Summary: A Nagios plugin to check disks via NRPE
Name: nagios-okplugin-check_disks Name: nagios-okplugin-check_disks
Version: 1.0.4 Version: 1.0.7
Release: 1%{?dist} Release: 1%{?dist}
License: GPLv2+ License: GPLv2+
Group: Applications/System Group: Applications/System
@@ -40,6 +40,16 @@ rm -rf %{buildroot}
%{_libdir}/nagios/plugins/check_disks.pl %{_libdir}/nagios/plugins/check_disks.pl
%changelog %changelog
* Wed Oct 29 2014 Tomas Edwardsson <tommi@tommi.org> 1.0.7-1
- Fix invalid regex if mountpoint has . in path (tommi@tommi.org)
- Regex filtering broke disk checks (tommi@tommi.org)
* Tue Mar 25 2014 Tomas Edwardsson <tommi@tommi.org> 1.0.6-1
- Bumped version
* Tue Mar 25 2014 Tomas Edwardsson <tommi@tommi.org> 1.0.5-1
- Added support for inodes (tryggvi@linux.is)
* Sat Mar 02 2013 Tryggvi Farestveit <tryggvi@linux.is> 1.0.4-1 * Sat Mar 02 2013 Tryggvi Farestveit <tryggvi@linux.is> 1.0.4-1
- Added support for inodes - Added support for inodes

View File

@@ -23,17 +23,12 @@
# binaries for Windows and Linux # binaries for Windows and Linux
# Some Defaults # Some Defaults
show_perfdata = True show_perfdata = True
show_longserviceoutput = True show_longserviceoutput = True
debugging = False debugging = False
# check_eva defaults # check_eva defaults
hostname = "localhost" hostname = "localhost"
username = "eva" username = "eva"
@@ -47,11 +42,14 @@ do_phone_home = False
escape_newlines = False escape_newlines = False
check_system = None # By default check all systems check_system = None # By default check all systems
proxyserver = None proxyserver = None
timeout = 0 # 0 means no timeout
server_side_troubleshooting = False # set to true, if you do not have sssu binary handy
# set to true, if you do not have sssu binary handy
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
@@ -59,7 +57,6 @@ unknown=3
not_present = -1 not_present = -1
state = {} state = {}
state[not_present] = "Not Present" state[not_present] = "Not Present"
state[ok] = "OK" state[ok] = "OK"
@@ -70,13 +67,18 @@ state[unknown] = "Unknown"
longserviceoutput = "\n" longserviceoutput = "\n"
perfdata = "" perfdata = ""
valid_modes = ( "check_systems", "check_controllers", "check_diskgroups","check_disks", "check_diskshelfs", "check_diskshelves") valid_modes = ("check_systems", "check_controllers", "check_diskgroups",
"check_disks", "check_diskshelfs", "check_diskshelves")
from sys import exit from sys import exit
from sys import argv from sys import argv
from os import getenv,putenv,environ from os import getenv, environ
import signal
import subprocess import subprocess
import xmlrpclib,httplib import xmlrpclib
import httplib
# we need to set socket default timeout in case we are using the phone-home part
import socket import socket
socket.setdefaulttimeout(5) socket.setdefaulttimeout(5)
@@ -93,6 +95,7 @@ def print_help():
print " [--path </path/to/sssu>]" print " [--path </path/to/sssu>]"
print " [--mode <mode>] " print " [--mode <mode>] "
print " [--test]" print " [--test]"
print " [--timeout <timeout>]"
print " [--debug]" print " [--debug]"
print " [--help]" print " [--help]"
print "" print ""
@@ -107,6 +110,7 @@ def error(errortext):
print "* Error: %s" % errortext print "* Error: %s" % errortext
exit(unknown) exit(unknown)
def debug(debugtext): def debug(debugtext):
global debugging global debugging
if debugging: if debugging:
@@ -127,6 +131,8 @@ while len(arguments) > 0:
password = arguments.pop(0) password = arguments.pop(0)
elif arg == '-T' or arg == '--test': elif arg == '-T' or arg == '--test':
testmode = 1 testmode = 1
elif arg == '--timeout':
timeout = int(arguments.pop(0))
elif arg == '--path': elif arg == '--path':
path = arguments.pop(0) + '/' path = arguments.pop(0) + '/'
elif arg == '-M' or arg == '--mode': elif arg == '-M' or arg == '--mode':
@@ -164,8 +170,6 @@ while len(arguments) > 0:
error("Invalid argument %s" % arg) error("Invalid argument %s" % arg)
subitems = {} subitems = {}
subitems['fan'] = 'fans' subitems['fan'] = 'fans'
subitems['source'] = 'powersources' subitems['source'] = 'powersources'
@@ -177,37 +181,39 @@ subitems['bus'] = 'communicationbuses'
subitems['port'] = 'fibrechannelports' subitems['port'] = 'fibrechannelports'
'''runCommand: Runs command from the shell prompt. Exit Nagios style if unsuccessful'''
def runCommand(command): def runCommand(command):
proc = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE,stderr=subprocess.PIPE,) """ runCommand: Runs command from the shell prompt. Exit Nagios style if unsuccessful """
proc = subprocess.Popen(
command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE,)
stdout, stderr = proc.communicate('through stdin to stdout') stdout, stderr = proc.communicate('through stdin to stdout')
if proc.returncode > 0: if proc.returncode > 0:
print "Error %s: %s\n command was: '%s'" % (proc.returncode, stderr.strip(), command) print "Error %s: %s\n command was: '%s'" % (proc.returncode, stderr.strip(), command)
if proc.returncode == 127 or proc.returncode == 1: # File not found, lets print path # File not found, lets print path
if proc.returncode == 127 or proc.returncode == 1:
path = getenv("PATH") path = getenv("PATH")
print "Current Path: %s" % (path) print "Current Path: %s" % path
exit(unknown) exit(unknown)
else: else:
return stdout return stdout
'''Runs the sssu command. This one is responsible for error checking from sssu'''
def run_sssu(system=None, command="ls system full"): def run_sssu(system=None, command="ls system full"):
"""Runs the sssu command. This one is responsible for error checking from sssu"""
commands = [] commands = []
continue_on_error = "set option on_error=continue" continue_on_error = "set option on_error=continue"
login="select manager %s USERNAME=%s PASSWORD=%s"%(hostname,username,password) login = "select manager %s USERNAME=%s PASSWORD=%s" % (
hostname, username, password)
commands.append(continue_on_error) commands.append(continue_on_error)
commands.append(login) commands.append(login)
if system != None: if system is not None:
commands.append('select SYSTEM "%s"' % system) commands.append('select SYSTEM "%s"' % system)
commands.append(command) commands.append(command)
commandstring = "sssu " commandstring = "sssu "
for i in commands: commandstring = commandstring + '"%s" ' % i for i in commands:
commandstring += '"%s" ' % i
global server_side_troubleshooting global server_side_troubleshooting
if server_side_troubleshooting == True: if server_side_troubleshooting == True:
commandstring = 'cat "debug/%s"' % command commandstring = 'cat "debug/%s"' % command
@@ -227,75 +233,81 @@ def run_sssu(system=None, command="ls system full"):
output = output.split('\n') output = output.split('\n')
# Lets process the top few results from the sssu command. Make sure the results make sense # Lets process the top few results from the sssu command. Make sure the
# results make sense
error = 0 error = 0
if output.pop(0).strip() != '': error = 1 if output.pop(0).strip() != '':
if output.pop(0).strip() != '': error = 1 error = 1
if output.pop(0).strip() != 'SSSU for HP StorageWorks Command View EVA': error = 1 if output.pop(0).strip() != '':
if output.pop(0).strip().find('Version:') != 0: error=1 error = 2
if output.pop(0).strip().find('Build:') != 0: error=1 if output.pop(0).strip().find('SSSU for HP') != 0:
if output.pop(0).strip().find('NoSystemSelected> ') != 0: error=1 error = 3
if output.pop(0).strip().find('Version:') != 0:
error = 4
if output.pop(0).strip().find('Build:') != 0:
error = 5
if output.pop(0).strip().find('NoSystemSelected> ') != 0:
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
buffer = "" str_buffer = ""
for i in output: for i in output:
buffer = buffer + i + "\n" str_buffer = str_buffer + i + "\n"
if i.find('Error') > -1: if i.find('Error') > -1:
print "This is the command i was trying to execute: %s" % i print "This is the command i was trying to execute: %s" % i
error = 1 error = 1
if i.find('information:') > 0: break if i.find('information:') > 0:
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 buffer print str_buffer
exit(unknown) exit(unknown)
objects = [] objects = []
object = None current_object = None
parent_object = None
for line in output: for line in output:
if len(line) == 0: if len(line) == 0:
continue continue
line = line.strip() line = line.strip()
tmp = line.split() tmp = line.split()
if len(tmp) == 0: if len(tmp) == 0:
if object: if current_object:
if not object['master'] in objects: objects.append( object['master'] ) if not current_object['master'] in objects:
object = None objects.append(current_object['master'])
current_object = None
continue continue
key = tmp[0].strip() key = tmp[0].strip()
if object and not object['master'] in objects: objects.append( object['master'] ) if current_object and not current_object['master'] in objects:
objects.append(current_object['master'])
if key == 'object': if key == 'object':
object = {} current_object = {}
object['master'] = object current_object['master'] = current_object
if key == 'controllertemperaturestatus': if key == 'controllertemperaturestatus':
object = object['master'] current_object = current_object['master']
if key == 'iomodules': if key == 'iomodules':
key = 'modules' key = 'modules'
# if key in subitems.values(): # if key in subitems.values():
# object['master'][key] = [] # object['master'][key] = []
if key in subitems.keys(): if key in subitems.keys():
mastergroup = subitems[key] mastergroup = subitems[key]
master = object['master'] master = current_object['master']
object = {} current_object = {}
object['object_type'] = key current_object['object_type'] = key
object['master'] = master current_object['master'] = master
if not object['master'].has_key(mastergroup): if not current_object['master'].has_key(mastergroup):
object['master'][mastergroup] = [] current_object['master'][mastergroup] = []
object['master'][mastergroup].append(object) current_object['master'][mastergroup].append(current_object)
if line.find('.:') > 0: if line.find('.:') > 0:
# We work on first come, first serve basis, so if # We work on first come, first serve basis, so if
# we accidentally see same key again, we will ignore # we accidentally see same key again, we will ignore
if not object.has_key(key): if not current_object.has_key(key):
value = ' '.join(tmp[2:]).strip() value = ' '.join(tmp[2:]).strip()
object[key] = value current_object[key] = value
# Check if we were instructed to check only one eva system # Check if we were instructed to check only one eva system
global check_system global check_system
if command == "ls system full" and check_system != None: if command == "ls system full" and check_system is not None:
tmp_objects = [] tmp_objects = []
for i in objects: for i in objects:
if i['objectname'] == check_system: if i['objectname'] == check_system:
@@ -303,6 +315,7 @@ def run_sssu(system=None, command="ls system full"):
objects = tmp_objects objects = tmp_objects
return objects return objects
def end(summary, perfdata, longserviceoutput, nagios_state): def end(summary, perfdata, longserviceoutput, nagios_state):
global show_longserviceoutput global show_longserviceoutput
global show_perfdata global show_perfdata
@@ -323,7 +336,7 @@ def end(summary,perfdata,longserviceoutput,nagios_state):
if escape_newlines == True: if escape_newlines == True:
lines = message.split('\n') lines = message.split('\n')
message = '\\n'.join(lines) message = '\\n'.join(lines)
debug( "do_phone_home = %s" %(do_phone_home) ) debug("do_phone_home = %s" % do_phone_home)
if do_phone_home == True: if do_phone_home == True:
try: try:
if nagios_myhostname is None: if nagios_myhostname is None:
@@ -333,36 +346,50 @@ def end(summary,perfdata,longserviceoutput,nagios_state):
nagios_myhostname = environ['COMPUTERNAME'] nagios_myhostname = environ['COMPUTERNAME']
else: else:
nagios_myhostname = hostname nagios_myhostname = hostname
try: phone_home(nagios_server,nagios_port, status=nagios_state, message=message, hostname=nagios_myhostname, servicename=mode,system=check_system) try:
except:pass phone_home(nagios_server,
nagios_port,
status=nagios_state,
message=message,
hostname=nagios_myhostname,
servicename=mode,
system=check_system
)
except Exception:
pass
except: except:
raise raise
print message print message
exit(nagios_state) exit(nagios_state)
class ProxiedTransport(xmlrpclib.Transport): class ProxiedTransport(xmlrpclib.Transport):
def set_proxy(self, proxy): def set_proxy(self, proxy):
self.proxy = proxy self.proxy = proxy
def make_connection(self, host): def make_connection(self, host):
self.realhost = host self.realhost = host
h = httplib.HTTP(self.proxy) h = httplib.HTTP(self.proxy)
return h return h
def send_request(self, connection, handler, request_body): def send_request(self, connection, handler, request_body):
connection.putrequest("POST", 'http://%s%s' % (self.realhost, handler)) connection.putrequest("POST", 'http://%s%s' % (self.realhost, handler))
def send_host(self, connection, host): def send_host(self, connection, host):
connection.putheader('Host', self.realhost) connection.putheader('Host', self.realhost)
''' phone_home: Sends results to remote nagios server via python xml-rpc '''
def phone_home(nagios_server, nagios_port, status, message, hostname=None, servicename=None, system=None): def phone_home(nagios_server, nagios_port, status, message, hostname=None, servicename=None, system=None):
debug("phoning home: %s" % (servicename) ) """phone_home: Sends results to remote nagios server via python xml-rpc"""
debug("phoning home: %s" % servicename)
if system is not None: if system is not None:
servicename = str(servicename) + str(system) servicename = str(servicename) + str(system)
uri = "http://%s:%s" % (nagios_server, nagios_port) uri = "http://%s:%s" % (nagios_server, nagios_port)
global proxyserver global proxyserver
if proxyserver != None: if proxyserver is not None:
p = ProxiedTransport() p = ProxiedTransport()
p.set_proxy(proxyserver) p.set_proxy(proxyserver)
s = xmlrpclib.Server(uri, transport=p) s = xmlrpclib.Server(uri, transport=p)
@@ -371,6 +398,7 @@ def phone_home(nagios_server,nagios_port, status, message, hostname=None, servic
s.nagiosupdate(hostname, servicename, status, message) s.nagiosupdate(hostname, servicename, status, message)
return 0 return 0
def check_systems(): def check_systems():
summary = "" summary = ""
perfdata = "" perfdata = ""
@@ -384,65 +412,81 @@ def check_systems():
if operationalstate != 'good': if operationalstate != 'good':
nagios_state = max(nagios_state, warning) nagios_state = max(nagios_state, warning)
# Lets add to the summary # Lets add to the summary
summary = summary + " %s=%s " %(name, operationalstate) summary += " %s=%s " % (name, operationalstate)
# Collect the performance data # Collect the performance data
interesting_perfdata = 'totalstoragespace|usedstoragespace|availablestoragespace' interesting_perfdata = 'totalstoragespace|usedstoragespace|availablestoragespace'
perfdata = perfdata + get_perfdata(i,interesting_perfdata.split('|'), identifier="%s_"% name) perfdata += get_perfdata(
i, interesting_perfdata.split('|'), identifier="%s_" % name)
# Collect extra info for longserviceoutput # Collect extra info for longserviceoutput
long("%s = %s (%s)\n" % ( i['objectname'], i['operationalstate'], i['operationalstatedetail']) ) longoutput("%s = %s (%s)\n" %
(i['objectname'], i['operationalstate'], i['operationalstatedetail']))
interesting_fields = 'licensestate|systemtype|firmwareversion|nscfwversion|totalstoragespace|usedstoragespace|availablestoragespace' interesting_fields = 'licensestate|systemtype|firmwareversion|nscfwversion|totalstoragespace|usedstoragespace|availablestoragespace'
for x in interesting_fields.split('|'): for x in interesting_fields.split('|'):
long( "- %s = %s \n" %(x, i[x]) ) longoutput("- %s = %s \n" % (x, i[x]))
long("\n") longoutput("\n")
end(summary, perfdata, longserviceoutput, nagios_state) end(summary, perfdata, longserviceoutput, nagios_state)
def get_perfdata(my_object, interesting_fields, identifier=""):
def get_perfdata(object, interesting_fields, identifier=""):
perfdata = "" perfdata = ""
for i in interesting_fields: for i in interesting_fields:
if i == '': continue if i == '':
perfdata = perfdata + "'%s%s'=%s " % (identifier, i, object[i]) continue
perfdata += "'%s%s'=%s " % (identifier, i, my_object[i])
return perfdata return perfdata
def add_perfdata(text): def add_perfdata(text):
global perfdata global perfdata
text = text.strip() text = text.strip()
perfdata = perfdata + " %s " % (text) perfdata += " %s " % text
def long(text):
def longoutput(text):
global longserviceoutput global longserviceoutput
longserviceoutput = longserviceoutput + text longserviceoutput = longserviceoutput + text
def get_longserviceoutput(object, interesting_fields):
def get_longserviceoutput(my_object, interesting_fields):
longserviceoutput = "" longserviceoutput = ""
for i in interesting_fields: for i in interesting_fields:
longserviceoutput = longserviceoutput + "%s = %s \n" %(i, object[i]) longserviceoutput += "%s = %s \n" % (i, my_object[i])
return longserviceoutput return longserviceoutput
def check_operationalstate(object, print_failed_objects=False,namefield='objectname',detailfield='operationalstatedetail',statefield='operationalstate',valid_states=['good']):
if not object.has_key(detailfield): detailfield = statefield def check_operationalstate(my_object, print_failed_objects=False, namefield='objectname', detailfield='operationalstatedetail', statefield='operationalstate', valid_states=None):
if not object.has_key(statefield): if not valid_states:
valid_states = ['good']
if not my_object.has_key(detailfield):
detailfield = statefield
if not my_object.has_key(statefield):
if print_failed_objects: if print_failed_objects:
long("- Warning, %s does not have any '%s'" % ( object[namefield], statefield ) ) longoutput("- Warning, %s does not have any '%s'" %
(my_object[namefield], statefield))
return warning return warning
if object[statefield] not in valid_states: if my_object[statefield] not in valid_states:
if print_failed_objects: if print_failed_objects:
long("- Warning, %s=%s (%s)\n" % ( object[namefield], object['operationalstate'], object[detailfield] )) longoutput("- Warning, %s=%s (%s)\n" %
(my_object[namefield], my_object['operationalstate'], my_object[detailfield]))
return warning return warning
debug( "OK, %s=%s (%s)\n" % ( object[namefield], object['operationalstate'], object[detailfield] ) ) debug("OK, %s=%s (%s)\n" %
(my_object[namefield], my_object['operationalstate'], my_object[detailfield]))
return ok return ok
def check_generic(command="ls disk full", namefield="objectname", perfdata_fields=None, longserviceoutputfields=None, detailedsummary=False):
def check_generic(command="ls disk full",namefield="objectname", perfdata_fields=[], longserviceoutputfields=[], detailedsummary=False): if not perfdata_fields:
summary="" perfdata_fields = []
if not longserviceoutputfields:
longserviceoutputfields = []
global perfdata global perfdata
nagios_state = ok nagios_state = ok
systems = run_sssu() systems = run_sssu()
objects = [] objects = []
if command == 'ls system full': if command == 'ls system full':
objects = systems objects = systems
for i in systems: i['systemname'] = '' #i['objectname'] for i in systems:
i['systemname'] = '' # i['objectname']
else: else:
for i in systems: for i in systems:
result = run_sssu(system=i['objectname'], command=command) result = run_sssu(system=i['objectname'], command=command)
@@ -450,34 +494,39 @@ def check_generic(command="ls disk full",namefield="objectname", perfdata_fields
x['systemname'] = i['objectname'] x['systemname'] = i['objectname']
objects.append(x) objects.append(x)
summary = "%s objects found " % len(objects) summary = "%s objects found " % len(objects)
usedstoragespacegb = 0
occupancyalarmlvel = 0
warninggb = 0
for i in objects: for i in objects:
systemname = i['systemname'] systemname = i['systemname']
# Some versions of commandview use "objectname" instead of namefield # Some versions of commandview use "objectname" instead of namefield
if i.has_key(namefield): if i.has_key(namefield):
objectname = i[namefield] objectname = i[namefield]
else: else:
objectname = i['objectname'] objectname = i['objectname']
# Some versions of CV also return garbage objects, luckily it is easy to find these # Some versions of CV also return garbage objects, luckily it is easy
# to find these
if i.has_key('objecttype') and i['objecttype'] == 'typenotset': if i.has_key('objecttype') and i['objecttype'] == 'typenotset':
long("Object %s was skipped because objecttype == typenotset\n" % objectname ) longoutput(
"Object %s was skipped because objecttype == typenotset\n" % objectname)
continue continue
# Lets see if this object is working # Lets see if this object is working
nagios_state = max(check_operationalstate(i), nagios_state) nagios_state = max(check_operationalstate(i), nagios_state)
# Lets add to the summary # Lets add to the summary
if i['operationalstate'] != 'good' or detailedsummary == True: if i['operationalstate'] != 'good' or detailedsummary == True:
summary = summary + " %s/%s=%s " %(systemname,objectname, i['operationalstate']) summary += " %s/%s=%s " % (
systemname, objectname, i['operationalstate'])
# Lets get some perfdata # Lets get some perfdata
identifier = "%s/%s_" % (systemname, objectname) identifier = "%s/%s_" % (systemname, objectname)
i['identifier'] = identifier i['identifier'] = identifier
for field in perfdata_fields: for field in perfdata_fields:
if field == '': continue if field == '':
add_perfdata( "'%s%s'=%s " % (identifier, field, i[field]) ) continue
add_perfdata("'%s%s'=%s " %
(identifier, field, i.get(field, None)))
# Disk group gets a special perfdata treatment # Disk group gets a special perfdata treatment
if command == "ls disk_group full": if command == "ls disk_group full":
@@ -485,63 +534,73 @@ def check_generic(command="ls disk full",namefield="objectname", perfdata_fields
usedstoragespacegb = float(i['usedstoragespacegb']) usedstoragespacegb = float(i['usedstoragespacegb'])
occupancyalarmlvel = float(i['occupancyalarmlevel']) occupancyalarmlvel = float(i['occupancyalarmlevel'])
warninggb = totalstoragespacegb * occupancyalarmlvel / 100 warninggb = totalstoragespacegb * occupancyalarmlvel / 100
add_perfdata( " '%sdiskusage'=%s;%s;%s "% (identifier, usedstoragespacegb,warninggb,totalstoragespacegb) ) add_perfdata(" '%sdiskusage'=%s;%s;%s " %
(identifier, usedstoragespacegb, warninggb, totalstoragespacegb))
# Long Serviceoutput # Long Serviceoutput
# There are usually to many disks for nagios to display. Skip. # There are usually to many disks for nagios to display. Skip.
if command != "ls disk full": if command != "ls disk full":
long( "\n%s/%s = %s (%s)\n"%(systemname,objectname,i['operationalstate'], i['operationalstatedetail']) ) longoutput("\n%s/%s = %s (%s)\n" %
(systemname, objectname, i['operationalstate'], i['operationalstatedetail']))
# If diskgroup has a problem because it is over allocated. Lets inform about that # If diskgroup has a problem because it is over allocated. Lets inform
# about that
if command == "ls disk_group full" and usedstoragespacegb > warninggb: if command == "ls disk_group full" and usedstoragespacegb > warninggb:
long("- %s - diskgroup usage is over %s%% threshold !\n" % (state[warning], occupancyalarmlvel) ) longoutput(
"- %s - diskgroup usage is over %s%% threshold !\n" %
(state[warning], occupancyalarmlvel))
# If a disk has a problem, lets display some extra info on it # If a disk has a problem, lets display some extra info on it
elif command == "ls disk full" and i['operationalstate'] != 'good': elif command == "ls disk full" and i['operationalstate'] != 'good':
long( "Warning - %s=%s (%s)\n" % (i['diskname'], i['operationalstate'], i['operationalstatedetail'] )) longoutput("Warning - %s=%s (%s)\n" %
fields="modelnumber firmwareversion serialnumber failurepredicted diskdrivetype".split() (i['diskname'], i['operationalstate'], i['operationalstatedetail']))
fields = "modelnumber firmwareversion serialnumber failurepredicted diskdrivetype".split(
)
for field in fields: for field in fields:
long( "- %s = %s\n" % (field, i[field]) ) longoutput("- %s = %s\n" % (field, i[field]))
nagios_state = max(nagios_state, check_multiple_objects(i, 'sensors')) nagios_state = max(nagios_state, check_multiple_objects(i, 'sensors'))
nagios_state = max(nagios_state, check_multiple_objects(i, 'fans')) nagios_state = max(nagios_state, check_multiple_objects(i, 'fans'))
nagios_state = max(nagios_state, check_multiple_objects(i, 'powersupplies')) nagios_state = max(
nagios_state = max(nagios_state, check_multiple_objects(i, 'communicationbuses')) nagios_state, check_multiple_objects(i, 'powersupplies'))
nagios_state = max(nagios_state, check_multiple_objects(i, 'fibrechannelports')) nagios_state = max(
nagios_state, check_multiple_objects(i, 'communicationbuses'))
nagios_state = max(
nagios_state, check_multiple_objects(i, 'fibrechannelports'))
nagios_state = max(nagios_state, check_multiple_objects(i, 'modules')) nagios_state = max(nagios_state, check_multiple_objects(i, 'modules'))
for x in longserviceoutputfields: for x in longserviceoutputfields:
if i.has_key(x): if i.has_key(x):
long( "- %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(object, name):
def check_multiple_objects(my_object, name):
item_status = not_present item_status = not_present
if object.has_key(name): if my_object.has_key(name):
item_status = not_present item_status = not_present
valid_states = ['good'] valid_states = ['good']
namefield = "name" namefield = "name"
detailfield = 'operationalstatedetail' detailfield = 'operationalstatedetail'
if name == 'fans' or name == 'sensors': if name == 'fans' or name == 'sensors':
valid_states = ['good','notavailable','unsupported','notinstalled'] valid_states = [
'good', 'notavailable', 'unsupported', 'notinstalled']
elif name == 'fibrechannelports': elif name == 'fibrechannelports':
valid_states.append('notinstalled') valid_states.append('notinstalled')
num_items = len(object[name]) num_items = len(my_object[name])
for item in object[name]: for item in my_object[name]:
stat = check_operationalstate( item,print_failed_objects=True, namefield=namefield, valid_states=valid_states,detailfield=detailfield) stat = check_operationalstate(
item, print_failed_objects=True, namefield=namefield, valid_states=valid_states, detailfield=detailfield)
item_status = max(stat, item_status) item_status = max(stat, item_status)
long('- %s on %s (%s detected)\n'% (state[item_status], name, num_items) ) longoutput('- %s on %s (%s detected)\n' %
add_perfdata( " '%s%s'=%s" % (object['identifier'],name, num_items) ) (state[item_status], name, num_items))
add_perfdata(" '%s%s'=%s" %
(my_object['identifier'], name, num_items))
return item_status return item_status
def check_controllers(): def check_controllers():
summary=""
perfdata = "" perfdata = ""
# longserviceoutput="\n" # longserviceoutput="\n"
nagios_state = ok nagios_state = ok
@@ -564,28 +623,28 @@ def check_controllers():
# Lets add to the summary # Lets add to the summary
if not i.has_key('operationalstate'): if not i.has_key('operationalstate'):
summary = summary + " %s does not have any operationalstate " % controllername summary += " %s does not have any operationalstate " % controllername
nagios_state = max(unknown, nagios_state) nagios_state = max(unknown, nagios_state)
continue continue
elif i['operationalstate'] != 'good': elif i['operationalstate'] != 'good':
summary = summary + " %s/%s=%s " %(systemname,controllername, i['operationalstate']) summary += " %s/%s=%s " % (
systemname, controllername, i['operationalstate'])
# Lets get some perfdata # Lets get some perfdata
interesting_fields = "controllermainmemory" interesting_fields = "controllermainmemory"
identifier = "%s/%s_" % (systemname, controllername) identifier = "%s/%s_" % (systemname, controllername)
perfdata = perfdata + get_perfdata(i, interesting_fields.split('|'), identifier=identifier) perfdata += get_perfdata(
i, interesting_fields.split('|'), identifier=identifier)
# Long Serviceoutput # Long Serviceoutput
interesting_fields = "operationalstate|operationalstatedetail|firmwareversion|serialnumber"
#longserviceoutput = longserviceoutput + get_longserviceoutput(i, interesting_fields.split('|') ) #longserviceoutput = longserviceoutput + get_longserviceoutput(i, interesting_fields.split('|') )
#longserviceoutput = longserviceoutput + "\n%s/%s\n"%(systemname,controllername) #longserviceoutput = longserviceoutput + "\n%s/%s\n"%(systemname,controllername)
long( "\n%s/%s = %s (%s)\n"%(systemname,controllername,i['operationalstate'], i['operationalstatedetail']) ) longoutput("\n%s/%s = %s (%s)\n" %
long( "- firmwareversion = %s \n" %(i['firmwareversion'])) (systemname, controllername, i['operationalstate'], i['operationalstatedetail']))
long( "- serialnumber = %s \n" %(i['serialnumber'])) longoutput("- firmwareversion = %s \n" % (i['firmwareversion']))
longoutput("- serialnumber = %s \n" % (i['serialnumber']))
controllertemperaturestatus = not_present controllertemperaturestatus = not_present
cache_state = not_present
fanstate = not_present fanstate = not_present
hostportstate = not_present hostportstate = not_present
sensorstate = ok sensorstate = ok
@@ -605,53 +664,60 @@ def check_controllers():
else: else:
controllertemperaturestatus = warning controllertemperaturestatus = warning
# Process the subsensors # Process the subsensors
for hostport in i['hostports']: for hostport in i['hostports']:
#long(" %s = %s\n" % (hostport['portname'], hostport['operationalstate'])) #long(" %s = %s\n" % (hostport['portname'], hostport['operationalstate']))
hostportstate = max(hostportstate, ok) hostportstate = max(hostportstate, ok)
if hostport['operationalstate'] != 'good': if hostport['operationalstate'] != 'good':
hostportstate = max(warning,hostport_state) hostportstate = max(warning, hostportstate)
long("Hostport %s state = %s\n" % hostport['portname'], hostport['operationalstate']) message = "Hostport %s state = %s\n" % (
hostport['portname'], hostport['operationalstate'])
longoutput(message)
if i.has_key('fans'): if i.has_key('fans'):
for fan in i['fans']: for fan in i['fans']:
fanstate = max(fanstate, ok) fanstate = max(fanstate, ok)
#long(" %s = %s\n" % (fan['fanname'], fan['status'])) #long(" %s = %s\n" % (fan['fanname'], fan['status']))
if fan.has_key('status'): status = fan['status'] if fan.has_key('status'):
elif fan.has_key('installstatus'): status = fan['installstatus'] status = fan['status']
elif fan.has_key('installstatus'):
status = fan['installstatus']
if status != 'normal' and status != 'yes': if status != 'normal' and status != 'yes':
fanstate = max(warning, fanstate) fanstate = max(warning, fanstate)
long("Fan %s status = %s\n" % (fan['fanname'],status)) longoutput("Fan %s status = %s\n" %
(fan['fanname'], status))
if i.has_key('powersources'): if i.has_key('powersources'):
for source in i['powersources']: for source in i['powersources']:
source_state = max(source_state, ok) source_state = max(source_state, ok)
if not source.has_key('status'): continue if not source.has_key('status'):
continue
if source['state'] != 'good': if source['state'] != 'good':
source_state = max(warning, source_state) source_state = max(warning, source_state)
long("Powersource %s status = %s\n" % (source['type'],source['state'])) longoutput("Powersource %s status = %s\n" %
(source['type'], source['state']))
if i.has_key('modules'): if i.has_key('modules'):
for module in i['modules']: for module in i['modules']:
module_state = max(module_state, ok) module_state = max(module_state, ok)
if module['operationalstate'] not in ('good', 'not_present'): if module['operationalstate'] not in ('good', 'not_present'):
module_state = max(warning, module_state) module_state = max(warning, module_state)
long("Battery Module %s status = %s\n" % (module['name'],module['operationalstate'])) longoutput("Battery Module %s status = %s\n" %
(module['name'], module['operationalstate']))
for i in (fanstate, hostportstate, sensorstate, source_state, module_state, cache_state, controllertemperaturestatus): for i in (fanstate, hostportstate, sensorstate, source_state, module_state, cache_state, controllertemperaturestatus):
nagios_state = max(nagios_state, i) nagios_state = max(nagios_state, i)
long("- %s on fans\n"%( state[fanstate] ) ) longoutput("- %s on fans\n" % (state[fanstate]))
long("- %s on cachememory\n"%( state[cache_state] ) ) longoutput("- %s on cachememory\n" % (state[cache_state]))
long("- %s on temperature\n"%( state[controllertemperaturestatus] ) ) longoutput("- %s on temperature\n" %
long("- %s on hostports\n"%( state[hostportstate] ) ) (state[controllertemperaturestatus]))
long("- %s on sensors\n"%( state[sensorstate] ) ) longoutput("- %s on hostports\n" % (state[hostportstate]))
long("- %s on powersupplies\n"%( state[source_state] ) ) longoutput("- %s on sensors\n" % (state[sensorstate]))
long("- %s on batterymodules\n"%( state[module_state] ) ) longoutput("- %s on powersupplies\n" % (state[source_state]))
longoutput("- %s on batterymodules\n" % (state[module_state]))
longoutput('\n')
long('\n')
end(summary, perfdata, longserviceoutput, nagios_state) end(summary, perfdata, longserviceoutput, nagios_state)
def set_path(): def set_path():
global path global path
current_path = getenv('PATH') current_path = getenv('PATH')
@@ -665,29 +731,37 @@ def set_path():
set_path() set_path()
# Create an alarm so that plugin can exit properly if timeout occurs
exit_with_timeout = lambda x, y: error("Timeout of %s seconds exceeded" % timeout)
signal.signal(signal.SIGALRM, exit_with_timeout)
signal.alarm(timeout)
if mode == 'check_systems': if mode == 'check_systems':
perfdata_fields = 'totalstoragespace usedstoragespace availablestoragespace'.split() perfdata_fields = 'totalstoragespace usedstoragespace availablestoragespace'.split(
longserviceoutputfields = 'licensestate systemtype firmwareversion nscfwversion totalstoragespace usedstoragespace availablestoragespace'.split() )
longserviceoutputfields = 'licensestate systemtype firmwareversion nscfwversion totalstoragespace usedstoragespace availablestoragespace'.split(
)
command = "ls system full" command = "ls system full"
namefield = "objectname" namefield = "objectname"
check_generic(command=command,namefield=namefield,longserviceoutputfields=longserviceoutputfields, perfdata_fields=perfdata_fields) check_generic(command=command, namefield=namefield,
#check_systems longserviceoutputfields=longserviceoutputfields, perfdata_fields=perfdata_fields)
elif mode == 'check_controllers': elif mode == 'check_controllers':
check_controllers() check_controllers()
elif mode == 'check_diskgroups': elif mode == 'check_diskgroups':
command = "ls disk_group full" command = "ls disk_group full"
namefield = 'diskgroupname' namefield = 'diskgroupname'
longserviceoutputfields = "totaldisks levelingstate levelingprogress totalstoragespacegb usedstoragespacegb occupancyalarmlevel".split() longserviceoutputfields = "totaldisks levelingstate levelingprogress totalstoragespacegb usedstoragespacegb occupancyalarmlevel".split(
)
perfdata_fields = "totaldisks".split() perfdata_fields = "totaldisks".split()
check_generic(command=command,namefield=namefield,longserviceoutputfields=longserviceoutputfields, perfdata_fields=perfdata_fields) check_generic(command=command, namefield=namefield,
longserviceoutputfields=longserviceoutputfields, perfdata_fields=perfdata_fields)
elif mode == 'check_disks': elif mode == 'check_disks':
check_generic(command="ls disk full", namefield="objectname") check_generic(command="ls disk full", namefield="objectname")
elif mode == 'check_diskshelfs' or mode == 'check_diskshelves': elif mode == 'check_diskshelfs' or mode == 'check_diskshelves':
check_generic(command="ls diskshelf full",namefield="diskshelfname",longserviceoutputfields=[], perfdata_fields=[]) check_generic(command="ls diskshelf full", namefield="diskshelfname",
longserviceoutputfields=[], perfdata_fields=[])
else: else:
print "* Error: Mode %s not found" % mode print "* Error: Mode %s not found" % mode
print_help() print_help()
print "* Error: Mode %s not found" % mode print "* Error: Mode %s not found" % mode
exit(unknown) exit(unknown)

View File

@@ -2,7 +2,7 @@
Summary: A Nagios plugin to check HP EVA Disk Systems Summary: A Nagios plugin to check HP EVA Disk Systems
Name: nagios-okplugin-check_eva Name: nagios-okplugin-check_eva
Version: 1.0.2 Version: 2
Release: 1%{?dist} Release: 1%{?dist}
License: GPLv2+ License: GPLv2+
Group: Applications/System Group: Applications/System
@@ -40,6 +40,22 @@ rm -rf %{buildroot}
/etc/nrpe.d/check_eva.cfg /etc/nrpe.d/check_eva.cfg
%changelog %changelog
* Thu Feb 20 2014 Pall Sigurdsson <palli@opensource.is> 2-1
- Merge pull request #10 from gitmopp/patch-2 (palli-github@minor.is)
- bug in for loop. Looped only once (mopp@gmx.net)
- Fixed output to be more compatible (mopp@gmx.net)
- check_eva new Make sure --timeout is an integer (palli@opensource.is)
- check_eva new command line option --timeout (palli@opensource.is)
- check_eva Fix undefined fix typos (palli@opensource.is)
- PEP8 cleanup (palli@opensource.is)
- merged (palli@opensource.is)
- check_eva - minor bugfixes (palli@opensource.is)
- check_eva.py more code cleanup with pycharm inspections (palli@opensource.is)
- check_eva.py - Make code more readable (palli@opensource.is)
- convert from tabs to spaces (palli@opensource.is)
- check_eva - fix mixed tab/spaces (palli@opensource.is)
- Update check_eva.py (sander.grendelman@gmail.com)
* Thu Aug 23 2012 Pall Sigurdsson <palli@opensource.is> 1.0.2-1 * Thu Aug 23 2012 Pall Sigurdsson <palli@opensource.is> 1.0.2-1
- changed sssu subcommands from being singlequoted to doublequoted for windows - changed sssu subcommands from being singlequoted to doublequoted for windows
compatibility (palli@opensource.is) compatibility (palli@opensource.is)

View File

@@ -0,0 +1,23 @@
#!/bin/bash
EXIT_OK=0
EXIT_WARN=1
EXIT_CRIT=2
PATH=/sbin:/usr/sbin:$PATH
if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root" 1>&2
exit $EXIT_CRIT
fi
blocks=$(iptables -L -v -n | egrep 'REJECT|DROP' | wc -l)
if [ $blocks -eq 0 ]; then
echo "CRITICAL: No firewall detected"
exit $EXIT_CRIT
fi
echo "OK: Firewall is active"
exit $EXIT_OK

View File

@@ -0,0 +1,51 @@
%define debug_package %{nil}
%define release 2
Summary: A Nagios plugin to check if iptables are actually enforcing rules
Name: nagios-okplugin-check_firewall_active
Version: 1.0.0
Release: %{release}%{?dist}
License: GPLv2+
Group: Applications/System
URL: https://github.com/opinkerfi/nagios-plugins/issues
Source0: http://opensource.ok.is/trac/browser/nagios-plugins/check_firewall_active/releases/nagios-okplugin-check_firewall_active-%{version}.tar.gz
Requires: nagios-nrpe
Requires: iptables
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
Packager: Richard Allen <ra@ok.is>
%description
A Nagios plugin to check if iptables are actually enforcing rules
%prep
%setup -q
#perl -pi -e "s|/usr/lib64|%{_libdir}|g" nrpe.d/check_firewall_active.cfg
%build
%install
rm -rf %{buildroot}
install -D -p -m 0755 check_firewall_active.sh %{buildroot}%{_libdir}/nagios/plugins/check_firewall_active.sh
install -D -p -m 0755 nrpe.d/check_firewall_active.cfg %{buildroot}/etc/nrpe.d/check_firewall_active.cfg
install -D -p -m 0644 sudoers.d/check_firewall_active %{buildroot}/etc/sudoers.d/check_firewall_active
%clean
rm -rf %{buildroot}
%files
%defattr(-,root,root,-)
#%doc README LICENSE
%{_libdir}/nagios/plugins/*
/etc/nrpe.d/check_firewall_active.cfg
/etc/sudoers.d/check_firewall_active
%post
restorecon -v %{_libdir}/nagios/plugins/check_firewall_active.sh /etc/nrpe.d/check_firewall_active.cfg /etc/sudoers.d/check_firewall_active
%changelog
* Thu Dec 20 2016 Richard Allen <ra@ok.is> 0.1-1
- Initial packaging

View File

@@ -0,0 +1,3 @@
command[check_firewall_active]=sudo /usr/lib64/nagios/plugins/check_firewall_active.sh

View File

@@ -0,0 +1,2 @@
Defaults:nrpe !requiretty
nrpe ALL = (root) NOPASSWD: /usr/lib64/nagios/plugins/check_firewall_active.sh

View File

@@ -274,6 +274,9 @@ def check_logicaldisks():
ld_status = check(i, 'Status') ld_status = check(i, 'Status')
status = max(status, ld_status) status = max(status, ld_status)
if i.get('Status') == 'Failed':
status = max(status, critical)
mount_point = i['Mount Points'] mount_point = i['Mount Points']
add_long("- %s (%s) = %s" % (i['name'], mount_point, state[ld_status])) add_long("- %s (%s) = %s" % (i['name'], mount_point, state[ld_status]))
add_summary(". ") add_summary(". ")

View File

@@ -2,8 +2,8 @@
Summary: A Nagios plugin to check HP Array with hpacucli Summary: A Nagios plugin to check HP Array with hpacucli
Name: nagios-okplugin-check_hpacucli Name: nagios-okplugin-check_hpacucli
Version: 1.2 Version: 2
Release: 2%{?dist} Release: 1%{?dist}
License: GPLv2+ License: GPLv2+
Group: Applications/System Group: Applications/System
URL: http://opensource.is/trac/wiki/check_hpacucli URL: http://opensource.is/trac/wiki/check_hpacucli
@@ -28,7 +28,7 @@ perl -pi -e "s|/usr/lib64|%{_libdir}|g" sudoers.d/*
rm -rf %{buildroot} rm -rf %{buildroot}
install -D -p -m 0755 check_hpacucli.py %{buildroot}%{_libdir}/nagios/plugins/check_hpacucli.py install -D -p -m 0755 check_hpacucli.py %{buildroot}%{_libdir}/nagios/plugins/check_hpacucli.py
install -D -p -m 0755 nrpe.d/check_hpacucli.cfg %{buildroot}/etc/nrpe.d/check_hpacucli.cfg install -D -p -m 0755 nrpe.d/check_hpacucli.cfg %{buildroot}/etc/nrpe.d/check_hpacucli.cfg
install -D -p -m 0755 sudoers.d/check_hpacucli %{buildroot}/etc/sudoers.d/check_hpacucli install -D -p -m 0440 sudoers.d/check_hpacucli %{buildroot}/etc/sudoers.d/check_hpacucli
%clean %clean
rm -rf %{buildroot} rm -rf %{buildroot}
@@ -41,6 +41,17 @@ rm -rf %{buildroot}
/etc/sudoers.d/check_hpacucli /etc/sudoers.d/check_hpacucli
%changelog %changelog
* Thu Feb 20 2014 Pall Sigurdsson <palli@opensource.is> 2-1
- check_hpacucli.py - fix typo in hpacucli command (palli@opensource.is)
- check_hpacucli.py: pep8 cleanup (palli@opensource.is)
- check_hpacucli - fix tab indentation (palli@opensource.is)
- check_hpacucli: ignore hpacucli output that starts with "Note:"
(palli@opensource.is)
- sudoers.d added to install (you@example.com)
- dummy commit (you@example.com)
- dummy commit (you@example.com)
- Add sudoers support to check_hpacucli (palli@opensource.is)
* Thu Aug 23 2012 Pall Sigurdsson <palli@opensource.is> 1.2-2 * Thu Aug 23 2012 Pall Sigurdsson <palli@opensource.is> 1.2-2
- version number of scripts bumped (palli@opensource.is) - version number of scripts bumped (palli@opensource.is)

View File

@@ -1 +1,2 @@
Defaults:nrpe !requiretty
nrpe ALL=(ALL) NOPASSWD: /usr/lib64/nagios/plugins/check_hpacucli.py nrpe ALL=(ALL) NOPASSWD: /usr/lib64/nagios/plugins/check_hpacucli.py

View File

@@ -81,7 +81,7 @@ check_raid()
{ {
raid_ok=`cat $TEMPFILE |grep -i ok|wc -l` raid_ok=`cat $TEMPFILE |grep -i ok|wc -l`
raid_warning=`cat $TEMPFILE|grep -i -E 'rebuild|predictive' |wc -l` raid_warning=`cat $TEMPFILE|grep -i -E 'rebuild|predictive' |wc -l`
raid_critical_1=`cat $TEMPFILE|grep -i 'failed|recovery' | wc -l` raid_critical_1=`cat $TEMPFILE|grep -i -E 'failed|recovery' | wc -l`
err_check=`expr $raid_ok + $raid_warning + $raid_critical_1 ` err_check=`expr $raid_ok + $raid_warning + $raid_critical_1 `
@@ -133,7 +133,7 @@ case "$1" in
exit 0 exit 0
;; ;;
--all) --all)
controllers=`sudo -u root hpacucli controller all show | sed 's/.*Slot \([0-9]*\).*/\1/'` controllers=`sudo -u root $HPACUCLI controller all show | sed 's/.*Slot \([0-9]*\).*/\1/'`
for i in $controllers ; do sudo -u root $HPACUCLI controller slot=$i pd all show status;done > $TEMPFILE for i in $controllers ; do sudo -u root $HPACUCLI controller slot=$i pd all show status;done > $TEMPFILE
check_raid check_raid
;; ;;

View File

@@ -2,7 +2,7 @@
Summary: A Nagios plugin to check HP Hardware Status Summary: A Nagios plugin to check HP Hardware Status
Name: nagios-okplugin-check_hpasm Name: nagios-okplugin-check_hpasm
Version: 4.1.2 Version: 4.1.4
Release: 1%{?dist} Release: 1%{?dist}
License: GPLv2+ License: GPLv2+
Group: Applications/System Group: Applications/System
@@ -45,5 +45,11 @@ rm -rf %{buildroot}
/etc/nrpe.d/check_hpasm.cfg /etc/nrpe.d/check_hpasm.cfg
%changelog %changelog
* Fri Oct 03 2014 Tomas Edwardsson <tommi@tommi.org> 4.1.4-1
- hpasm invalid nrpe check command name (tommi@tommi.org)
* Thu May 15 2014 Tomas Edwardsson <tommi@tommi.org> 4.1.3-1
- new package built with tito
* Tue Jun 4 2013 Pall Sigurdsson <palli@opensource.is> 4.1.2-1 * Tue Jun 4 2013 Pall Sigurdsson <palli@opensource.is> 4.1.2-1
- Initial packaging - Initial packaging

View File

@@ -1,3 +1,3 @@
command[check_updates]=sudo /usr/lib/nagios/plugins/check_hpasm command[check_hpasm]=sudo /usr/lib/nagios/plugins/check_hpasm

View File

@@ -20,7 +20,6 @@
# This script will check the status of a remote IBM Bladecenter via SNMP. # This script will check the status of a remote IBM Bladecenter via SNMP.
# No real need to change anything below here # No real need to change anything below here
version = "1.1.2" version = "1.1.2"
ok = 0 ok = 0
@@ -31,7 +30,6 @@ not_present = -1
exit_status = -1 exit_status = -1
state = {} state = {}
state[not_present] = "Not Present" state[not_present] = "Not Present"
state[ok] = "OK" state[ok] = "OK"
@@ -52,10 +50,6 @@ from os import getenv,putenv,environ
import subprocess import subprocess
# Parse some Arguments # Parse some Arguments
from optparse import OptionParser from optparse import OptionParser
parser = OptionParser() parser = OptionParser()
@@ -87,12 +81,14 @@ parser.add_option("-d","--debug", dest="debug",
(opts, args) = parser.parse_args() (opts, args) = parser.parse_args()
if opts.host == None: if opts.host is None:
parser.error("Hostname (-H) is required.") parser.error("Hostname (-H) is required.")
if opts.mode == None: if opts.mode is None:
parser.error("Mode (--mode) is required.") parser.error("Mode (--mode) is required.")
snmp_options = "" snmp_options = ""
def set_snmp_options(): def set_snmp_options():
global snmp_options global snmp_options
if opts.snmp_version is not None: if opts.snmp_version is not None:
@@ -101,33 +97,41 @@ def set_snmp_options():
if opts.snmp_username is None: if opts.snmp_username is None:
parser.error("--snmp_username required with --snmp_version=3") parser.error("--snmp_username required with --snmp_version=3")
if opts.snmp_seclevel is None: if opts.snmp_seclevel is None:
parser.error("--snmp_security_level required with --snmp_version=3") parser.error(
"--snmp_security_level required with --snmp_version=3")
if opts.snmp_password is None: if opts.snmp_password is None:
parser.error("--snmp_password required with --snmp_version=3") parser.error("--snmp_password required with --snmp_version=3")
snmp_options = snmp_options + " -u %s -l %s -A %s " % (opts.snmp_username, opts.snmp_seclevel,opts.snmp_password) snmp_options = snmp_options + " -u %s -l %s -A %s " % (
opts.snmp_username, opts.snmp_seclevel, opts.snmp_password)
else: else:
if opts.snmp_community is None: if opts.snmp_community is None:
parser.error("--snmp_community is required with --snmp_version=1|2c") parser.error(
"--snmp_community is required with --snmp_version=1|2c")
snmp_options = snmp_options + " -c %s " % opts.snmp_community snmp_options = snmp_options + " -c %s " % opts.snmp_community
snmp_options += " -t %s " % (opts.snmp_timeout) snmp_options += " -t %s " % (opts.snmp_timeout)
def error(errortext): def error(errortext):
print "* Error: %s" % errortext print "* Error: %s" % errortext
exit(unknown) exit(unknown)
def debug(debugtext): def debug(debugtext):
if opts.debug: if opts.debug:
print debugtext print debugtext
def nagios_status(newStatus): def nagios_status(newStatus):
global exit_status global exit_status
exit_status = max(exit_status, newStatus) exit_status = max(exit_status, newStatus)
return exit_status return exit_status
'''runCommand: Runs command from the shell prompt. Exit Nagios style if unsuccessful'''
def runCommand(command): def runCommand(command):
'''runCommand: Runs command from the shell prompt. Exit Nagios style if unsuccessful'''
debug("Executing: %s" % command) debug("Executing: %s" % command)
proc = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE,stderr=subprocess.PIPE,) proc = subprocess.Popen(
command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE,)
stdout, stderr = proc.communicate('through stdin to stdout') stdout, stderr = proc.communicate('through stdin to stdout')
if proc.returncode > 0: if proc.returncode > 0:
print "Error %s: %s\n command was: '%s'" % (proc.returncode, stderr.strip(), command) print "Error %s: %s\n command was: '%s'" % (proc.returncode, stderr.strip(), command)
@@ -143,6 +147,7 @@ def runCommand(command):
else: else:
return stdout return stdout
def end(): def end():
global summary global summary
global longserviceoutput global longserviceoutput
@@ -150,36 +155,43 @@ def end():
global exit_status global exit_status
print "%s - %s | %s" % (state[exit_status], summary, perfdata) print "%s - %s | %s" % (state[exit_status], summary, perfdata)
print longserviceoutput print longserviceoutput
if exit_status < 0: exit_status = unknown if exit_status < 0:
exit_status = unknown
exit(exit_status) exit(exit_status)
def add_perfdata(text): def add_perfdata(text):
global perfdata global perfdata
text = text.strip() text = text.strip()
perfdata = perfdata + " %s " % (text) perfdata = perfdata + " %s " % (text)
def add_long(text): def add_long(text):
global longserviceoutput global longserviceoutput
longserviceoutput = longserviceoutput + text + '\n' longserviceoutput = longserviceoutput + text + '\n'
def add_summary(text): def add_summary(text):
global summary global summary
summary = summary + text summary = summary + text
def set_path(path): def set_path(path):
current_path = getenv('PATH') current_path = getenv('PATH')
if current_path.find('C:\\') > -1: # We are on this platform if current_path.find('C:\\') > -1: # We are on this platform
if path == '': if path == '':
pass pass
else: path = ';' + path else:
path = ';' + path
else: # Unix/Linux, etc else: # Unix/Linux, etc
if path == '': path = ":/usr/sbin" if path == '':
else: path = ':' + path path = ":/usr/sbin"
else:
path = ':' + path
current_path = "%s%s" % (current_path, path) current_path = "%s%s" % (current_path, path)
environ['PATH'] = current_path environ['PATH'] = current_path
def snmpget(oid): def snmpget(oid):
snmpgetcommand = "snmpget %s %s %s" % (snmp_options, opts.host, oid) snmpgetcommand = "snmpget %s %s %s" % (snmp_options, opts.host, oid)
output = runCommand(snmpgetcommand) output = runCommand(snmpgetcommand)
@@ -189,12 +201,16 @@ def snmpget(oid):
resultValue = resultValue[1:-1] resultValue = resultValue[1:-1]
return resultValue return resultValue
# snmpwalk -v3 -u v3get mgmt-rek-proxy-p02 -A proxy2011 -l authNoPriv 1.3.6.1.4.1.15497 # snmpwalk -v3 -u v3get mgmt-rek-proxy-p02 -A proxy2011 -l authNoPriv
# 1.3.6.1.4.1.15497
def snmpwalk(base_oid): def snmpwalk(base_oid):
snmpwalkcommand = "snmpwalk %s %s %s" % (snmp_options, opts.host, base_oid) snmpwalkcommand = "snmpwalk %s %s %s" % (snmp_options, opts.host, base_oid)
output = runCommand(snmpwalkcommand + " " + base_oid) output = runCommand(snmpwalkcommand + " " + base_oid)
return output return output
def getTable(base_oid): def getTable(base_oid):
myTable = {} myTable = {}
output = snmpwalk(base_oid) output = snmpwalk(base_oid)
@@ -215,10 +231,12 @@ def getTable(base_oid):
index = oid.strip().split('.') index = oid.strip().split('.')
column = int(index.pop()) column = int(index.pop())
row = int(index.pop()) row = int(index.pop())
if not myTable.has_key(column): myTable[column] = {} if not myTable.has_key(column):
myTable[column] = {}
myTable[column][row] = resultValue myTable[column][row] = resultValue
return myTable return myTable
def check_powermodules(): def check_powermodules():
powermodules = getTable('1.3.6.1.4.1.2.3.51.2.2.4') powermodules = getTable('1.3.6.1.4.1.2.3.51.2.2.4')
index = 1 index = 1
@@ -232,22 +250,27 @@ def check_powermodules():
myStatus = i[status] myStatus = i[status]
myDetails = i[details] myDetails = i[details]
myExists = i[exists] myExists = i[exists]
if myIndex == opts.exclude: continue if myIndex == opts.exclude:
continue
if myExists == "0": if myExists == "0":
num_no = num_no + 1 num_no = num_no + 1
else: else:
if myStatus != "1": if myStatus != "1":
nagios_status(warning) nagios_status(warning)
add_summary( 'Powermodule "%s" status "%s". %s. ' % (myIndex,myStatus,myDetails) ) add_summary('Powermodule "%s" status "%s". %s. ' %
(myIndex, myStatus, myDetails))
else: else:
num_ok = num_ok + 1 num_ok = num_ok + 1
add_long('Powersupply "%s" status "%s". %s. ' % (myIndex,myStatus,myDetails) ) add_long('Powersupply "%s" status "%s". %s. ' %
add_summary( "%s out of %s powermodules are healthy" % (num_ok, len(powermodules) ) ) (myIndex, myStatus, myDetails))
add_perfdata( "'Number of powermodules'=%s" % (len(powermodules) - num_no ) ) add_summary("%s out of %s powermodules are healthy" %
(num_ok, len(powermodules)))
add_perfdata("'Number of powermodules'=%s" %
(len(powermodules) - num_no))
nagios_status(ok) nagios_status(ok)
def check_switchmodules(): def check_switchmodules():
switchmodules = getTable("1.3.6.1.4.1.2.3.51.2.22.3.1.1") switchmodules = getTable("1.3.6.1.4.1.2.3.51.2.22.3.1.1")
# The following oid is undocumented, but contains some useful extra info # The following oid is undocumented, but contains some useful extra info
@@ -265,10 +288,12 @@ def check_switchmodules():
'this module is installed' 'this module is installed'
if healthstate == "1": if healthstate == "1":
nagios_status(ok) nagios_status(ok)
add_long("Module%s health good.\n post=%s" % (myIndex,resultvalue)) add_long("Module%s health good.\n post=%s" %
(myIndex, resultvalue))
else: else:
nagios_status(warning) nagios_status(warning)
add_long("Module%s health bad(%s).\n post=%s" % (myIndex, healthstate,resultvalue) ) add_long("Module%s health bad(%s).\n post=%s" %
(myIndex, healthstate, resultvalue))
add_summary("Problem with Module %s. " % (myIndex)) add_summary("Problem with Module %s. " % (myIndex))
if len(extrainfo) > int(myIndex): if len(extrainfo) > int(myIndex):
try: try:
@@ -276,7 +301,8 @@ def check_switchmodules():
module_type = myExtraInfo[22] module_type = myExtraInfo[22]
module_ip = myExtraInfo[6] module_ip = myExtraInfo[6]
add_long(" type=%s ip=%s" % (module_type, module_ip)) add_long(" type=%s ip=%s" % (module_type, module_ip))
except: pass except:
pass
if exit_status == ok: if exit_status == ok:
add_summary("All switchmodules healthy") add_summary("All switchmodules healthy")
@@ -408,14 +434,15 @@ def check_chassis_status():
nagios_status(warning) nagios_status(warning)
add_summary("Media Trays NOT OK. ") add_summary("Media Trays NOT OK. ")
# status_oids, oids that where 0 == ok # status_oids, oids that where 0 == ok
status_oids = ( 2,3,5,7,8,9,10,11,14,18,19,20,21,22,23,24,25,26,27,28,29,30, ) status_oids = (2, 3, 5, 7, 8, 9, 10, 11, 14, 18,
19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, )
add_long("Other Sensors: ") add_long("Other Sensors: ")
sensor_status = ok sensor_status = ok
for oid in status_oids: for oid in status_oids:
if not chassis_oid.has_key(oid): continue if not chassis_oid.has_key(oid):
continue
oidValue = oids[oid] oidValue = oids[oid]
oidName = chassis_oid[oid] oidName = chassis_oid[oid]
if oidValue == "0": if oidValue == "0":
@@ -442,10 +469,14 @@ def check_bladehealth():
myBladeid = row[bladeid] myBladeid = row[bladeid]
mySeverity = row[severity] mySeverity = row[severity]
myDescription = row[description] myDescription = row[description]
try: myName = bladestate[i][6] try:
except: myName = "" myName = bladestate[i][6]
if mySeverity == "(No severity)": continue except:
add_long( "blade%s (%s): %s %s" % (myBladeid,myName,mySeverity, myDescription) ) myName = ""
if mySeverity == "(No severity)":
continue
add_long("blade%s (%s): %s %s" %
(myBladeid, myName, mySeverity, myDescription))
if opts.exclude: if opts.exclude:
if myDescription.find(opts.exclude) > -1: if myDescription.find(opts.exclude) > -1:
continue continue
@@ -455,27 +486,33 @@ def check_bladehealth():
good_blades += 1 good_blades += 1
else: else:
nagios_status(warning) nagios_status(warning)
add_summary( "blade%s (%s): %s %s. " % (myBladeid,myName,mySeverity, myDescription) ) add_summary("blade%s (%s): %s %s. " %
(myBladeid, myName, mySeverity, myDescription))
if good_blades == total_blades: if good_blades == total_blades:
add_summary( "%s out of %s blades in Good health. " % (good_blades, total_blades)) add_summary("%s out of %s blades in Good health. " %
(good_blades, total_blades))
nagios_status(ok) nagios_status(ok)
else: else:
nagios_status(warning) nagios_status(warning)
def check_systemhealth(): def check_systemhealth():
systemhealthstat = snmpget('1.3.6.1.4.1.2.3.51.2.2.7.1.0') systemhealthstat = snmpget('1.3.6.1.4.1.2.3.51.2.2.7.1.0')
summary = getTable('1.3.6.1.4.1.2.3.51.2.2.7.2.1') summary = getTable('1.3.6.1.4.1.2.3.51.2.2.7.2.1')
index, severity, description, date = (1, 2, 3, 4) index, severity, description, date = (1, 2, 3, 4)
# Sometimes chassis delivers warning when absolutely nothing is going on. Lets work around that # Sometimes chassis delivers warning when absolutely nothing is going on.
# Lets work around that
workaround = [{1: '1', 2: 'Good', 3: 'No critical or warning events', 4: 'No timestamp'}] workaround = [{1: '1', 2: 'Good', 3: 'No critical or warning events', 4: 'No timestamp'}]
# Check overall health # Check overall health
if systemhealthstat == '255': if systemhealthstat == '255':
nagios_status(ok) nagios_status(ok)
add_summary("Bladecenter health: OK. ") add_summary("Bladecenter health: OK. ")
elif systemhealthstat == "2": elif summary.values() == workaround:
if summary.values() == workaround: add_summary("Non-Critical Error (bug in firmware): '%s' " %
add_summary("Non-Critical Error: %s " % workaround[0][description] ) workaround[0][description])
nagios_status(ok) nagios_status(ok)
return return
elif systemhealthstat == "2":
nagios_status(warning) nagios_status(warning)
add_summary("Non-Critical Error. ") add_summary("Non-Critical Error. ")
elif systemhealthstat == "4": elif systemhealthstat == "4":
@@ -486,7 +523,9 @@ def check_systemhealth():
add_summary("Critical. ") add_summary("Critical. ")
else: else:
nagios_status(unknown) nagios_status(unknown)
add_summary("Bladecenter health unkown (oid 1.3.6.1.4.1.2.3.51.2.2.7.1.0 returns %s). " % systemhealthstat) add_summary(
"Bladecenter health unkown (oid 1.3.6.1.4.1.2.3.51.2.2.7.1.0 returns %s). " %
systemhealthstat)
for row in summary.values(): for row in summary.values():
if row[severity] == 'Good': if row[severity] == 'Good':
nagios_status(ok) nagios_status(ok)
@@ -499,27 +538,34 @@ def check_systemhealth():
add_summary("%s. " % (row[description])) add_summary("%s. " % (row[description]))
add_long("* %s. " % (row[description])) add_long("* %s. " % (row[description]))
def check_temperature(): def check_temperature():
# set some sensible defaults # set some sensible defaults
if opts.warning_threshold is None: opts.warning_threshold = 28 if opts.warning_threshold is None:
if opts.critical_threshold is None: opts.critical_threshold = 35 opts.warning_threshold = 28
if opts.critical_threshold is None:
opts.critical_threshold = 35
str_temp = snmpget('1.3.6.1.4.1.2.3.51.2.2.1.5.1.0') str_temp = snmpget('1.3.6.1.4.1.2.3.51.2.2.1.5.1.0')
float_temp, measurement = str_temp.split(None, 1) float_temp, measurement = str_temp.split(None, 1)
float_temp = float(float_temp) float_temp = float(float_temp)
if opts.critical_threshold is not None and float_temp > opts.critical_threshold: if opts.critical_threshold is not None and float_temp > opts.critical_threshold:
nagios_status(critical) nagios_status(critical)
add_summary( "ambient temperature (%s) is over critical thresholds (%s). " % (str_temp, opts.critical_threshold) ) add_summary(
"ambient temperature (%s) is over critical thresholds (%s). " %
(str_temp, opts.critical_threshold))
elif opts.warning_threshold is not None and float_temp > opts.warning_threshold: elif opts.warning_threshold is not None and float_temp > opts.warning_threshold:
nagios_status(warning) nagios_status(warning)
add_summary( "ambient temperature (%s) is over warning thresholds (%s). " % (str_temp, opts.warning_threshold) ) add_summary(
"ambient temperature (%s) is over warning thresholds (%s). " %
(str_temp, opts.warning_threshold))
else: else:
add_summary("Ambient temperature = %s. " % (str_temp)) add_summary("Ambient temperature = %s. " % (str_temp))
add_perfdata( "'ambient_temp'=%s;%s;%s " % (float_temp,opts.warning_threshold,opts.critical_threshold) ) add_perfdata("'ambient_temp'=%s;%s;%s " %
(float_temp, opts.warning_threshold, opts.critical_threshold))
#add_long( "Ambient Temperature = %s" % (str_temp) ) #add_long( "Ambient Temperature = %s" % (str_temp) )
nagios_status(ok) nagios_status(ok)
if __name__ == '__main__': if __name__ == '__main__':
try: try:
set_snmp_options() set_snmp_options()

View File

@@ -2,8 +2,8 @@
Summary: A Nagios plugin to check IBM Bladecenters Summary: A Nagios plugin to check IBM Bladecenters
Name: nagios-okplugin-check_ibm_bladecenter Name: nagios-okplugin-check_ibm_bladecenter
Version: 1.1.2 Version: 4
Release: 3%{?dist} Release: 1%{?dist}
License: GPLv2+ License: GPLv2+
Group: Applications/System Group: Applications/System
URL: http://opensource.ok.is/trac/wiki/Nagios-OKPlugin-check_ibm_bladecenter URL: http://opensource.ok.is/trac/wiki/Nagios-OKPlugin-check_ibm_bladecenter
@@ -40,6 +40,21 @@ rm -rf %{buildroot}
#%config(noreplace) %{_sysconfdir}/nrpe.d/check_bond.cfg #%config(noreplace) %{_sysconfdir}/nrpe.d/check_bond.cfg
%changelog %changelog
* Fri Feb 21 2014 Pall Sigurdsson <palli@opensource.is> 4-1
-
* Fri Feb 21 2014 Unknown name 3-1
- Merge branch 'master' of github.com:opinkerfi/nagios-plugins
(palli@opensource.is)
- ibm_bladecenter - another firmware bug workaround (palli@opensource.is)
- pep8 fixes (palli@opensource.is)
- Fix workaround for firmware bug (palli@opensource.is)
* Thu Feb 20 2014 Pall Sigurdsson <palli@opensource.is> 2-1
- Merge branch 'master' of github.com:opinkerfi/misc (palli@opensource.is)
- --exclude option added. Added workaround around false positives
(palli@opensource.is)
* Thu Aug 23 2012 Pall Sigurdsson <palli@opensource.is> 1.1.2-3 * Thu Aug 23 2012 Pall Sigurdsson <palli@opensource.is> 1.1.2-3
- version number of scripts bumped (palli@opensource.is) - version number of scripts bumped (palli@opensource.is)

View File

@@ -1,3 +0,0 @@
check_ipa
Various checks for IPA http://freeipa.org/ server

19
check_ipa/README.md Normal file
View 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.

View File

@@ -46,10 +46,13 @@ except Exception, e:
# Loop through replication agreements # Loop through replication agreements
for rhost in replication: for rhost in replication:
plugin.add_summary("Replica %s Status: %s" % (rhost[1]['nsDS5ReplicaHost'][0], rhost[1]['nsds5replicaLastUpdateStatus'][0])) plugin.add_summary("Replica %s Status: %s" % (rhost[1]['nsDS5ReplicaHost'][0], rhost[1]['nsds5replicaLastUpdateStatus'][0]))
if rhost[1]['nsds5replicaLastUpdateStatus'][0][:2] != "0 ": if rhost[1]['nsds5replicaLastUpdateStatus'][0][:2] == "0 ":
plugin.status(critical)
else:
plugin.status(ok) plugin.status(ok)
elif rhost[1]['nsds5replicaLastUpdateStatus'][0][:2] == "1 ":
# Busy Replica is not an error, its "unknown" (but its "ok" for now)
plugin.status(ok)
else:
plugin.status(critical)
if not len(replication): if not len(replication):
plugin.add_summary("Warning: No replicas found") plugin.add_summary("Warning: No replicas found")

View 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";)

View File

@@ -3,7 +3,7 @@
Summary: A Nagios plugin to check IPA server status Summary: A Nagios plugin to check IPA server status
Name: nagios-okplugin-%{plugin} Name: nagios-okplugin-%{plugin}
Version: 0.0.3 Version: 0.0.4
Release: 1%{?dist} Release: 1%{?dist}
License: GPLv2+ License: GPLv2+
Group: Applications/System Group: Applications/System
@@ -37,10 +37,17 @@ 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
%changelog %changelog
* Fri Apr 04 2014 Tomas Edwardsson <tommi@tommi.org> 0.0.4-1
- Renamed to markdown (tommi@tommi.org)
- Added examples and documentation (tommi@tommi.org)
- Missing colon (tommi@tommi.org)
- Added missing OK when things worked out (tommi@tommi.org)
* Thu Apr 25 2013 Tomas Edwardsson <tommi@tommi.org> 0.0.3-1 * Thu Apr 25 2013 Tomas Edwardsson <tommi@tommi.org> 0.0.3-1
- Preliminary testing done, released - Preliminary testing done, released
- Various errors in syntax fixed (tommi@tommi.org) - Various errors in syntax fixed (tommi@tommi.org)

View File

@@ -2,7 +2,7 @@
Summary: A Nagios plugin to check Cisco Ironport Summary: A Nagios plugin to check Cisco Ironport
Name: nagios-okplugin-check_ironport Name: nagios-okplugin-check_ironport
Version: 1.1.4 Version: 2
Release: 1%{?dist} Release: 1%{?dist}
License: GPLv2+ License: GPLv2+
Group: Applications/System Group: Applications/System
@@ -37,6 +37,10 @@ rm -rf %{buildroot}
#%config(noreplace) %{_sysconfdir}/nrpe.d/check_bond.cfg #%config(noreplace) %{_sysconfdir}/nrpe.d/check_bond.cfg
%changelog %changelog
* Thu Feb 20 2014 Pall Sigurdsson <palli@opensource.is> 2-1
- Merge branch 'master' of https://opensource.ok.is/git/misc
(palli@opensource.is)
* Tue Jul 31 2012 Pall Sigurdsson <palli@opensource.is> 1.1.4-1 * Tue Jul 31 2012 Pall Sigurdsson <palli@opensource.is> 1.1.4-1
- initial packaging for nagios-okplugin-check_ironport (palli@opensource.is) - initial packaging for nagios-okplugin-check_ironport (palli@opensource.is)

View File

@@ -0,0 +1,117 @@
#!/usr/bin/python
from pynag.Plugins import simple as Plugin, WARNING, CRITICAL, UNKNOWN, OK
from subprocess import Popen, PIPE
import os
def main():
global plugin
plugin = Plugin(must_threshold=False)
plugin.add_arg("l", "logical-volume",
"Comma seperated list of VG/LV, eg vg00/data,vg00/snap",
required=False)
plugin.add_arg("V", "volume-group",
"Comma seperated list of VG, eg vg00,vg01",
required=False)
plugin.add_arg("a", "check-all", "Check all LVs", required=False,
action="store_true")
plugin.activate()
lvs = plugin["logical-volume"] and plugin["logical-volume"].split(
",") or []
vgs = plugin["volume-group"] and plugin["volume-group"].split(",") or []
if not lvs and not vgs and not plugin['check-all']:
plugin.parser.error(
"Either logical-volume or volume-group must be specified")
elif plugin['check-all'] and ( lvs or vgs ):
plugin.parser.error(
"Mixing check-all and logical-volume or volume-group does not make sense")
check_mirror(lvs, vgs, plugin['check-all'], plugin['host'])
(code, message) = (plugin.check_messages(joinallstr="\n"))
plugin.nagios_exit(code, message)
def check_mirror(lv_list, vg_list, check_all, hostname):
# Ensure the right locale for text parsing
"""
:rtype : None
"""
# Change lang setting for string consitency
env = os.environ.copy()
env['LC_ALL'] = 'C'
# Remote execution
if hostname:
cmd = ['check_nrpe', '-H', hostname, '-c', 'get_lvm_mirrors']
# Local
else:
cmd = ["lvs", "--separator", ";", "-o",
"vg_name,lv_name,lv_attr,copy_percent"]
# Execute lvs
ret = None
lvs_output = None
try:
lvs = Popen(cmd, stdout=PIPE, shell=False, env=env)
ret = lvs.wait()
lvs_output = lvs.stdout.readlines()
except Exception, e:
plugin.nagios_exit(UNKNOWN, "Unable to execute lvs: %s" % (e))
if ret != 0:
plugin.nagios_exit(CRITICAL,
"lvs execution failed, return code %i" % (ret))
all_lvs = []
all_vgs = []
# Loop through lvs output
linenumber = 0
for l in lvs_output:
linenumber += 1
try:
vg_name, lv_name, lv_attr, copy_percent = l.strip().split(";")
except ValueError as error:
plugin.add_message(UNKNOWN,
"Unable to parse lvs line %i: %s\n%s" % (
linenumber, error, l))
continue
all_lvs.append("%s/%s" % (vg_name, lv_name))
if vg_name not in all_vgs:
all_vgs.append(vg_name)
if check_all or "%s/%s" % (
vg_name, lv_name) in lv_list or vg_name in vg_list:
if lv_attr[0] != "m" and lv_attr[0] != "M":
plugin.add_message(CRITICAL,
"LV %s/%s not mirrored" % (vg_name, lv_name))
elif lv_attr[2] != "a":
plugin.add_message(CRITICAL,
"LV %s/%s not active" % (vg_name, lv_name))
elif lv_attr[5] != "o":
plugin.add_message(CRITICAL,
"LV %s/%s not open" % (vg_name, lv_name))
elif float(copy_percent or 0) < 100:
plugin.add_message(WARNING, "LV %s/%s Copy Percent %s" % (
vg_name, lv_name, copy_percent))
else:
plugin.add_message(OK, "LV %s/%s functioning" % (vg_name, lv_name))
# Find lvs that were specified in cmd line but were not found via lvs
for v in vg_list:
if v not in all_vgs:
plugin.add_message(CRITICAL, "VG %s not found" % (v))
# Find lvs that were specified in cmd line but were not found via lvs
for l in lv_list:
if l not in all_lvs:
plugin.add_message(CRITICAL, "LV %s not found" % (l))
if __name__ == "__main__":
main()

View File

@@ -0,0 +1 @@
Checks hardware status of MSA disk arrays also known as HP P2000

View 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

View File

@@ -0,0 +1 @@
command[check_msa_hardware]=/usr/lib64/nagios/plugins/check_msa_hardware

14
check_other/README Normal file
View File

@@ -0,0 +1,14 @@
check_other
===========
This plugin is designed to execute another plugin that is given as an argument.
Usually you want this to use the perfdata parsing of pynag and you want to alert on specific thresholds in the other plugin.
Usage:
```
check_other -- check_nrpe -H localhost -c check_load
# Same as above, but alert on performance metric load1
check_other --threshold metric=load1,warn=2..inf -- check_nrpe -H localhost -c check_load
```

50
check_other/check_other Normal file
View File

@@ -0,0 +1,50 @@
#!/usr/bin/env python
# This script runs whatever command is printed on the command line
# Usage:
# ./check_other -- someotherplugin --arguments-for-the-other-plugin
#
# Example:
# ./check_other -- check_nrpe -H localhost
#
# If you want to provide options to check_other (for example to enforce a threshold:
# ./check_other --threshold=load1,warn=5..inf -- check_nrpe -H localhost check_load
import subprocess
import sys
from pynag.Plugins import PluginHelper
from pynag.Utils import runCommand, PluginOutput, PerfData
p = PluginHelper()
p.parser.add_option('--string', dest='string', help='run this command (will be shell expanded, use quotes)')
p.parse_arguments()
# --string was provided
if p.options.string:
return_code, stdout, stderr = runCommand(p.options.string)
# No --string, and no arguments on the command line
elif not p.arguments:
p.parser.error("You need to provide an external command as an argument. Try: %s ls" % sys.argv[0])
# some arguments were provided
else:
try:
proc = subprocess.Popen(p.arguments, shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE,)
stdout, stderr = proc.communicate('through stdin to stdout')
return_code = proc.returncode
except Exception, e:
p.set_summary("Failed to execute '%s': %s " % (p.arguments[0], e))
p.status(3)
p.exit()
p.status(return_code)
other = PluginOutput(stdout)
p.set_summary(other.summary)
p.set_long_output(other.long_output)
p._perfdata = PerfData(other.perfdata)
p.check_all_metrics()
p.exit()

View File

@@ -4,10 +4,6 @@ About
This Nagios plugin checks for available updates using PackageKit This Nagios plugin checks for available updates using PackageKit
http://packagekit.org/ on Linux systems http://packagekit.org/ on Linux systems
Draft
=====
The implementation isn't finished yet.
Why a new plugin? Why a new plugin?
================= =================

View File

@@ -17,7 +17,7 @@
from subprocess import Popen, PIPE from subprocess import Popen, PIPE
from pynag.Plugins import PluginHelper, unknown, ok from pynag.Plugins import PluginHelper, unknown, ok
from collections import defaultdict
known_types = ['Enhancement', 'Normal', 'Bug fix', 'Security'] known_types = ['Enhancement', 'Normal', 'Bug fix', 'Security']
@@ -45,6 +45,11 @@ def main():
for pkg in pkg_updates[update_type]: for pkg in pkg_updates[update_type]:
p.add_long_output(" %s" % pkg) p.add_long_output(" %s" % pkg)
for m in known_types:
m = m.lower()
if not p.get_metric(m):
p.add_metric(m, 0)
p.check_all_metrics() p.check_all_metrics()
p.exit() p.exit()
@@ -57,7 +62,9 @@ def pkcon_get_updates():
:return: { "Bug fix": [ "pkg-1.0.1", "anthr-pkg-3.1.4" ], "Security": [ "pkg2-2.1.1" ], :return: { "Bug fix": [ "pkg-1.0.1", "anthr-pkg-3.1.4" ], "Security": [ "pkg2-2.1.1" ],
""" """
update_types = {} update_types = defaultdict(list)
for t in known_types:
update_types[t] = []
stdout = "" stdout = ""
stderr = "" stderr = ""
@@ -72,7 +79,7 @@ def pkcon_get_updates():
total_updates = 0 total_updates = 0
results_section = False results_section = False
for line in stdout.split("\n"): for line in stdout.splitlines():
if not line: if not line:
continue continue
if line.startswith("There are no updates"): if line.startswith("There are no updates"):
@@ -83,8 +90,6 @@ def pkcon_get_updates():
update_type = line[:13].strip() update_type = line[:13].strip()
update_package = line[13:].strip() update_package = line[13:].strip()
if update_type not in update_types:
update_types[update_type] = []
update_types[update_type].append(update_package) update_types[update_type].append(update_package)
total_updates += 1 total_updates += 1
@@ -94,9 +99,6 @@ def pkcon_get_updates():
if results_section is False: if results_section is False:
raise Exception("pkcon returned no 'Results:' section. Output of pkcon command:\n" + stdout) raise Exception("pkcon returned no 'Results:' section. Output of pkcon command:\n" + stdout)
for t in known_types:
if t not in update_types:
update_types[t] = []
return total_updates, update_types return total_updates, update_types

View File

@@ -3,7 +3,7 @@
Summary: A Nagios plugin to check operating system updates Summary: A Nagios plugin to check operating system updates
Name: nagios-okplugin-%{plugin} Name: nagios-okplugin-%{plugin}
Version: 0.0.6 Version: 0.0.7
Release: 1%{?dist} Release: 1%{?dist}
License: GPLv3+ License: GPLv3+
Group: Applications/System Group: Applications/System
@@ -15,7 +15,6 @@ BuildArch: noarch
Requires: nrpe Requires: nrpe
Requires: pynag Requires: pynag
Requires: PackageKit Requires: PackageKit
Obsoletes: nagios-okplugin-check_yum
%description %description
@@ -32,10 +31,15 @@ rm -rf %{buildroot}
install -D -p -m 0755 %{plugin} %{buildroot}%{_libdir}/nagios/plugins/%{plugin} install -D -p -m 0755 %{plugin} %{buildroot}%{_libdir}/nagios/plugins/%{plugin}
mkdir -p %{buildroot}%{_sysconfdir}/nrpe.d mkdir -p %{buildroot}%{_sysconfdir}/nrpe.d
sed "s^/usr/lib64^%{_libdir}^g" nrpe.d/%{plugin}.cfg > %{buildroot}%{_sysconfdir}/nrpe.d/%{plugin}.cfg 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 %clean
rm -rf %{buildroot} rm -rf %{buildroot}
%post
/sbin/service nrpe status &> /dev/null && /sbin/service nrpe reload || :
%files %files
%defattr(-,root,root,-) %defattr(-,root,root,-)
%doc README.md %doc README.md
@@ -43,6 +47,15 @@ rm -rf %{buildroot}
%config(noreplace) %{_sysconfdir}/nrpe.d/%{plugin}.cfg %config(noreplace) %{_sysconfdir}/nrpe.d/%{plugin}.cfg
%changelog %changelog
* Fri Sep 13 2013 Tomas Edwardsson <tommi@tommi.org> 0.0.7-1
- check_package_updates - minor refactor (palli@opensource.is)
- check_package_updates - fix inconsistent tab/space (palli@opensource.is)
- Removed obsoletes and thresholds (tommi@tommi.org)
- Removed Draft, should be working pretty good (tommi@tommi.org)
- Added --legacy to default since that is the default format (tommi@tommi.org)
- Added nrpe reload since moving from check_yum needs it (tommi@tommi.org)
- Added obsolete for okplugin check_updates (tommi@tommi.org)
* Tue Jul 16 2013 Tomas Edwardsson <tommi@tommi.org> 0.0.6-1 * Tue Jul 16 2013 Tomas Edwardsson <tommi@tommi.org> 0.0.6-1
- Fix failure on a fully patched system (tommi@tommi.org) - Fix failure on a fully patched system (tommi@tommi.org)

View File

@@ -1,2 +1,5 @@
# Critical on security updates, warning if 40 or more total updates # Critical on security updates, warning if 40 or more total updates
command[check_updates]=/usr/lib64/nagios/plugins/check_package_updates --th "metric=security,critical=1..inf" --th "metric=total,warning=40..inf" command[check_package_updates]=/usr/lib64/nagios/plugins/check_package_updates --legacy
# Critical on security updates
command[check_package_updates_security]=/usr/lib64/nagios/plugins/check_package_updates --th "metric=security,critical=1..inf" --legacy

View File

@@ -72,12 +72,11 @@ def getLocalNodeState(dom):
""" """
Get the state of the local node Get the state of the local node
""" """
hostname = socket.gethostname()
nodesList = dom.getElementsByTagName('node') nodesList = dom.getElementsByTagName('node')
nodeState = {} nodeState = {}
for node in nodesList: for node in nodesList:
if node.attributes['name'].value == hostname: if node.attributes['local'].value == "1":
nodeState['name'] = node.attributes['name'].value nodeState['name'] = node.attributes['name'].value
nodeState['state'] = node.attributes['state'].value nodeState['state'] = node.attributes['state'].value
nodeState['rgmanager'] = node.attributes['rgmanager'].value nodeState['rgmanager'] = node.attributes['rgmanager'].value
@@ -95,7 +94,6 @@ def getServiceState(dom, service):
Get the state of the named service Get the state of the named service
""" """
groupList = dom.getElementsByTagName('group') groupList = dom.getElementsByTagName('group')
hostname = socket.gethostname()
serviceState = {} serviceState = {}
for group in groupList: for group in groupList:
if group.attributes['name'].value in (service,"service:"+service,"vm:"+service): if group.attributes['name'].value in (service,"service:"+service,"vm:"+service):

View File

@@ -6,7 +6,7 @@
Summary: A Nagios plugin to check Red Hat Cluster suite (rhel5 and rhel6) Summary: A Nagios plugin to check Red Hat Cluster suite (rhel5 and rhel6)
Name: nagios-okplugin-%{plugin_name} Name: nagios-okplugin-%{plugin_name}
Version: %{version} Version: 1
Release: 1%{?dist} Release: 1%{?dist}
License: GPLv2+ License: GPLv2+
Group: Applications/System Group: Applications/System
@@ -45,6 +45,11 @@ rm -rf %{buildroot}
/etc/nrpe.d/%{plugin_name}.cfg /etc/nrpe.d/%{plugin_name}.cfg
%changelog %changelog
* Thu Feb 20 2014 Pall Sigurdsson <palli@opensource.is> 1-1
- Updated rhcs nrpe config as well (tommi@tommi.org)
- Added check for suspended services -Z (tommi@tommi.org)
- Fix broken libdir on 64-bit platforms (palli@opensource.is)
* Thu May 24 2012 Pall Sigurdsson <palli@opensource.is> 0.0.4-1 * Thu May 24 2012 Pall Sigurdsson <palli@opensource.is> 0.0.4-1
- version bump of check_rhcs (palli@opensource.is) - version bump of check_rhcs (palli@opensource.is)
- check_rhcs_fence added for rhel6 compatibility (palli@opensource.is) - check_rhcs_fence added for rhel6 compatibility (palli@opensource.is)

View File

@@ -74,17 +74,17 @@ OUTPUT=`$CHECK_COMMAND`
RESULT=$? RESULT=$?
if [ $RESULT -gt 0 ]; then if [ $RESULT -gt 0 ]; then
echo "Error - Could not run command $CHECK_COMMAND" echo "UNKNOWN - Could not run command $CHECK_COMMAND"
echo "Error was: $OUTPUT" echo "Error was: $OUTPUT"
exit 3 exit 3
fi fi
# Parse the output from the command # Parse the output from the command
if [ "$OUTPUT" == "$STATUS" ]; then if [ "$OUTPUT" == "$STATUS" ]; then
echo "ok, selinux status is $OUTPUT" echo "OK - SELinux status is $OUTPUT"
exit 0 exit 0
else else
echo "warning, selinux status is $OUTPUT (supposed to be $STATUS)" echo "WARNING - SELinux status is $OUTPUT (supposed to be $STATUS)"
exit 1 exit 1
fi fi

View File

@@ -2,7 +2,7 @@
Summary: A Nagios plugin to check SELinux status on Linux servers Summary: A Nagios plugin to check SELinux status on Linux servers
Name: nagios-plugins-check_selinux Name: nagios-plugins-check_selinux
Version: 1.1 Version: 1.3
Release: 1%{?dist} Release: 1%{?dist}
License: GPLv3+ License: GPLv3+
Group: Applications/System Group: Applications/System
@@ -35,6 +35,12 @@ rm -rf %{buildroot}
%changelog %changelog
* Thu Feb 20 2014 Pall Sigurdsson <palli@opensource.is> 1.3-1
-
* Thu Feb 20 2014 Pall Sigurdsson
-
* Wed May 22 2013 Tomas Edwardsson <tommi@tommi.org> 1.1-1 * Wed May 22 2013 Tomas Edwardsson <tommi@tommi.org> 1.1-1
- new package built with tito - new package built with tito

View File

@@ -2,7 +2,7 @@
Summary: Various nagios plugins to check cpu,memory,interfaces via SNMP Summary: Various nagios plugins to check cpu,memory,interfaces via SNMP
Name: nagios-okplugin-check_snmp Name: nagios-okplugin-check_snmp
Version: 1.0.1 Version: 2
Release: 1%{?dist} Release: 1%{?dist}
License: GPLv2+ License: GPLv2+
Group: Applications/System Group: Applications/System
@@ -45,6 +45,9 @@ rm -rf %{buildroot}
%{_libdir}/nagios/plugins/* %{_libdir}/nagios/plugins/*
%changelog %changelog
* Thu Feb 20 2014 Pall Sigurdsson <palli@opensource.is> 2-1
- make sure nagios does not run us in embedded perl (palli@opensource.is)
* 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

77
check_storwize/README.md Normal file
View 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

View 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()

View 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
View 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

View File

@@ -2,13 +2,14 @@
Summary: A Nagios plugin to compare time on remote host with localhost Summary: A Nagios plugin to compare time on remote host with localhost
Name: nagios-okplugin-check_time Name: nagios-okplugin-check_time
Version: 1.0.1 Version: 1.0.3
Release: 1%{?dist} Release: 1%{?dist}
License: GPLv2+ License: GPLv2+
Group: Applications/System Group: Applications/System
URL: http://opensource.is/trac/wiki/check_time URL: http://opensource.is/trac/wiki/check_time
Source0: http://opensource.ok.is/trac/browser/nagios-plugins/check_time/releases/nagios-okplugin-check_time-%{version}.tar.gz Source0: http://opensource.ok.is/trac/browser/nagios-plugins/check_time/releases/nagios-okplugin-check_time-%{version}.tar.gz
Requires: nagios-nrpe Requires: nagios-nrpe
Requires: bc
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
Packager: Pall Sigurdsson <palli@opensource.is> Packager: Pall Sigurdsson <palli@opensource.is>
@@ -40,6 +41,12 @@ rm -rf %{buildroot}
/etc/nrpe.d/check_time.cfg /etc/nrpe.d/check_time.cfg
%changelog %changelog
* Fri Apr 04 2014 Tomas Edwardsson <tommi@tommi.org> 1.0.3-1
- check_time - Added requirement for bc (tommi@tommi.org)
* Tue Mar 25 2014 Tomas Edwardsson <tommi@tommi.org> 1.0.2-1
- Bump version
* 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

View File

@@ -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.3
Release: 1%{?dist} Release: 1%{?dist}
License: GPLv2+ License: GPLv2+
Group: Applications/System Group: Applications/System
@@ -41,6 +41,12 @@ rm -rf %{buildroot}
/etc/nrpe.d/check_uptime.cfg /etc/nrpe.d/check_uptime.cfg
%changelog %changelog
* Sun Apr 13 2014 Tomas Edwardsson <tommi@tommi.org> 1.0.3-1
- Update tag
* 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

View File

@@ -2,7 +2,7 @@
Summary: A Nagios plugin to check yum updates via NRPE Summary: A Nagios plugin to check yum updates via NRPE
Name: nagios-okplugin-check_yum Name: nagios-okplugin-check_yum
Version: 0.8.2 Version: 1
Release: 1%{?dist} Release: 1%{?dist}
License: GPLv2+ License: GPLv2+
Group: Applications/System Group: Applications/System
@@ -45,6 +45,10 @@ rm -rf %{buildroot}
/etc/nrpe.d/check_yum.cfg /etc/nrpe.d/check_yum.cfg
%changelog %changelog
* Thu Feb 20 2014 Pall Sigurdsson <palli@opensource.is> 1-1
- Merge branch 'master' of github.com:opinkerfi/nagios-plugins
(palli@opensource.is)
* Mon May 27 2013 Tomas Edwardsson <tommi@tommi.org> 0.8.2-1 * Mon May 27 2013 Tomas Edwardsson <tommi@tommi.org> 0.8.2-1
- Fixed nrpe with invalid libdir (tommi@tommi.org) - Fixed nrpe with invalid libdir (tommi@tommi.org)

View 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

View File

@@ -0,0 +1,46 @@
%define debug_package %{nil}
Summary: A Nagios plugin to get network statistics over NRPE
Name: nagios-okplugin-get_network_stat
Version: 1.0.1
Release: 1%{?dist}
License: GPLv2+
Group: Applications/System
URL: https://github.com/opinkerfi/nagios-plugins/okc-get_network_stat
Source0: https://github.com/opinkerfi/nagios-plugins/okc-get_network_stat/%{name}-%{version}.tar.gz
Requires: nagios-plugins-nrpe
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
Packager: Tomas Edwardsson <tommi@tommi.org>
BuildArch: noarch
%description
A Nagios plugin to get network statistics over NRPE
%prep
%setup -q
%build
%install
rm -rf %{buildroot}
install -D -p -m 0755 okc-get_network_stat %{buildroot}%{_libdir}/nagios/plugins/okc-get_network_stat
%clean
rm -rf %{buildroot}
%files
%defattr(-,root,root,-)
#%doc README LICENSE
#%{_libdir}/nagios/plugins/*
%{_libdir}/nagios/plugins/okc-get_network_stat
%changelog
* Wed Apr 02 2014 Tomas Edwardsson <tommi@tommi.org> 1.0.1-1
- new package built with tito
* Wed Apr 2 2014 Tomas Edwardsson <tommi@tommi.org> 1.0.0-1
- Initial release

View File

@@ -0,0 +1,65 @@
#!/usr/bin/python
from pynag.Plugins import PluginHelper, ok, warning, critical, unknown
from pynag.Utils import runCommand
import re
helper = PluginHelper()
helper.parser.add_option("-H", help="Host to connect to", dest="host", default='localhost')
helper.parse_arguments()
if helper.options.host == "localhost":
command="cat /proc/net/dev|sed 's/ */ /g'"
else:
command="/usr/lib64/nagios/plugins/check_nrpe -H '%s' -c get_network_interfaces_stat" % helper.options.host
return_code, stdout, stderr = runCommand(command)
try:
receive, transmit = stdout.split("\n")[1].split("|")[1:]
receive = receive.split()
transmit = transmit.split()
interfaces = []
for int_line in stdout.split("\n")[2:]:
int_line = int_line.strip()
if not int_line:
continue
int_arr = re.split("[: ]+", int_line.strip())
interface = int_arr.pop(0)
if interface == "lo" or interface.startswith('sit'):
continue
interfaces.append(interface)
for i in range(0, len(receive)):
helper.add_metric(
label="%s_rx_%s" % (interface, receive[i]),
value=int_arr.pop(0),
uom="c")
for i in range(0, len(transmit)):
helper.add_metric(
label="%s_tx_%s" % (interface, transmit[i]),
value=int_arr.pop(0),
uom="c")
helper.add_summary("Network interfaces %s" % ", ".join(interfaces))
# Here all metrics will be checked against thresholds that are either
# built-in or added via --threshold from the command-line
helper.check_all_metrics()
# Print out plugin information and exit nagios-style
helper.exit(ok)
except Exception, error:
helper.status(unknown)
helper.add_summary(stdout + stderr)
helper.exit(unknown)
# vim: sts=4 expandtab autoindent

View File

@@ -1 +1 @@
2.1.0-1 check_apcext.pl/ 2.1.2-1 check_apcext.pl/

View File

@@ -1 +1 @@
0.0.3-1 check_bond/ 0.0.4-1 check_bond/

View File

@@ -1 +1 @@
0.0.4-1 check_brocade/ 0.0.5-1 check_brocade/

View File

@@ -1 +1 @@
1.0.1-1 check_dataprotector/ 2-1 check_dataprotector/

View File

@@ -1 +1 @@
1.0.3-1 check_disks.pl/ 1.0.7-1 check_disks.pl/

View File

@@ -1 +1 @@
1.0.2-1 check_eva/ 2-1 check_eva/

View File

@@ -1 +1 @@
1.2-2 check_hpacucli/ 2-1 check_hpacucli/

View File

@@ -0,0 +1 @@
4.1.4-1 check_hpasm/

View File

@@ -1 +1 @@
1.1.2-3 check_ibm_bladecenter/ 4-1 check_ibm_bladecenter/

View File

@@ -1 +1 @@
1.1.4-1 check_ironport/ 2-1 check_ironport/

View File

@@ -0,0 +1 @@
1.0.5-1 check_msa_hardware-pl/

View File

@@ -1 +1 @@
0.0.6-1 check_package_updates/ 0.0.7-1 check_package_updates/

View File

@@ -1 +1 @@
0.0.4-1 check_rhcs/ 1-1 check_rhcs/

View File

@@ -1 +1 @@
1.0.1-1 check_snmp/ 2-1 check_snmp/

View File

@@ -1 +1 @@
1.0.1-1 check_time/ 1.0.3-1 check_time/

View File

@@ -1 +1 @@
1.0.1-1 check_uptime/ 1.0.3-1 check_uptime/

View File

@@ -1 +1 @@
0.8.2-1 check_yum/ 1-1 check_yum/

View File

@@ -1 +1 @@
1.0-1 check_cifs/ 1.1-1 check_cifs/

View File

@@ -0,0 +1 @@
1.0.1-1 okc-get_network_stat/

View File

@@ -1 +1 @@
0.0.3-1 check_ipa/ 0.0.4-1 check_ipa/

View File

@@ -1 +1 @@
1.0-1 check_bl/ 1.1-1 check_bl/

View File

@@ -1 +1 @@
1.0-1 check_cpu.sh/ 2-1 check_cpu.sh/

View File

@@ -1 +1 @@
1.1-1 check_selinux/ 1.3-1 check_selinux/

View File

@@ -1,36 +1,20 @@
# Fedora FC18 # RHEL 7 Production
[test-fc18-x86_64] [production-el7-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 = epel-7-x86_64
rsync = tito@opensource.is:/var/www/sites/opensource.ok.is/repo/rhel7/x86_64/
# RHEL 7 Test
[test-el7-x86_64]
releaser = tito.release.YumRepoReleaser
builder = tito.builder.MockBuilder
builder.mock = epel-7-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/rhel7/x86_64/
[production-fc18-x86_64] # RHEL 6 Production
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
@@ -61,6 +45,21 @@ builder.mock = epel-5-i386
createrepo_command = createrepo -s sha1 . createrepo_command = createrepo -s sha1 .
rsync = tito@opensource.is:/var/www/sites/opensource.ok.is/repo/rhel5/i386/ rsync = tito@opensource.is:/var/www/sites/opensource.ok.is/repo/rhel5/i386/
# RHEL 6 Test
[test-el6-x86_64]
releaser = tito.release.YumRepoReleaser
builder = tito.builder.MockBuilder
builder.mock = epel-6-x86_64
builder.test = 1
rsync = tito@opensource.is:/var/www/sites/opensource.ok.is/repo/testing/rhel6/x86_64/
[test-el6-i386]
releaser = tito.release.YumRepoReleaser
builder = tito.builder.MockBuilder
builder.mock = epel-6-i386
builder.test = 1
rsync = tito@opensource.is:/var/www/sites/opensource.ok.is/repo/testing/rhel6/i386/
# RHEL 5 Testing # RHEL 5 Testing
[test-el5-x86_64] [test-el5-x86_64]
@@ -81,20 +80,22 @@ createrepo_command = createrepo -s sha1 .
rsync = tito@opensource.is:/var/www/sites/opensource.ok.is/repo/testing/rhel5/i386/ rsync = tito@opensource.is:/var/www/sites/opensource.ok.is/repo/testing/rhel5/i386/
# RHEL 6 Test
[test-el6-x86_64]
releaser = tito.release.YumRepoReleaser
builder = tito.builder.MockBuilder
builder.mock = epel-6-x86_64
builder.test = 1
rsync = tito@opensource.is:/var/www/sites/opensource.ok.is/repo/testing/rhel6/x86_64/
[test-el6-i386] # Fedora FC20
[production-fc20-x86_64]
releaser = tito.release.YumRepoReleaser releaser = tito.release.YumRepoReleaser
builder = tito.builder.MockBuilder builder = tito.builder.MockBuilder
builder.mock = epel-6-i386 builder.mock = fedora-20-x86_64
rsync = tito@opensource.is:/var/www/sites/opensource.ok.is/repo/fedora20/x86_64/
# Fedora FC20
[test-fc20-x86_64]
releaser = tito.release.YumRepoReleaser
builder = tito.builder.MockBuilder
builder.mock = fedora-20-x86_64
builder.test = 1 builder.test = 1
rsync = tito@opensource.is:/var/www/sites/opensource.ok.is/repo/testing/rhel6/i386/ rsync = tito@opensource.is:/var/www/sites/opensource.ok.is/repo/testing/fedora20/x86_64/