Search Exchange

Search All Sites

Nagios Live Webinars

Let our experts show you how Nagios can help your organization.

Contact Us

Phone: 1-888-NAGIOS-1


Remember Me


50 votes
Current Version
Last Release Date
FileDescription Version 1.59 Version 1.60 Version 1.62 Version 1.63
Network Monitoring Software - Download Nagios XI
Log Management Software - Nagios Log Server - Download
Netflow Analysis Software - Nagios Network Analyzer - Download
Check hardware health of HP Proliant Servers by querying the iLO2/3/4/5 Management Controller.
Check hardware health of HP Proliant Servers by querying the
iLO2/3/4/5 Management Controller. No need for snmp or installation of
Checks if all sensors are ok, returns warning on high temperatures and fan failures and critical on overall health failure.
A PERL plugin using Nagios::Plugin, IO::Socket::SSL and XML::Simple.

The plugin makes use of the HP Lights-Out XML scripting interface.
HP provides some PERL scripting samples:

Please note that the plugin shows only temperature sensors by default. Faulty hardware components are only listed if iLO returns error state.

Additional options:
-e: plugin ignores "syntax error" messages in the XML output. This may help for older firmwares.
-n: output without temperature listing.
-d: add PerfParse compatible temperature output.
-v: print out the full XML output from the BMC.
-3: support for iLO3|4
-a: check fan redundancy (only some models)
-c: check drive bays (only some models)
-o: check power redundancy (only some models)
-b: temperature output with location
-l: parse iLO eventlog
-b: show temperature with location
-x: ignore battery missing
-i: ignore NIC Link Down status (iLO4).
-g: display additional infos like firmware version and servername (may need increased timeout!)
-f: read input from file instead from iLO, possible to feed -v output to it
--sslopts: Defaults to 'SSL_verify_mode => SSL_VERIFY_NONE'. Use 'SSL_verify_mode => SSL_VERIFY_NONE, SSL_version => "TLSv1"' to avoid TLS Downgrade bug.


First test if you can reach the management controller with a web
browser. The plugin only works if the https interface is reachable.

Install the PERL modules Nagios::Plugin, IO::Socket::SSL and
XML::Simple. Copy the plugin to your nagios plugin directory and make sure that the nagios user can execute it.

Put this in your nagios config:

