Nagios Installation and configuration

What is nagios ?

Nagios is a host and service monitor designed to inform you of network problems before your clients, end-users or managers do. It has been designed to run under the Linux operating system, but works fine under most *NIX variants as well. The monitoring daemon runs intermittent checks on hosts and services you specify using external "plugins" which return status information to Nagios. When problems are encountered, the daemon can send notifications out to administrative contacts in a variety of different ways (email, instant message, SMS, etc.). Current status information, historical logs, and reports can all be accessed via a web browser.

Nagios Features

Nagios has a lot of features, making it a very powerful monitoring tool. Some of the major features are listed below:

Monitoring of network services (SMTP, POP3, HTTP, NNTP, PING, etc.)

Monitoring of host resources (processor load, disk and memory usage, running processes, log files, etc.)

Monitoring of environmental factors such as temperature

Simple plugin design that allows users to easily develop their own host and service checks

Ability to define network host hierarchy, allowing detection of and distinction between hosts that are down and those that are unreachable

Contact notifications when service or host problems occur and get resolved (via email, pager, or other user-defined method)

Optional escalation of host and service notifications to different contact groups

Ability to define event handlers to be run during service or host events for proactive problem resolution

Support for implementing redundant and distributed monitoring servers

External command interface that allows on-the-fly modifications to be made to the monitoring and notification
behavior through the use of event handlers, the web interface, and third-party applications

Retention of host and service status across program restarts

Scheduled downtime for suppressing host and service notifications during periods of planned outages

Ability to acknowledge problems via the web interface

Web interface for viewing current network status, notification and problem history, log file, etc.

Simple authorization scheme that allows you restrict what users can see and do from the web interface

Nagios Requirements

The only requirement of running Nagios is a machine running Linux (or UNIX variant) and a C compiler. You will probably also want to have TCP/IP configured, as most service checks will be performed over the network.

You are not required to use the CGIs included with Nagios. However, if you do decide to use them, you will need to have the following software installed.

A web server (preferrably Apache)

Thomas Boutell's gd library version 1.6.3 or higher (required by the statusmap and trends CGIs)

Download Nagios

Nagios Documentation

Nagios Screenshots

Nagios FAQ

Installing Nagios in Debian From Source Code


The below packages are very important to install on your debian system to complete the nagios installation without any problem

#apt-get install make gcc g++

Create Nagios User/Group

You're probably going to want to run Nagios under a normal user account, so add a new user (and group) to your system with the following command (this will vary depending on what OS you're running):

#adduser nagios

This should create the user account and a default group with the same name (nagios). This can be checked by

# grep nagios /etc/passwd

This should show the group (if created) with the members.

If the group is missing then create the group by,

# groupadd nagios

This group can be used as the group that  Nagios uses as a Command group.

Identify Web Server User

You're probably going to want to issue external commands (like acknowledgements and scheduled downtime) from the web interface. To do so, you need to identify the user your web server runs as (typically apache, although this may differ on your system). This setting is found in your web server configuration file. The following command can be used to quickly determine what user Apache is running as (paths may differ on your system):

# grep "^User" /etc/apache2/apache2.conf

Add Webserver user (www-data/apache) and Nagios user (nagios)

# usermod -G nagios nagios

#usermod -G www-data,nagios www-data

Check if the users are the members of the group by

# grep nagios /etc/group

Create Installation Directory

Create the base directory where you would like to install Nagios as follows

#mkdir /usr/local/nagios

Change the owner of the base installtion directory to be the Nagios user and group you added earlier as follows:

#chown -R nagios:nagios /usr/local/nagios

Prior to that, it is imporant to install the GD-Utils for the Status Maps to work properly.

In Debian, the following should install the required libraries:

# apt-get install libgd2-xpm libgd2-xpm-dev libgd2 libgd2-dev libpng12-dev libjpeg62-dev libgd-tools libpng3-dev

Now, download the GD-Utils from the following website:

