This a short and simple guide, explaining how to set up remote monitoring of Linux hosts using NRPE in Nagios. The procedure is simple, but having searched for information on this earlier today I didn’t find a straightforward all-inclusive guide, so I’ve written my own.
These instructions were written with Nagios 3.0.6, and they assume that you already have a working Nagios monitoring server. They assume that the monitoring server was installed from RPM, not from source (some paths will vary).
Configuring the remote server
First, we install the NRPE on the remote server to be monitored. This comes as standard in the Fedora repositories, but on CentOS you’ll need to add the EPEL repository first.
yum install nrpe
We’ll need to make one or two changes to get it working. First open up /etc/nagios/nrpe.cfg
and find the allowed_hosts
directive. Replace it with the IP address of your Nagios monitoring server.
allowed_hosts=123.123.123.123
Edit your /etc/sysconfig/iptables
and add a line to allow port 5666/TCP from the monitoring server’s IP address.
-A INPUT -m tcp -p tcp -s 123.123.123.123--dport 5666 -j ACCEPT
Finally, restart iptables
and start NRPE to get it working. We also tell NRPE to start on boot.
service iptables restart service nrpe start chkconfig nrpe on
Configuring the Nagios server
Edit your commands.cfg (usually in /etc/nagios/objects/
if you installed from RPM) and add the following command definition:
define command{ command_name check_nrpe command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ }
If this is your first remote Linux host to monitor, create a new host definition file in the same directory as commands.cfg
, e.g. linux.cfg
. Make a host definition for your new server:
define host{ use linux-server host_name myserver alias My Server address 234.234.234.234 }
Add the following to it as a test to show it works:
define service{ use generic-service host_name myserver service_description PING check_command check_ping!100.0,20%!500.0,60% } define service{ use generic-service host_name yourserver service_description Load check_command check_nrpe!check_load }
Restart Nagios and ensure that both tests work OK. If so, we can move on to some custom test.
Custom checks
The default NRPE client comes with a handful of built-in tests. You can see these near the bottom of nrpe.cfg
on your remote machine. But they’re not very exciting, and you’ll probably want to use some of the other checks. If you want to see a list of the available checks in your yum repo, try this:
yum list available nagios-plugins-*
Install any that take your fancy. You’ll need to set up a definition for them in your nrpe.cfg
. Use the examples in the file, and try running the Nagios plugin yourself to see if it gives you any clues about the arguments it wants.
Please note, in the default config of NRPE, you cannot use placeholders like $ARG1$
, for security reasons. Either hardcode the values in, like
command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1
or enable dont_blame_nrpe=1
further up in the file. There is a security risk associated with doing this. Your funeral!
Restart NRPE again, and let’s move on to setting up your Nagios server. There is no need to create a new command definition, since we are using NRPE again. So open up linux.cfg
and let’s add a service definition for the check_hda1
that exists in nrpe.cfg
.
define service{ use generic-service host_name myserver service_description Disk status check_command check_nrpe!check_hda1 }
Restart Nagios again and your new checks should appear. Go ahead and install any useful plugins from your yum repository, or have a look at Monitoring Exchange, a great source of free Nagios plugins.
I wrote my own plugins for monitoring your account balance with AQL and checking for the latest installed kernel. One day I will probably get round to uploading them to Monitoring Exchange.