CentOS 7.x nagios server and client configuration ansible playbook

From Notes_Wiki

Home > CentOS > CentOS 7.x > DevOps > Automated Configuration > Ansible > Ansible Playbooks > CentOS 7.x nagios server and client configuration ansible playbook

Home > CentOS > CentOS 7.x > Monitoring > Nagios > CentOS 7.x nagios server and client configuration ansible playbook


To configure nagios server and client use below playbook:

---
  - name: Playbook for configuring nagios client(s)
    hosts: nagios-client
    remote_user: root
    
    vars:
      nagios_server: 192.168.<yambe:breadcrumb self="CentOS 7.x nagios server and client configuration ansible playbook">CentOS 7.x nagios|CentOS 7.x nagios</yambe:breadcrumb>122.147

    tasks:
    - name: Install epel-release repository
      yum: name=epel-release state=present
    
    - name: Install nrpe, nagios-plugins-all
      yum: name={{item}} state=present
      with_items:
        - nrpe
        - nagios-plugins-all
        - openssl

    - name: Configure nagios server IP in nrpe configuration file
      lineinfile: 
        dest: /etc/nagios/nrpe.cfg
        regexp: allowed_hosts=
        line: allowed_hosts=127.0.0.1,{{nagios_server}} 

    - name: Start nrpe service and enable it on startup
      service: name=nrpe state=restarted enabled=yes

  
  - name: Playbook for configuring nagios server including clients and client services monitoring
    hosts: nagios-server
    remote_user: root

    vars:
      nagios_alert_email_id: barjatiya.saurabh@gmail.com 
      nagiosadmin_password: nagiosadmin
      nagios_client_details:
        - { hostname: "test1", alias: "test1", address: 192.168.122.210, services: [ "ping", "ssh" ] }  
        - { hostname: "web1", alias: "web1", address: 192.168.122.246, services: [ "ping", "ssh", "http", "nrpe_check_load" ] }  
        - { hostname: "windows10", alias: "windows10", address: 192.168.2.32, services: [ "ping", "nrpe_alias_cpu" ] }  


    tasks:
    - name: Install epel-release repository
      yum: name=epel-release state=present
    
    - name: Install nagios, nagios-plugins-all and nrpe packages
      yum: name={{item}} state=present
      with_items:
      - nagios
      - nagios-plugins-all
      - nrpe 
      - nagios-plugins-nrpe

    - name: Configure desried email ID in contacts
      lineinfile: 
        dest: /etc/nagios/objects/contacts.cfg
        regexp: email
        line: email {{nagios_alert_email_id}} 

    - name: Copy commands.cfg file with check_nrpe command
      copy: src=commands.cfg dest=/etc/nagios/objects/commands.cfg owner=nagios group=nagios mode=755

    - name: Create nagiosadmin user for httpd access
      shell: htpasswd -cb /etc/nagios/passwd nagiosadmin {{nagiosadmin_password}}

    - name: Make sure httpd is installed
      yum: name=httpd state=present

    - name: Start nagios, httpd services and enable them on startup
      service: name={{item}} state=restarted enabled=yes
      with_items:
        - httpd
        - nagios

    - name: Set setuid permissions on /usr/bin/ping to allow nagios user to execute ping
      file: dest=/usr/bin/ping mode=04755

    - name: Configure nagios to use clients.conf file
      lineinfile: 
        dest: /etc/nagios/nagios.cfg
        insertafter: cfg_dir=.etc.nagios.conf.d
        line: cfg_file=/etc/nagios/servers/clients.conf

    - name: Create servers folder
      file: dest=/etc/nagios/servers owner=nagios group=nagios mode=755 state=directory
 
    - name: Configure server to monitor clients
      template: src=nagios-clients.j2 dest=/etc/nagios/servers/clients.conf owner=nagios group=nagios mode=755

    - name: Restart nagios on server to use new configuration
      service: name=nagios state=restarted   


The playbook requires 'commands.cfg' with following contents:

###############################################################################
# COMMANDS.CFG - SAMPLE COMMAND DEFINITIONS FOR NAGIOS 4.0.8
#
#
# NOTES: This config file provides you with some example command definitions
#        that you can reference in host, service, and contact definitions.
#       
#        You don't need to keep commands in a separate file from your other
#        object definitions.  This has been done just to make things easier to
#        understand.
#
###############################################################################