Untar the downloaded Tar file by

# tar -zxvf gd-2.0.33.tar.gz

Change to the directory and run the config script.

# cd gd-2.033

# ./configure

Now, install using

# make && make install

This should install the GD-Utils.

Download the latest version of nagios from the following link

Unpacking The Distribution

To unpack the Nagios distribution, use the following command

#tar xzf nagios-2.6.tar.gz


#unp nagios-2.6.tar.gz

If you want to install unp package check here

This will create the Nagios-version folder (nagios-2.6)

Change directory to the newly created directory

#cd nagios-version (nagios-2.6)

Run the configure script

# ./configure --prefix=/usr/local/nagios --with-cgiurl=/nagios/cgi-bin --with-htmurl=/nagios/ --with-nagios-user=nagios --with-nagios-group=nagios --with-command-group=nagios

--prefix=/usr/local/nagios is the Nagios root folder
--with-cgiurl=/nagios/cgi-bin is the Nagios CGI folder
--with-htmurl=/nagios/ is the Nagios HTML/Website folder
--with-nagios-user=nagios is the Nagios user
--with-nagios-group=nagios is the Nagios group
--with-command-group=nagios is the Nagios command group which has webserver user (Apache) and the nagios user as members.

If you want more oprtion just type the following command

#./configure --help

 ./configure --help
`configure' configures this package to adapt to many kinds of systems.

Usage: ./configure [OPTION]... [VAR=VALUE]...

To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE.  See below for descriptions of some of the useful variables.

Defaults for the options are specified in brackets.

 -h, --help              display this help and exit
     --help=short       display options specific to this package
     --help=recursive  display the short help of all the included packages
 -V, --version           display version information and exit
 -q, --quiet, --silent  do not print `checking...' messages
     --cache-file=FILE cache test results in FILE [disabled]
 -C, --config-cache   alias for `--cache-file=config.cache'
 -n, --no-create        do not create output files
     --srcdir=DIR         find the sources in DIR [configure dir or `..']

Installation directories:
 --prefix=PREFIX         install architecture-independent files in PREFIX[/usr/local/nagios]
 --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX[PREFIX]

By default, `make install' will install all the files in `/usr/local/nagios/bin', `/usr/local/nagios/lib' etc.  You can specify an installation prefix other than `/usr/local/nagios' using `--prefix', for instance `--prefix=$HOME'.

For better control, use the options below.

Fine tuning of the installation directories:
 --bindir=DIR           user executables [EPREFIX/bin]
 --sbindir=DIR          system admin executables [EPREFIX/sbin]
 --libexecdir=DIR       program executables [EPREFIX/libexec]
 --datadir=DIR          read-only architecture-independent data [PREFIX/share]
 --sysconfdir=DIR      read-only single-machine data [PREFIX/etc]
 --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
 --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
 --libdir=DIR              object code libraries [EPREFIX/lib]
 --includedir=DIR       C header files [PREFIX/include]
 --oldincludedir=DIR   C header files for non-gcc [/usr/include]
 --infodir=DIR           info documentation [PREFIX/info]
 --mandir=DIR           man documentation [PREFIX/man]

System types:
 --build=BUILD     configure for building on BUILD [guessed]
 --host=HOST       cross-compile to build programs to run on HOST [BUILD]

Optional Features:
 --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
 --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
--disable-statusmap=disables compilation of statusmap CGI
--disable-statuswrl=disables compilation of statuswrl (VRML) CGI
--enable-DEBUG0 shows function entry and exit
--enable-DEBUG1 shows general info messages
--enable-DEBUG2 shows warning messages
--enable-DEBUG3 shows scheduled events (service and host checks... etc)
--enable-DEBUG4 shows service and host notifications
--enable-DEBUG5 shows SQL queries
--enable-DEBUGALL shows all debugging messages
--enable-nanosleep enables use of nanosleep (instead sleep) in event timing
--enable-event-broker enables integration of event broker routines
--enable-embedded-perl will enable embedded Perl interpreter
--enable-cygwin enables building under the CYGWIN environment

