13.10. Monitoring a Web Server

You have a web server you want Nagios to monitor. You want to make sure that the server is alive, and that HTTP and SSH are functioning. If one of the services stops, or the server goes down, you want to receive an alert.

Create a new host definition for the server, and an HTTP service definition. Then, add the new server to the existing SSH service definition (see previous recipe). Restart Nagios, and you're done.

This is a sample host definition in hosts.cfg, using the host apache1 with an IP address of 192.168.1.26. Use your own hostname and IP address, of course:

	# HTTP servers
	define host{
	        use                      generic-host
	        host_name                apache1
	        alias                    Apache web server
	        address                  192.168.1.26
	        check_command            check-host-alive
	        max_check_attempts       10
	        check_period            24x7
	        notification_interval    120
	        notification_period      24x7
	        notification_options     d,r
	        contact_groups           admins
	        }

Add your new server to an existing group, or create a new group for it, as this example shows:

	define hostgroup{
	        hostgroup_name  apache_servers
	        alias           Web Servers
	        members         apache1
	        }

Next, define the HTTP service in services.cfg:

	# Define a service to monitor HTTP
	define service{
	        use                      generic-service
	        host_name                apache1
	        service_description      HTTP
	        is_volatile              0
	        check_period             24x7
	        max_check_attempts       4
	        normal_check_interval    5
	        retry_check_interval     1
	        contact_groups           admins
	        notification_options        w,u,c,r
	        notification_interval    960
	        notification_period      24x7
	        check_command            check_http
	        }

Add the new server to the SSH service definition:

	# Define a service to monitor SSH
	define service{
	        use                      generic-service
	        host_name                server1,apache1
	        service_description      SSH
	        is_volatile              0
	        check_period             24x7
	        max_check_attempts       4
	        normal_check_interval    5
	        retry_check_interval     1
	        contact_groups           admins
	        notification_options        w,u,c,r
	        notification_interval    960
	        notification_period      24x7
	        check_command            check_ssh
	        }

Run the syntax checker, then restart Nagios:

	# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
	# /etc/init.d/nagios restart

Refresh the Nagios web interface, and you'll see the new entries listed as PENDING, as Figure 13-3 shows.

In a few minutes, Nagios will run the new service checks; then, they will no longer be PENDING, and instead display status information.

check_http takes a number of options. It checks normal (HTTP) and secure (HTTPS) connections, and reports if SSL certificates are still valid. You can test it on the command line first. This shows your command options:

	root@xena:/usr/local/nagios/libexec# ./check_http -h

Use it this way to give you 30 days' notice on expiring SSL certificates:

	# ./check_http www.yourdomain.com -C 30

The -p option specifies the port number, when you're using a nonstandard port:

	# ./check_http www.yourdomain.com -p 8080

Using the -w and -c options lets you test response time, in seconds:

	# ./check_http -w 5 -c 10

That issues a warning if there is no response after 5 seconds, and it goes critical after 10 seconds.

Use the -ssl option to connect to SSL-enabled servers:

	# ./check_http --ssl www.yourdomain.com

Once you get the initial Nagios framework configured, adding new servers and services is fairly simple. Just copy and paste existing entries and modify them for the new hosts and services.

Using hostgroups is a simple way to control groups of related servers. Use the hostgroup_name option in services.cfg instead of host_name, and simply add or remove servers from the hostgroup.