################################################################################
#
# SAMPLE NOTIFICATION COMMANDS
#
# These are some example notification commands.  They may or may not work on
# your system without modification.  As an example, some systems will require 
# you to use "/usr/bin/mailx" instead of "/usr/bin/mail" in the commands below.
#
################################################################################


# 'notify-host-by-email' command definition
define command{
	command_name	notify-host-by-email
	command_line	/usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
	}

# 'notify-service-by-email' command definition
define command{
	command_name	notify-service-by-email
	command_line	/usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
	}





################################################################################
#
# SAMPLE HOST CHECK COMMANDS
#
################################################################################


# This command checks to see if a host is "alive" by pinging it
# The check must result in a 100% packet loss or 5 second (5000ms) round trip 
# average time to produce a critical error.
# Note: Five ICMP echo packets are sent (determined by the '-p 5' argument)

# 'check-host-alive' command definition
define command{
        command_name    check-host-alive
        command_line    $USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 5
        }




################################################################################
#
# SAMPLE SERVICE CHECK COMMANDS
#
# These are some example service check commands.  They may or may not work on
# your system, as they must be modified for your plugins.  See the HTML 
# documentation on the plugins for examples of how to configure command definitions.
#
# NOTE:  The following 'check_local_...' functions are designed to monitor
#        various metrics on the host that Nagios is running on (i.e. this one).
################################################################################

# 'check_local_disk' command definition
define command{
        command_name    check_local_disk
        command_line    $USER1$/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$
        }


# 'check_local_load' command definition
define command{
        command_name    check_local_load
        command_line    $USER1$/check_load -w $ARG1$ -c $ARG2$
        }


# 'check_local_procs' command definition
define command{
        command_name    check_local_procs
        command_line    $USER1$/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$
        }


# 'check_local_users' command definition
define command{
        command_name    check_local_users
        command_line    $USER1$/check_users -w $ARG1$ -c $ARG2$
        }


# 'check_local_swap' command definition
define command{
	command_name	check_local_swap
	command_line	$USER1$/check_swap -w $ARG1$ -c $ARG2$
	}


# 'check_local_mrtgtraf' command definition
define command{
	command_name	check_local_mrtgtraf
	command_line	$USER1$/check_mrtgtraf -F $ARG1$ -a $ARG2$ -w $ARG3$ -c $ARG4$ -e $ARG5$
	}


################################################################################
# NOTE:  The following 'check_...' commands are used to monitor services on
#        both local and remote hosts.
################################################################################

# 'check_ftp' command definition
define command{
        command_name    check_ftp
        command_line    $USER1$/check_ftp -H $HOSTADDRESS$ $ARG1$
        }


# 'check_hpjd' command definition
define command{
        command_name    check_hpjd
        command_line    $USER1$/check_hpjd -H $HOSTADDRESS$ $ARG1$
        }


# 'check_snmp' command definition
define command{
        command_name    check_snmp
        command_line    $USER1$/check_snmp -H $HOSTADDRESS$ $ARG1$
        }


# 'check_http' command definition
define command{
        command_name    check_http
        command_line    $USER1$/check_http -I $HOSTADDRESS$ $ARG1$
        }


# 'check_ssh' command definition
define command{
	command_name	check_ssh
	command_line	$USER1$/check_ssh $ARG1$ $HOSTADDRESS$
	}


# 'check_dhcp' command definition
define command{
	command_name	check_dhcp
	command_line	$USER1$/check_dhcp $ARG1$
	}


# 'check_ping' command definition
define command{
        command_name    check_ping
        command_line    $USER1$/check_ping -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ -p 5
        }


# 'check_pop' command definition
define command{
        command_name    check_pop
        command_line    $USER1$/check_pop -H $HOSTADDRESS$ $ARG1$
        }


# 'check_imap' command definition
define command{
        command_name    check_imap
        command_line    $USER1$/check_imap -H $HOSTADDRESS$ $ARG1$
        }


# 'check_smtp' command definition
define command{
        command_name    check_smtp
        command_line    $USER1$/check_smtp -H $HOSTADDRESS$ $ARG1$
        }