Optional Packages:
 --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
 --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
--with-nagios-user=<user> sets user name to run nagios
--with-nagios-group=<grp> sets group name to run nagios
--with-command-user=<user> sets user name for command access
--with-command-group=<grp> sets group name for command access
--with-mail=<path_to_mail> sets path to equivalent program to mail
--with-init-dir=<path> sets directory to place init script into
--with-lockfile=<path> sets path and file name for lock file
--with-gd-lib=DIR sets location of the gd library
--with-gd-inc=DIR sets location of the gd include files
--with-cgiurl=<local-url> sets URL for cgi programs (do not use a trailing slash)
--with-htmurl=<local-url> sets URL for public html
--with-perlcache turns on cacheing of internally compiled Perl scripts

Some influential environment variables:
 CC          C compiler command
 CFLAGS    C compiler flags
 LDFLAGS   linker flags, e.g. -L<lib dir> if you have libraries in a
                nonstandard directory <lib dir>
 CPPFLAGS  C/C++ preprocessor flags, e.g. -I<include dir> if you have
                 headers in a nonstandard directory <include dir>
 CPP           C preprocessor

Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.

#make all

this will Compile Nagios and the CGIs

#make install

This will Install the binaries and HTML files (documentation and main web page)

#make install-init

This will install the Startup scripts

# make install-commandmode

this will Create the required directory for command file and assign appropriate permissions to it for the external commands.

# make install-config

This installs *SAMPLE* config files in /usr/local/nagios/etc .You'll have to modify these sample files before you can use Nagios.

This will complete the installation Now we need to know the Directory Structure and File locations

#cd /usr/local/nagios

You should see five different subdirectories. A brief description of what each directory contains is given below.

Sub-Directory Contents

bin/ Nagios core program
etc/ Main, resource, object, and CGI configuration files should be put here
sbin/ CGIs
share/ HTML files (for web interface and online documentation)
var/ Empty directory for the log file, status file, retention file, etc.
var/archives Empty directory for the archived logs
var/rw Empty directory for the external command file

Now one thing you need to concentrate is /usr/local/nagios/etc directory where all the sample configuration files stores.

cgi.cfg-sample    nagios.cfg-sample bigger.cfg-sample   misccommands.cfg-sample  checkcommands.cfg-sample  minimal.cfg-sample  resource.cfg-sample

The above are the sample configuration files you need to rename those files to .cfg files i am showing here one example you need to do for the other files

# mv bigger.cfg-sample bigger.cfg

Important Note :- In nagios 2.x(For nagios 1.x versions it creats at the time of installation) hosts.cfg,services.cfg,commands.cfg and other configuration files are not crteated by default we need to create these files using the existing sample files like bigger.cfg and minimal.cfg and other files

We will see more about these file in Configuration section

Now, you have a completely installed nagios to work on. The next steps would be to install the plugins and start configuring Nagios.

Install Nagios Plugins

In order for Nagios to be of any use to you, you need to install nagios plugins. Plugins are usually installed in the libexec/ directory of your Nagios installation (i.e. /usr/local/nagios/libexec). Plugins are scripts or binaries which perform all the service and host checks that constitute monitoring.

Download the latest version of nagios Plugins from the following

The nagios-Plugins version at the time of writing this document is nagios-plugins-1.4.5

Download Nagios Plugins

# wget

Untar the downloaded file

# tar -zxvf nagios-plugins-<version>.tar.gz [here nagios-plugins-1.4.5.tar.gz]

This will create a new directory nagios-plugins-<version> [here nagios-plugins-1.4.5]

Change to the Directory and run the Configure Script

# cd nagios-plugins-1.4.5

# ./configure

Run the following to make and install the plugins

# make && make install

This should install the pugins in the /usr/local/nagios/libexec directory.

