# devops / monitoring / nrpe

Monitor Slaves & Set Alerts via NRPE

NRPE (Nagios Remote Plugin Executor) allows the central Nagios Master server to securely monitor system resources on remote Linux servers. Learn to link your slaves and configure instant email alerts for failures.

$ check_nrpe -H 192.168.1.10
Target192.168.1.10 (Slave)
OutputNRPE v4.0.3
AlertsSMTP Configured
StatusCommunication Established
5666
TCP Port
Active
Check Type
# architecture

The Master-Slave Setup

By itself, the Nagios Master can only ping remote servers. To monitor internal metrics like CPU load or Root Disk space on a slave server, the Master must communicate with the NRPE daemon installed on that slave.

The Integration Flow

  • 1. Slave Config

    Whitelisting the Master server's IP address within the Slave's nrpe.cfg file.

  • 2. Master Config

    Defining the Host and mapping the required Services within a new slave.cfg file on the Master.

  • 3. Notification

    Defining contacts and routing alert emails through a Mail Transfer Agent.

# step-01

Configure NRPE Daemon (Slave Server)

You must explicitly authorize the Nagios Master to talk to your Slave server. This is a crucial security layer to prevent unauthorized nodes from polling your system data.

security

The allowed_hosts Directive

By default, NRPE only accepts connections from 127.0.0.1. You must comma-separate the IP address of your central Nagios Master server in this list.

terminal (on slave server)
# Open the NRPE config file
$ nano /usr/local/nagios/etc/nrpe.cfg
 
# Find and edit the following line:
allowed_hosts=127.0.0.1,192.168.1.10
↳ Ensure 192.168.1.10 is your Nagios Master IP
 
# Apply changes
$ sudo systemctl restart nrpe
# step-02

Define the Slave & Services (Master Server)

/usr/local/nagios/etc/objects/slave.cfgCONFIG
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
define host {
    use                     linux-server
    host_name               Slave-Server-01
    alias                   My Remote Linux Host
    address                 <Slave_IP_Address>
    max_check_attempts      5
    check_period            24x7
    notification_interval   30
    notification_period     24x7
    contact_groups          admins
    register                1
}

# Check CPU Load
define service {
    use                     generic-service
    host_name               Slave-Server-01
    service_description     CPU Load
    check_command           check_nrpe!check_load
}

# Check Current Users
define service {
    use                     generic-service
    host_name               Slave-Server-01
    service_description     Current Users
    check_command           check_nrpe!check_users
}

The check_nrpe! Command

Notice the check_command block. check_nrpe sends the network request from the Master to the Slave. The string following the exclamation mark (e.g., check_load or check_disk) tells the remote Slave which local script to execute.

Enable the File (Master Server)
# Edit the main config file
$ nano /usr/local/nagios/etc/nagios.cfg
 
# Add this line to include your new slave.cfg
cfg_file=/usr/local/nagios/etc/objects/slave.cfg
# step-03

Configure Email Notifications

Nagios utilizes a Mail Transfer Agent (like Postfix or Sendmail) to route failure alerts. First, verify your server can send mail via the terminal, then define the user contact within Nagios.

Test Mail Configuration
# Send a test email from the Master server terminal
$ echo "Test" | mail -s "Test Email" user@example.com
/usr/local/nagios/etc/objects/contacts.cfgCONFIG
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
define contact {
    contact_name                    shanmugananthan
    use                             generic-contact
    alias                           shan
    email                           shan@example.com
    service_notification_period     24x7
    host_notification_period        24x7
    service_notification_options    w,u,c,r,f,s
    host_notification_options       d,u,r,f,s
    service_notification_commands   notify-service-by-email
    host_notification_commands      notify-host-by-email
}

# Add user to the Admins group
define contactgroup {
    contactgroup_name   admins
    alias               Nagios Administrators
    members             nagiosadmin,shanmugananthan
}
# step-04

Verify & Restart