# 'check_tcp' command definition
define command{
	command_name	check_tcp
	command_line	$USER1$/check_tcp -H $HOSTADDRESS$ -p $ARG1$ $ARG2$
	}


# 'check_udp' command definition
define command{
	command_name	check_udp
	command_line	$USER1$/check_udp -H $HOSTADDRESS$ -p $ARG1$ $ARG2$
	}


# 'check_nt' command definition
define command{
	command_name	check_nt
	command_line	$USER1$/check_nt -H $HOSTADDRESS$ -p 12489 -v $ARG1$ $ARG2$
	}



################################################################################
#
# SAMPLE PERFORMANCE DATA COMMANDS
#
# These are sample performance data commands that can be used to send performance
# data output to two text files (one for hosts, another for services).  If you
# plan on simply writing performance data out to a file, consider using the 
# host_perfdata_file and service_perfdata_file options in the main config file.
#
################################################################################


# 'process-host-perfdata' command definition
define command{
	command_name	process-host-perfdata
	command_line	/usr/bin/printf "%b" "$LASTHOSTCHECK$\t$HOSTNAME$\t$HOSTSTATE$\t$HOSTATTEMPT$\t$HOSTSTATETYPE$\t$HOSTEXECUTIONTIME$\t$HOSTOUTPUT$\t$HOSTPERFDATA$\n" >> /var/log/nagios/host-perfdata.out
	}


# 'process-service-perfdata' command definition
define command{
	command_name	process-service-perfdata
	command_line	/usr/bin/printf "%b" "$LASTSERVICECHECK$\t$HOSTNAME$\t$SERVICEDESC$\t$SERVICESTATE$\t$SERVICEATTEMPT$\t$SERVICESTATETYPE$\t$SERVICEEXECUTIONTIME$\t$SERVICELATENCY$\t$SERVICEOUTPUT$\t$SERVICEPERFDATA$\n" >> /var/log/nagios/service-perfdata.out
	}


define command{
        command_name check_nrpe
        command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
        }


The playbook also requires 'nagios-clients.j2' jinja2 script with following contents:

{% for nagios_client1 in nagios_client_details %}

define host{
	use                             linux-server
	host_name                       {{nagios_client1.hostname}}
	alias                           {{nagios_client1.alias}}
	address                         {{nagios_client1.address}}
	max_check_attempts              5
	check_period                    24x7
	notification_interval           30
	notification_period             24x7
}



  {% for service1 in nagios_client1.services %}
    {% if service1=="ping" %}
	define service{
        	use                             generic-service         ; Name of service template to use
        	host_name                       {{nagios_client1.hostname}}
        	service_description             PING
        	check_command                   check_ping!100.0,20%!500.0,60%
        	notifications_enabled           1
        }
    {% endif %}

 
    {% if service1=="ssh" %}
	define service {
	        use                             generic-service
	        host_name                       {{nagios_client1.hostname}}
	        service_description             SSH
	        check_command                   check_ssh
	        notifications_enabled           1
        }
    {% endif %} 

    {% if service1=="http" %}
	define service {
	        use                             generic-service
	        host_name                       {{nagios_client1.hostname}}
	        service_description             HTTP
	        check_command                   check_http
	        notifications_enabled           1
        }
    {% endif %} 

    {% if service1=="nrpe_check_load" %}
	define service {
	        use                             generic-service
	        host_name                       {{nagios_client1.hostname}}
	        service_description             CPU Load
	        check_command                   check_nrpe!check_load
	        notifications_enabled           1
        }
    {% endif %} 

    {% if service1=="nrpe_alias_cpu" %}
	define service {
	        use                             generic-service
	        host_name                       {{nagios_client1.hostname}}
	        service_description             CPU Load
	        check_command                   check_nrpe!alias_cpu
	        notifications_enabled           1
        }
    {% endif %} 


  {% endfor %}
{% endfor %}   


To run the playbook hosts file similar to one shown below is required:

[nagios-server]
192.168.122.147

[nagios-client]
192.168.122.210
192.168.122.246


Home > CentOS > CentOS 7.x > DevOps > Automated Configuration > Ansible > Ansible Playbooks > CentOS 7.x nagios server and client configuration ansible playbook

Home > CentOS > CentOS 7.x > Monitoring > Nagios > CentOS 7.x nagios server and client configuration ansible playbook