define command {

command_name check_ilo2_health
command_line $USER1$/ -u $USER10$ -p $USER11$ -H $HOSTADDRESS$


Assuming that $USER1$ contains the path to the plugin, $USER10$ the
username and $USER11$ the password for the management controller.

Set up the appropriate services.

Hint: All management controllers have their own host definition in my nagios setup. So every Proliant Server with host_name foo has a management controller with host_name foo-ilo2.

1. Dump iLO output with -v by redirecting to a file.
2. Edit the file and change some elements with to another condition.
3. Read the file with -f.

Bug reports:
Please send an email and attach the -v output. You may want to remove addresses and serial numbers from the file.
Reviews (38)
We're using the Plugin in Version 1.63 and we got the following message on some ESX-Hosts:

"ILO2_HEALTH CRITICAL - (ProLiant DL380 Gen10 - SystemROM: U30 v2.00 (02/02/2019) - Serial: CZ283301KB - iLO 5 FW 1.40 Feb 05 2019 - Servername: lm009esx.hdag.local) BATTERY Not Installed"

Is there a possibility to Whitelist this Battery-Service?

Thanks for your reply and help.
byrstevens, December 26, 2018
I had my controller disable cache due to a battery failure, which I didn't care about cause my server doesn't store anything important. I just wanted to monitor the disk redundancy status for availability. I had to add two options: [-y] to ignore CACHE_MODULE_STATUS and [-z] to ignore STORAGE STATUS in 'HEALTH_AT_A_GLANCE'.

@@ -189 +189,2 @@
- [ -i|--ignorelinkdown ] [ -x|--ignorebatterymissing ] [ -s|--sslv3 ]
+ [ -i|--ignorelinkdown ] [ -x|--ignorebatterymissing ] [ -y|--ignorecachestatus ]
+ [ -z|--ignorestoragestatus ] [ -s|--sslv3 ]
@@ -277,0 +279,14 @@
+ spec => 'ignorecachestatus|y',
+ help =>
+ qq{-y, --ignorecachestatus
+ Ignore Smart Controller cache status.},
+ spec => 'ignorestoragestatus|z',
+ help =>
+ qq{-z, --ignorestoragestatus
+ Ignore Storage "at a glance" status (still checks disks).},
@@ -374,0 +390,2 @@
+my $ignorecachestatus = defined($p->opts->ignorecachestatus) ? 1 : 0;
+my $ignorestoragestatus = defined($p->opts->ignorestoragestatus) ? 1 : 0;
@@ -609,0 +627,3 @@
+ if ($componentstate eq 'Degraded' && $ignorestoragestatus ) {
+ next
+ }
@@ -747 +767 @@
- if($cachestatus && $cachestatus ne 'OK') {
+ if($cachestatus && $cachestatus ne 'OK' && ! $ignorecachestatus ) {
bysandmannmi, August 27, 2018
I get check_ilo2_health with HP ILO 3 v. 1.88 not to run.

(./che..-u xx -p xx -H -3)
ILO2_HEALTH2 UNKNOWN - ERROR: Failed to establish SSL connection with SSL connect attempt failed error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure.
byjuangranados, February 4, 2018
1 of 1 people found this review helpful
For those with problems with ILO3, you have to specify the SSL cipher. In my case, in order to connect with an ILO 3 v1.89, I had to use:
--sslopts 'SSL_cipher_list => "DES-CBC3-SHA",SSL_verify_mode => SSL_VERIFY_NONE'

You can check available ciphers of ILO using cnark ( -h -p 443 --insecure
byTsintaris, September 19, 2017
Trying to make it work but I get the error:

ILO2_HEALTH UNKNOWN - ERROR: Failed to establish SSL connection with XX.XX.XX.XX:443 SSL connect attempt failed because of handshake problems error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure.

Trying to run it from ubuntu 14.04 server using 1.60 version of script, against a ProLiant DL380 G7 server with iLO3 1.87..
Tried all the hints in the comments...
Any help would be appreciated
byunexus, March 14, 2017
REally good plugin that has been working really well for us on all version of iLO ... except one DL380 which is running iLO4

I get the exact same error that is alos reported in January 2016 further don this thread:-

CHECK_ILO2_HEALTH.PL UNKNOWN - plugin timed out (timeout 15s)

Tried various options on the command line but as yet I've been unable to get this to work.
Thank you for the plugin.
It works with different options with most of my servers but one where I get the following:
ILO UNKNOWN - ERROR: Failed to establish SSL connection with IO::Socket::IP configuration failed.

Any help is much appreciated.
P.S. plugin version 1.60
bymigibtsnet, November 2, 2016
If you get an error like this:
ILO2_HEALTH UNKNOWN - ERROR: Failed to establish SSL connection with :443 IO::Socket::IP configuration failed.
you have to change the tls value in the source code.
ILO3: change TLSv1 to TLSv11
ILO4: change TLSv1 to TLSv12
Tested with ILO3 v1.87+ and ILO4 v2.4+
byjpro, April 14, 2016
1 of 1 people found this review helpful
This works well, after I patched it to use Monitoring::Plugin instead of Nagios::Plugin (that has now been removed because of a Nagios Enterprise dispute).

For v1.60 replace line 164 with
use Monitoring::Plugin;
and line 177 with
our $p = Monitoring::Plugin->new(
cool plugin, started with a minor "Nagios::Plugin" issue, replaced it with Monitoring::Plugin or Nagios::Monitoring::Plugin

and now it's working when run ./ -H -u -p

But because I have seperated IP (, one for server interface and one for ilo interface ( the try to connect the server IP, do I really need to hardcode the ILO IP in the service definition or any surgestion for multiple IP


define host{
use ...
host_name ...

How would the service definition look for this?
bymarcel.oliveira, January 14, 2016
1 of 1 people found this review helpful
It's a very good tool, working very well with ilo 2/3/4, but when I try to use with newest ilo4 version it's not working and i got the message:

CHECK_ILO2_HEALTH.PL UNKNOWN - plugin timed out (timeout 15s)

but for all ILO 2/3 and 4 firm version below 7 it's working properly. COuld you please help me to solve it?
byofflinehoster, September 9, 2015
./ -u username -p password -n -H -t 60 -g

This failing with the error:
ILO2_HEALTH UNKNOWN - ERROR: Syntax error: Line #0: syntax error near "" in the line: "".

But withour -g i get:
ILO2_HEALTH OK - (Board-Version: ILO2)
ERROR: Failed to establish SSL connection
just as the ones below.
This is on FreeBSD 10-STABLE with OpenSSL 1.0.1p and IO-Socket-SSL-2.016. Setup worked OK on previous versions and so far have not figured out how to patch - not very good at Perl...
Works great on a lot of other combos of DL360/380 G5/6/7/8!
there is a problem with Debian 8 or rather openssl 1.x
to fix the problem you have to replace following:

new(PeerAddr => $host, SSL_verify_mode => SSL_VERIFY_NONE, $sslv3 ?
'SSLv3' ) : () );
> $client = new IO::Socket::SSL->new(PeerAddr => $host, SSL_verify_mode => SSL_VERIFY_NONE, SSL_version => $sslv3 ?
> 'SSLv3' : 'TLSv1' );
bynorcon, July 14, 2015
i get the following error: ILO2_HEALTH CRITICAL - Drive Bay 1: Spun Down, Drive Bay 2: Spun Down, Drive Bay 3: Spun Down, Drive Bay 4: Spun Down, Drive Bay 5: Spun Down, Drive Bay 6: Spun Down, Drive Bay 7: Spun Down, Drive Bay 8: Spun Down

With this command:$USER1$/ -H $ARG3$ -u $ARG1$ -p $ARG2$ -c -o -d -n -t 60

Is this an unsupported Server for "-c: check drive bays"? ProLiant DL380 G6
First of all, thanks for this plugin! :)

I'm getting this error:
./ -H [iLO] -u [USER] -p [PASSWORD]
Bareword "SSL_VERIFY_NONE" not allowed while "strict subs" in use at ./ line 384.

How can i solve this?
Hello from Germany. We use this plugin for some years now and it is great. Current Version 1.56 is installed on our nagios system.

But at the moment we ran in a little problem since we installed the latest ILO 4 2.03 firmware HP submitted in january 2015. - Now nagios/the plugin shows a "Power_Supply Inlet Temperature Warning" on some ILO4 servers although the ILO4 itself is happy with all temperatures.

ILO2_HEALTH WARNING - (Board-Version: ILO=3) Power_Supply_2: Inlet Temperature Warning

Any ideas on that ?
byalaselva, January 14, 2015
It does what it says. Thanks
./ -H x.x.x.x -u user -p password

and i get:

ILO2_HEALTH UNKNOWN - ERROR: No parseable output.
bytanelv, October 7, 2014
1 of 1 people found this review helpful
needed to add SSL_version => 'TLSv1' to connect command to make it work after ubuntu upgrade.
if i did not do that, i got SSL error

$client = new IO::Socket::SSL->new(PeerAddr => $host, SSL_verify_mode => SSL_VERIFY_NONE, SSL_version => 'TLSv1') or die "error=$!, ssl_error=$SSL_ERROR";
Page 1 of 2