There are a few rules that all Nagios plugins should implement, making them suitable for use by Nagios. All plugins provide a --help option that displays information about the plugin and how it works. This feature helps a lot when you're trying to monitor a new service using a plugin you haven't used before.

For instance, to learn how the check_ssh plugin works, run the following command.

/usr/local/nagios/libexec# ./check_ssh -h
check_ssh (nagios-plugins 1.3.0-alpha1)
The nagios plugins come with ABSOLUTELY NO WARRANTY. You may redistribute
copies of the plugins under the terms of the GNU General Public License.
For more information about these matters, see the file named COPYING.
Copyright (c) 1999 Remi Paulmier ()


 check_ssh -t [timeout] -p [port] <host> check_ssh -V prints version info
 check_ssh -h prints more detailed help by default, port is 22

This shows us that the check_ssh plugin accepts one required parameter host, and two optional paramters, timeout and port.

Now the complete Nagios Directory structure

bin/ Nagios core program
etc/ Main, resource, object, and CGI configuration files should be put here
sbin/ CGIs
share/ HTML files (for web interface and online documentation)
var/ Empty directory for the log file, status file, retention file, etc.
var/archives Empty directory for the archived logs
var/rw Empty directory for the external command file
libexec/ nagios plugins available in this

Now Basic installation of nagios completed.Now you need to configure the web interface for nagios.

Configure the Web interface For Nagios in Debian

Find how to setup the web-interface and configure the user authentication for nagios. This article also describes how to force teh CGIs to use Authentication.

Once Nagios and the plugins are installed. It's time to create the front end web interface for nagios. For this, you need to configure the Alias for the web interface and the script alias for the CGIs on your webserver.

In Debian with Apache2 you can do this by the following:

Create the config file for nagios in Apache

Creating the config file nagios (or in any name that you want the alias to called as) in the /etc/apache2/sites-available/ with the following contents (copy & paste using VI):

ScriptAlias /nagios/cgi-bin /usr/local/nagios/sbin

<Directory "/usr/local/nagios/sbin">
   Options ExecCGI
   AllowOverride None
   Order allow,deny
   Allow from all
   AuthName "Nagios Access"
   AuthType Basic
   AuthUserFile /usr/local/nagios/etc/htpasswd.users
   Require valid-user

Alias /nagios /usr/local/nagios/share

<Directory "/usr/local/nagios/share">
   Options None
   AllowOverride None
   Order allow,deny
   Allow from all
   AuthName "Nagios Access"
   AuthType Basic
   AuthUserFile /usr/local/nagios/etc/htpasswd.users
   Require valid-user

Enable the website

# a2ensite nagios

This enables the site and you can find a soft link to the /etc/apache2/sites-available/nagios under /etc/apache2/sites-enabled/ directory.

Restart apache

# /etc/init.d/apache2 restart

Setup User Authentication

You can setup the authentication for the users to have access to the interface and hence not open to all.

This can be done by

# htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

Enter the required password when prompted. This will setup htaccess on the site by creating a new file named htpasswd.users under /usr/local/nagios/etc/ with the first user nagios admin. This forces Apache to use the htpasswd.users to check and authenticate the users

You can add as many user you wish by

# htpasswd /usr/local/nagios/etc/htpasswd.users (username)

NOTE: Remember to remove -c from the previous command and substitute the username accordingly.

Force CGI s to use Authentication

For the CGIs to use Authentication on Nagios, edit the file /usr/local/nagios/etc/cgi.cfg and set


You can now access the web interface at http://<IPADDRESS OR HOSTNAME>/nagios/

This completes the setup of the web interface and the user and CGI authentication procedures.

1)When I click the "3-D Status Map" link my browser tries to download and save the statuswrl.cgi file ?

A)This will happen if you do not have a VRML client/plugin installed for your web browser. Installing a VRML plugin should resolve this issue.

Download VRML Plugin for your Browser

Now you need to configure the Nagios Configuration files this is very important