Nagios
Nagios is an open source free monitoring tool which is
widely used by people to monitor their infrastructure devices and to create
reports on the availability of the services. This tool has the capability to
alert the status of services or devices in realtime, based on your
configuration on to a web based dashboard, email, sms etc………
Ethan Galstad created this wonderful monitoring tool and is
currently supported by him and a group of developers actively maintaining the
plugins for it which are official and unofficial. It is licensed under GNU
version 2.
Nagios has got the ability to monitor services, hosts and
anything else which have the ability to send collected data via a network to
specifically written plugins. Nagios
collects information with the help of SNMP and agents installed on the remote
systems.
I am trying to explain over here the installation of Nagios
on a Linux system running Fedora and the configuration required on it to make
the application useful for monitoring your network devices like Routers,
switches, firewalls, loadbalancers and services like (SMTP, POP3, HTTP, NNTP, ICMP, SNMP, FTP, SSH)
with the usage of different plugins available at sites given below.
Download Sites:
Nagios Core:
Addons: (clients)
http://www.nagios.org/download/addons/
Plugins:
or Nagios Exchange
Frontends: (GUI)
Prerequisites
Run all steps from this document with root
permissions. The following command can be run to switch to a root shell.
>su – root
***
This will prompt for root user password.
After entering the same the prompt will change to root.
#
Issue the command “pwd” to check the present directory
#pwd
Install the dependency packages and applications
#yum install -y wget httpd php
gcc glibc glibc-common gd gd-devel make net-snmp
To start with I will detail the steps for installing the
Nagios Core package from the source to a linux fedora distribution.
Step 1
You could download the source package from the links
given above or by running the command given below.
Run the
following commands in your terminal:
To change
the directory to temporary folder
#cd /tmp
#wget http://sourceforge.net/projects/nagiosplug/files/nagiosplug/1.4.15/nagios-plugins-1.4.15.tar.gz
This will download Nagios core package and the required
plugins.
Step 2
Creating User accounts and Group
#useradd nagios
#groupadd nagcmd
#usermod -a -G nagcmd nagios
Step 3
Extracting the downloaded packages
#tar zxvf nagios-3.4.1.tar.gz
#tar zxvf
nagios-plugins-1.4.15.tar.gz
Step 4
Once you extract the file you will get a folder with the
name “nagios”. Change to the directory
and configure.
#cd nagios
#./configure
--with-command-group=nagcmd
#make all
#make install
#make install-init
#make install-config
#make install-commandmode
#make install-webconf
#cp -R contrib/eventhandlers/ /usr/local/nagios/libexec/
#chown -R nagios:nagios
/usr/local/nagios/libexec/eventhandlers
For verifying the configuration:
#/usr/local/nagios/bin/nagios -v
/usr/local/nagios/etc/nagios.cfg
This should give zero errors and zero
warnings before restarting the nagios service.
Starting the Nagios service
#/etc/init.d/nagios start
Starting the Web service
#/etc/init.d/httpd start
Create a Default User for Web Access.
Add a
default user for Web Interface Access:
#htpasswd –c
/usr/local/nagios/etc/htpasswd.users nagiosadmin
*** You will be prompted for a password
for the account
Nagios Plugin Installation
After
extracting the plugin file with the tar command as explained earlier.
#cd /tmp/nagios-plugins-1.4.15
#./configure --with-nagios-user=nagios --with-nagios-group=nagios
#make
#make install
Nagios Service Setup
The
following commands will register the Nagios daemon to be run upon system
startup.
#chkconfig --add nagios
#chkconfig --level 35 nagios on
#chkconfig --add httpd
#chkconfig --level 35 httpd
Web Access:
After completing the steps followed above
and verifying the configurations without any errors or warnings, you should be
able to access the Nagios tool GUI with web by issuing the command in the url
of your browser. Edit the section of the IP with the IP of your system.
**** Log in with the credentials you chose while
adding the “nagiosadmin” user to the “htpasswd.users” file.
Configuration of Nagios for monitoring your critical services and devices:
Here I will introduce you to the main configuration files
which are required for making the configuration changes for making the tool
ready as per our requirement.
Important configuration files and locations:
1)
Main nagios
configuration file
/usr/local/nagios/etc/nagios.cfg
****
All the below mentioned files locations and
some configuration parameters are mentioned over in this file.
22)
File for storing paths
for useraccount to plugins and eventhandlers
/usr/local/nagios/etc/resource.cfg
33)
For setting the
configurations for the tool GUI
/usr/local/nagios/etc/cgi.cfg
44)
For defining the device
or service configuration parameters.
Eg:-/usr/local/nagios/etc/objects/switch.cfg
/usr/local/nagios/etc/objects/Router1.cfg
55)
Defining Host Information
file: (Useful for making the host or service appear on the map)
#/usr/local/nagios/etc/objects hostextinfo.cfg
66)
Defining generic
service template file: (Used while creating Host or Service for inheriting the
configuration)
#/usr/local/nagios/etc/objects/templates.cfg
77)
Defining Timeperiods
template file: (Timeperiods used in Host and services configuration)
#/usr/local/nagios/etc/objects/timeperiods.cfg
88)
Defining commands and
its syntax with parameters:
/usr/local/nagios/etc/objects/commands.cfg
99)
Defining contacts to be
notified and their availability time:
#/usr/local/nagios/etc/objects/contacts.cfg
Detail of device to be monitored :
Hostname: Router1
Ip address: 1.1.1.1
SNMP String: public
Interface: GigabitEthernet0/0 , FastEthernet 0/0/0
On the Cisco Router:
access-list
2 permit 2.2.2.2
snmp-server
community public RO 2
snmp-server
host {Ip-address}
snmp-server
enable traps snmp authentication linkdown linkup coldstart warmstart
snmp-server
enable traps memory
snmp-server
enable traps cpu_threshold
****
Access list number and RO
number should match.
Mention any other traps which you want to be notified as
per your requirement.
Create a configuration file for the device under the
directory “/usr/local/nagios/etc/objects/”
Template
for Network device in router.cfg
#vi
/usr/local/nagios/etc/objects/router.cfg
###############################################################################
###############################################################################
#
#
HOST DEFINITIONS
#
###############################################################################
###############################################################################
#
Define the Router that we'll be monitoring
define
host{
use generic-switch ; Inherit default values from a
template
name myrouter
alias myrouters ; A longer name associated with the
switch
hostgroups routers ; Host groups this switch is
associated with
register 0
}
###############################################################################
###############################################################################
#
#
HOST GROUP DEFINITIONS
#
###############################################################################
###############################################################################
#
Create a new hostgroup for routerss
define
hostgroup{
hostgroup_name routers ; The name of the hostgroup
alias Network Routers ; Long name of the group
}
###############################################################################
To save the file Esc >
Shift :wq
Save
and exit the configuration
***
Please note the “register 0”
parameter in the configuration. This defines that the configuration is a dummy
file or template. This template will be referenced for use in other host
Before creating this file you need to make sure that you
have the plugins mentioned below for working of this configuration. Locate
these files in /ur/local/nagios/libexec/
Required Plugins:
check_ping
check_snmp_load.pl
check_snmp_mem_v1
check_snmp
#vi
/usr/local/nagios/etc/objects/Router1.cfg
###############################################################################
###############################################################################
#
#
HOST DEFINITIONS
#
###############################################################################
###############################################################################
################################################################################
define
host{
use generic-router ; Inherit default values from a
template mentioned above
host_name Router1 ####### Hostname as defined on
the device
alias WAN -Router ; A longer name associated with the switch
address 1.1.1.1 ###### IP address of the device
parents Switch2 #####
To which device is this connected. With Exact hostname hostgroups WAN-Devices ##### Group to which this device will be
listed
_COMMUNITY public
#### SNMP string
}
################################################################################
################### HOST Extended Information
####################################
define
hostextinfo{
host_name Router1
# 2d_coords 40,40
icon_image cisco.png ##### Place the logo /usr/local/nagios/share/images/logos/
vrml_image cisco.png ##### Place the logo /usr/local/nagios/share/images/logos/
statusmap_image cisco.png
#### Above location
}
#################################################################################
###############################################################################
###############################################################################
#
#
SERVICE DEFINITIONS
#
###############################################################################
###############################################################################
###########
Monitoring Router Uptime ################
define
service{
use generic-service ; Inherit
values from a template
host_name Router1
service_description Uptime
check_command check_snmp!-C public -o sysUpTime.0
}
###########
Monitoring Router Availability with PING ################
define
service{
use generic-service ; Inherit
values from a template
host_name Router1 ; The name of the host
the service is associated with
service_description PING ; The service description
check_command check_ping!200.0,20%!600.0,60% ; The command used to monitor the service
normal_check_interval 1 ; Check the service every 1
minutes under normal conditions
retry_check_interval 1 ; Re-check the service every
minute until its final/hard state is determined
}
###########
Monitoring Router CPU Load Status ################
define
service{
use generic-service
host_name Router1
service_description CPU_Load
check_command check_snmp_load.pl!public!cisco!40,40,40!60,60,60
normal_check_interval 1
retry_check_interval 1
notification_options w,c,r
contact_groups 24X7
######## Mention the contact group name defined in contacts.cfg
}
###########
Monitoring Router Memory ################
define
service{
use generic-service ; Inherit
values from a template
host_name Router1
service_description Memory
check_command check_snmp_mem_v1!public!-I!60!70 #### Warning to 60% and Critical to 70%
normal_check_interval 1
retry_check_interval 1
notification_options w,c,r
contact_groups 24X7
######## Mention the contact group name defined in contacts.cfg
}
###########
Monitoring Interface Status ################
define
service{
use generic-service ; Inherit
values from a template
host_name Router1
service_description GigabitEthernet0/0 ### Name of the Interface for identification
check_command check_snmp!-C public -o
ifOperStatus.1 -r 1
-m RFC1213-MIB
}
define
service{
use generic-service ; Inherit
values from a template
host_name Router1
service_description FastEthernet0/0/0
check_command check_snmp!-C public -o
ifOperStatus.4 -r 1
-m RFC1213-MIB
}
#############Monitoring
Bandwidth / Traffic Rate ########################
######
You need to have already MRTG running and graphing for this device interface
define
service{
use
generic-service ; Inherit values
from a template
host_name
Router1
service_description
FastEthernet0/0/0 Bandwidth Usage
check_command check_local_mrtgtraf!/var/lib/mrtg/1.1.1.1_4.log!AVG!1000000,2000000!5000000,5000000!10
}
############################################################################
################# END OF FILE
###############################################
To save the file Esc >
Shift :wq
Save
the file Router1.cfg and exit
If you want to ensure that a specific port/interface on
the router is in an up state, you could add a service definition like this. You
can usually find the OIDs that can be monitored on a router by running the
following command (replace 1.1.1.1 with the IP address of the switch):
#snmpwalk -v1 -c public 1.1.1.1
-m ALL .1 > Rotuer1.txt
#cat Router1.txt
Or
# vi Router1.txt
This file will contain the OID’s used by the device,
which can be used while configuring.
Sample contents of Router1.txt
ifDescr.1 = STRING: GigabitEthernet0/0
ifDescr.2 = STRING:
GigabitEthernet0/1
ifDescr.3 = STRING:
Backplane-GigabitEthernet0/3
ifDescr.4 = STRING: FastEthernet0/0/0
ifDescr.5 = STRING:
FastEthernet0/0/1
ifDescr.6 = STRING:
Serial0/1/0
ifDescr.7 = STRING:
Serial0/1/1
Take the number mentioned after “ifDescr.”
In “ifOperStatus.”
Configurations to be done in the commands.cfg file:
Add the lines as given below for checking memory and CPU
load of cisco.
#vi /usr/local/nagios/etc/objects/commands.cfg
####################################Cisco
- Load & Memory############################################
#
'Cisco_CPU' command definition
define
command{
command_name check_snmp_load.pl
command_line $USER1$/check_snmp_load.pl -C $ARG1$ -H
$HOSTADDRESS$ $USER7$ -T $ARG2$ -w $ARG3$ -c $ARG4$ $ARG5$
}
#'Cisco_memory'
Cisco memory check
define
command{
command_name check_snmp_mem_v1
command_line $USER1$/check_snmp_mem.pl -H
$HOSTADDRESS$ -C $ARG1$ $USER7$ $ARG2$ -w $ARG3$ -c $ARG4$ $ARG5$
}
#####################################################################################
Configurations to be done in the nagios.cfg file:
***Please take precaution that all the configuration files with
uncommented should be present
#
OBJECT CONFIGURATION FILE(S)
#
These are the object configuration files in which you define hosts,
#
host groups, contacts, contact groups, services, etc.
#
You can split your object definitions across several config files
#
if you wish (as shown below), or keep them all in a single config file.
#
You can specify individual object config files as shown below:
cfg_file=/usr/local/nagios/etc/objects/commands.cfg
cfg_file=/usr/local/nagios/etc/objects/contacts.cfg
cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg
cfg_file=/usr/local/nagios/etc/objects/templates.cfg
#
Definitions for monitoring a router/switch
cfg_file=/usr/local/nagios/etc/objects/router.cfg
cfg_file=/usr/local/nagios/etc/objects/Router1.cfg
cfg_file=/usr/local/nagios/etc/objects/Switch2.cfg
#####
# Host Template configuration file
xedtemplate_config_file=/usr/local/nagios/etc/objects/hostextinfo.cfg
#
ADMINISTRATOR EMAIL/PAGER ADDRESSES
#
The email and pager address of a global administrator (likely you).
#
Nagios never uses these values itself, but you can access them by
#
using the $ADMINEMAIL$ and $ADMINPAGER$ macros in your notification
#
commands.
admin_email=nagios@localhost
admin_pager=pagenagios@localhost
To save
the file Esc > Shift :wq
Make the configuration changes in cgi.cfg file:
#vi
/usr/local/nagios/etc/cgi.cfg
# MAIN CONFIGURATION FILE
# This tells the CGIs where
to find your main configuration file.
# The CGIs will read the main
and host config files for any other
# data they might need.
main_config_file=/usr/local/nagios/etc/nagios.cfg
use_authentication=1
# GLOBAL HOST/SERVICE COMMAND
ACCESS
authorized_for_all_service_commands=nagiosadmin
authorized_for_all_host_commands=nagiosadmin
# PING SYNTAX
ping_syntax=/bin/ping -n -U
-c 5 $HOSTADDRESS$
# REFRESH RATE
# This option allows you to
specify the refresh rate in seconds
# of various CGIs (status,
statusmap, extinfo, and outages).
refresh_rate=30
# ESCAPE HTML TAGS
escape_html_tags=1
# SOUND OPTIONS
# Note: All audio files must
be placed in the /media subdirectory
# under the HTML path (i.e.
/usr/local/nagios/share/media/).
host_unreachable_sound=warning.wav
host_down_sound=warning.wav
service_critical_sound=warning.wav
To save
the file Esc > Shift :wq
There are
many more fine tuning you can do on this file as per your requirement eg:-
MAPS, Layout, etc….
Verify the configuration by issuing the
command as given below:
# /usr/local/nagios/bin/nagios -v
/usr/local/nagios/etc/nagios.cfg
Output should be as given below before starting or
restarting nagios.
Total Warnings: 0
Total Errors: 0
Things look okay - No serious
problems were detected during the pre-flight check
Restart the
Nagios if all looks fine
#service nagios restart
Or
#/usr/local/nagios/bin/nagios -d
/usr/local/nagios/etc/nagios.cfg
After this
the configurations will reflect in the Web GUI Dashboard.
For
further documentation please refer the official site.