Monitoring your sites and servers with Nagios
by admin0 on Jul.06, 2008, under Web Hosting
PART 1
Nagios is (IMHO) the de-facto standard in website and server monitoring. It has been around for quite some time. Here I will talk through the functionality and how to install and configure Nagios.
We shall shortly be offering remote monitoring, configuration and alerting as a service, please contact us if this is something you would like to discuss.
For the purposes of this tutorial, I will be installing Nagios on a Fedora Core server and monitoring a remote CentOS server through linux firewalls and a router with NAT (though if you are not usng firewalls you can simply ignore those steps).
Functionality:
In short, nagios is a monitoring tool, the depth at which it can check services and servers is quite suprising for a new user. Out of the box, some of it’s most useful checks are:
- host-alive (though ping_check / icmp_check)
- Current CPU load
- Current logged in users
- PING
- Root partition size/space
- Free space on harddrives
- SSH functionality
- FTP functionality
- Monitor any service(s)
- SWAP useage
- Total running processes
- Total zombie processes
….and many more. Nagios does this by querying these services on local and remote boxes. When all is well, Nagios displays a big green “OK”, when the warning threshold is reached then an amber “WARNING” is given and when a check fails, a red “CRITICAL” alert is given. Nagios can also be configured to email, text or otherwise alert you of a failed service. For the purposes of the tutorial, we’ll be using email as an alert method. NB: Use a third party email address (such as hotmail/yahoo/gmail) for alerting as it is unlikely to be affected by any service outages.
Nagios will monitor the local machine it is installed on by default, it’s most practical to be using Nagios to monitor a remote machine as well, you can then also install Nagios on the remote machine to monitor the connectivity of the 1st machine thereby ensuring redundant checking of all of your services. It also means that if connectivity to your local machine goes down, the remote machine can alert you of it. The downsides to this (if you do it across many machines) are that you can receive a high number of alerts if a single service goes down. A round-robin approach could solve this for you. For now, we’ll look at two machines monitoring each other).
Installation of Nagios (local machine):
These instructions are specific to RedHat based OS’s. Whilst they may work on other distributions, you should be more careful and aware of what you are doing. For my installation, I installed on Fedora Core 8 using these instructions.
Prerequisites
During portions of the installation you’ll need to have root access to your machine.
Make sure you’ve installed the following packages on your Fedora installation before continuing.
- Apache
- GCC compiler
- GD development libraries
You can use yum to install these packages by running the following commands (as root):
yum install httpd yum install gcc yum install glibc glibc-common yum install gd gd-devel
1 ) Create Account Information
Become the root user.
su -l
Create a new nagios user account and give it a password.
/usr/sbin/useradd -m nagios passwd nagios
Create a new nagcmd group for allowing external commands to be submitted through the web interface. Add both the nagios user and the apache user to the group.
/usr/sbin/groupadd nagcmd /usr/sbin/usermod -G nagcmd nagios /usr/sbin/usermod -G nagcmd apache
2 ) Download Nagios and the Plugins
Create a directory for storing the downloads.
mkdir ~/downloads cd ~/downloads
Download the source code tarballs of both Nagios and the Nagios plugins (visit http://www.nagios.org/download/ for links to the latest versions). At the time of writing, the latest versions of Nagios and the Nagios plugins were 3.0.3 and 1.4.11, respectively.
wget http://osdn.dl.sourceforge.net/sourceforge/nagios/nagios-3.0.2.tar.gz wget http://osdn.dl.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.11.tar.gz
3 ) Compile and Install Nagios
Extract the Nagios source code tarball.
cd ~/downloads tar xzf nagios-3.0.2.tar.gz cd nagios-3.0.2
Run the Nagios configure script, passing the name of the group you created earlier like so:
./configure --with-command-group=nagcmd
Compile the Nagios source code.
make all
Install binaries, init script, sample config files and set permissions on the external command directory.
make install make install-init make install-config make install-commandmode
Don’t start Nagios yet - there’s still more that needs to be done…
4 ) Customize Configuration
Sample configuration files have now been installed in the /usr/local/nagios/etc directory. These sample files should work fine for getting started with Nagios. You’ll need to make just one change before you proceed…
Edit the /usr/local/nagios/etc/objects/contacts.cfg config file with your favorite editor and change the email address associated with the nagiosadmin contact definition to the address you’d like to use for receiving alerts.
vi /usr/local/nagios/etc/objects/contacts.cfg
5 ) Configure the Web Interface
Install the Nagios web config file in the Apache conf.d directory.
make install-webconf
Create a nagiosadmin account for logging into the Nagios web interface. Remember the password you assign to this account - you’ll need it later.
htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
Restart Apache to make the new settings take effect.
service httpd restart
6 ) Compile and Install the Nagios Plugins
Extract the Nagios plugins source code tarball.
cd ~/downloads tar xzf nagios-plugins-1.4.11.tar.gz cd nagios-plugins-1.4.11
Compile and install the plugins.
./configure --with-nagios-user=nagios --with-nagios-group=nagios make make install
7 ) Start Nagios
Add Nagios to the list of system services and have it automatically start when the system boots.
chkconfig --add nagios chkconfig nagios on
Verify the sample Nagios configuration files.
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
If there are no errors, start Nagios.
service nagios start
8 ) Modify SELinux Settings
Fedora ships with SELinux (Security Enhanced Linux) installed and in Enforcing mode by default. This can result in “Internal Server Error” messages when you attempt to access the Nagios CGIs.
See if SELinux is in Enforcing mode.
getenforce
Put SELinux into Permissive mode.
setenforce 0
To make this change permanent, you’ll have to modify the settings in /etc/selinux/config and reboot.
Instead of disabling SELinux or setting it to permissive mode, you can use the following command to run the CGIs under SELinux enforcing/targeted mode:
chcon -R -t httpd_sys_content_t /usr/local/nagios/sbin/ chcon -R -t httpd_sys_content_t /usr/local/nagios/share/
For information on running the Nagios CGIs under Enforcing mode with a targeted policy, visit the NagiosCommunity.org wiki at http://www.nagioscommunity.org/wiki.
9 ) Login to the Web Interface
You should now be able to access the Nagios web interface at the URL below. You’ll be prompted for the username (nagiosadmin) and password you specified earlier.
http://localhost/nagios/
Click on the “Service Detail” navbar link to see details of what’s being monitored on your local machine. It will take a few minutes for Nagios to check all the services associated with your machine, as the checks are spread out over time.
10 ) Other Modifications
Make sure your machine’s firewall rules are configured to allow access to the web server if you want to access the Nagios interface remotely.
Configuring email notifications is out of the scope of this documentation. While Nagios is currently configured to send you email notifications, your system may not yet have a mail program properly installed or configured. Refer to your system documentation, search the web, or look to the NagiosCommunity.org wiki for specific instructions on configuring your system to send email messages to external addresses. More information on notifications can be found here.
11 ) You’re Done
Congratulations! You sucessfully installed Nagios. Your journey into monitoring is just beginning.
So that gets you monitoring your local machine which is very handy, you can also repeat these instructions on a second machine and follow the next steps to start monitoring remote systems. By setting up a second machine on a different connection, you can monitor the machine you have just setup and therefore know if it goes down.
Carry on with PART 2 - Setting up Nagios checks on a remote Linux system
OR
PART 3 - Setting up Nagios checks on a remote Windows system
Images:
Nagios home
Service detail page:














July 7th, 2008 on 11:00 am
Good tutorial. I have already done this much. But can’t get further. I have installed munin yesterday, that was easier than nagois, it seems munin will not alert you when service go down. Will nagois will track remote systems load, io stats, banwidth usage easily like munin do ?
July 7th, 2008 on 1:26 pm
That’s a shame, I really think Nagios is best in my experience. The next tutorials deal with monitoring remote servers (is that what you didn’t manage to get working?).
If you do decide to give Nagios another go, we’d happily help you out with it.
To answer your questions - yes, load, users, bandwidth, disk I/O memory and page useage. It will also check particular sites for particular strings (useful for monitoring the correct operation of dynamic sites).
July 7th, 2008 on 7:53 pm
It’s worth me saying that this post was simply the first step in a group of posts around Nagios. This gives the basic configuration and sets the scene for the rest of the posts.
The next post is how to configure checks on remote systems and it’s taking longer than I thought to write it out and get the images.
I’ll do it as soon as I can though…it will make more sense once all the posts are together
August 11th, 2008 on 5:24 am
Consider GroundWork Monitor: it’s easier to install, and has Nagios built right into it, along with RRDtool, Nmap, and dozens of other open source packages, resulting in a fully-featured IT monitoring tool. It adds a point-and-click GUI for Nagios configuration, and saves to standard Nagios config files.
RPMs for RHEL / CentOS are available and downloadable from Sourceforge or our website.
Cheers, -Peter
Peter Mui, Community Director
GROUNDWORK Open Source, Inc.
August 11th, 2008 on 12:36 pm
I’ll definitely check it out, and perhaps do an article on it. Thanks for the suggestion.
December 31st, 2008 on 2:56 pm
Really nice blog.
Have you had an opportunity to put together a follow-up to this? Specifically, configuring Nagios for server monitoring?
February 10th, 2009 on 11:15 pm
I haven’t I’m afraid, everything is so busy here at the moment. Do you have any specific questions?
I have started using opsview which includes nagios - most importantly it’s automatic graphing of all service checks. Perhaps there’s a call for writing something up on that…..