Nagios Core Instalación on Linux

Nagios Core is a powerful, open-source infrastructure monitoreo system that allows organizations to identify and resolve IT infrastructure problems quickly. Esta guía covers compilation from source, plugin installation, host and service configuration, NRPE setup, and notification configuration on Linux systems.

Tabla de Contenidos

Introducción

Nagios Core monitors systems, networks, and infrastructure Para asegurar optimal rendimiento. Its extensible architecture supports thousands of monitoreo plugins and can scale Para monitorear large, complex environments. UnComo other monitoreo solutions, Nagios Requiere explicit configuration, providing complete control and understanding of what's being monitored.

Requisitos del Sistema

Verificar system compatibility before beginning:

  • Linux kernel 2.6 or later
  • At least 1GB RAM
  • 2GB disk space
  • Apache 2.0+
  • GCC compiler
  • Perl 5.8+
  • Opcional: OpenSSL for NRPE encryption

Building from Source

Paso 1: Install Dependencies

# Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y build-essential wget unzip apache2 php libapache2-mod-php apache2-utils
sudo apt-get install -y libssl-dev libgd-dev libpng-dev autoconf libtool

# CentOS/RHEL
sudo yum groupinstall -y "Development Tools"
sudo yum install -y wget unzip httpd php openssl-devel gd-devel libpng-devel

Paso 2: Crear Nagios Usuario

sudo useradd --no-create-home --shell /bin/false nagios
sudo groupadd nagcmd
sudo usermod -a -G nagcmd nagios
sudo usermod -a -G nagcmd apache

Paso 3: Download and Compile Nagios

cd /tmp
wget https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.4.14.tar.gz
tar -xzf nagios-4.4.14.tar.gz
cd nagios-4.4.14

# Configure
./configure \
  --prefix=/usr/local/nagios \
  --exec-prefix=/usr/local/nagios \
  --localstatedir=/usr/local/nagios/var \
  --sysconfdir=/usr/local/nagios/etc \
  --with-cgiurl=/nagios/cgi-bin \
  --with-htmurl=/nagios \
  --with-nagios-user=nagios \
  --with-nagios-group=nagios \
  --with-command-group=nagcmd

# Compile and install
make all
sudo make install
sudo make install-init
sudo make install-daemoninit
sudo make install-commandmode
sudo make install-config
sudo make install-webconf

Paso 4: Crear Apache Config

sudo htpasswd -cb /usr/local/nagios/etc/htpasswd.users nagiosadmin admin_password

sudo tee /etc/apache2/sites-available/nagios.conf > /dev/null << 'EOF'
<VirtualHost *:80>
    ServerName nagios.example.com
    
    <Directory /usr/local/nagios/share>
        Options None
        AllowOverride None
        
        <IfVersion >= 2.4>
            Require all granted
        </IfVersion>
    </Directory>

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

    <Directory /usr/local/nagios/sbin>
        Options +ExecCGI
        AllowOverride None
        
        <IfVersion >= 2.4>
            Require user @nagiosadmin
        </IfVersion>
        
        AuthName "Nagios"
        AuthType Basic
        AuthUserFile /usr/local/nagios/etc/htpasswd.users
    </Directory>

    <Directory /usr/local/nagios/share>
        <IfVersion >= 2.4>
            Require all granted
        </IfVersion>
        
        Options +FollowSymLinks
    </Directory>
</VirtualHost>
EOF

# Enable site and CGI
sudo a2ensite nagios
sudo a2enmod cgi
sudo systemctl restart apache2

Paso 5: Habilitar Nagios Servicio

sudo systemctl enable nagios
sudo systemctl start nagios
sudo systemctl status nagios

Instalando Nagios Plugins

Paso 1: Install Plugin Dependencies

sudo apt-get install -y libmysqlclient-dev libpq-dev libsnmp-dev libdbi-dev

Paso 2: Compile and Install Plugins

cd /tmp
wget https://nagios-plugins.org/download/nagios-plugins-2.4.10.tar.gz
tar -xzf nagios-plugins-2.4.10.tar.gz
cd nagios-plugins-2.4.10

./configure \
  --prefix=/usr/local/nagios \
  --with-nagios-user=nagios \
  --with-nagios-group=nagios

make
sudo make install

Paso 3: Verificar Plugin Instalación

ls -la /usr/local/nagios/libexec/ | head -20

# Test a plugin
/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /

Paso 4: Install Additional Plugins

# Custom plugin examples
sudo tee /usr/local/nagios/libexec/check_custom_metric > /dev/null << 'EOF'
#!/bin/bash

# Example: Check application status
APP_PID=$(pidof myapp)

if [ -z "$APP_PID" ]; then
    echo "CRITICAL - Application not running"
    exit 2
fi

# Check if process is consuming reasonable resources
if ps -p $APP_PID -o %cpu= | awk '{if ($1 > 90) exit 0; else exit 1}'; then
    echo "WARNING - High CPU usage: $(ps -p $APP_PID -o %cpu=)"
    exit 1
else
    echo "OK - Application running normally"
    exit 0
fi
EOF

chmod +x /usr/local/nagios/libexec/check_custom_metric
sudo chown nagios:nagios /usr/local/nagios/libexec/check_custom_metric

Web Interface Configuración

Access Nagios Web Interface

Navigate to http://your-server/nagios and log in with:

  • Username: nagiosadmin
  • Password: (set during installation)

Panel Descripción General

The main page shows:

  • Red status summary
  • Host status map
  • Servicio status
  • Recent alerts
  • Rendimiento statistics

Basic Configuración

Main Configuración Archivo

Edit /usr/local/nagios/etc/nagios.cfg:

sudo tee /usr/local/nagios/etc/nagios.cfg > /dev/null << 'EOF'
log_file=/usr/local/nagios/var/nagios.log
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
cfg_file=/usr/local/nagios/etc/objects/localhost.cfg
cfg_dir=/usr/local/nagios/etc/objects/hosts

object_cache_file=/usr/local/nagios/var/objects.cache
precached_object_file=/usr/local/nagios/var/precached.objects
resource_file=/usr/local/nagios/etc/resource.cfg

status_file=/usr/local/nagios/var/status.dat
status_update_interval=10
nagios_user=nagios
nagios_group=nagios

check_external_commands=1
command_check_interval=-1
command_file=/usr/local/nagios/var/rw/nagios.cmd

external_command_buffer_slots=4096

check_for_updates=1
bare_update_check=0

[email protected]
[email protected]

interval_length=60

use_syslog=1
log_notifications=1
log_service_retries=1
log_host_retries=1
log_event_handlers=1
log_initial_states=0
log_external_commands=1
log_passive_checks=1

service_inter_check_delay_method=s
host_inter_check_delay_method=s
service_interleave_factor=s
max_concurrent_checks=20

max_service_check_spread=30
max_host_check_spread=30

service_check_timeout=60
host_check_timeout=30
event_handler_timeout=30
notification_timeout=30
ocsp_timeout=5
perfdata_timeout=5

obsess_over_services=0
service_perfdata_file=/usr/local/nagios/var/service-perfdata
service_perfdata_file_template=$LASTTIMESTAMP$\t$HOSTNAME$\t$SERVICEDESC$\t$SERVICEOUTPUT$\t$SERVICEPERFDATA$\n
service_perfdata_file_mode=a
service_perfdata_file_processing_interval=0
service_perfdata_file_processing_command=process-service-perfdata

obsess_over_hosts=0
host_perfdata_file=/usr/local/nagios/var/host-perfdata
host_perfdata_file_template=$LASTTIMESTAMP$\t$HOSTNAME$\t$HOSTOUTPUT$\t$HOSTPERFDATA$\n
host_perfdata_file_mode=a
host_perfdata_file_processing_interval=0
host_perfdata_file_processing_command=process-host-perfdata

check_for_orphaned_services=1
check_for_orphaned_hosts=1

retain_state_information=1
state_retention_file=/usr/local/nagios/var/retention.dat
retention_update_interval=60

use_retained_program_state=1
use_retained_scheduling_info=1

retained_contact_host_attribute_mask=0
retained_contact_service_attribute_mask=0
retained_process_host_attribute_mask=0
retained_process_service_attribute_mask=0
retained_host_attribute_mask=0
retained_service_attribute_mask=0
retained_scheduling_info_attribute_mask=0
EOF

Configurar Contacts

Edit /usr/local/nagios/etc/objects/contacts.cfg:

define contact {
    contact_name                    nagiosadmin
    use                             generic-contact
    alias                           Nagios Admin
    email                           [email protected]
    pager                           +1-999-999-9999
}

define contact {
    contact_name                    ops_team
    use                             generic-contact
    alias                           Operations Team
    email                           [email protected]
}

define contactgroup {
    contactgroup_name               admins
    alias                           Nagios Administrators
    members                         nagiosadmin
}

define contactgroup {
    contactgroup_name               ops
    alias                           Operations
    members                         ops_team
}

Adding Hosts and Servicios

Crear Host Configuración

sudo tee /usr/local/nagios/etc/objects/hosts/web-servers.cfg > /dev/null << 'EOF'
define host {
    use                     linux-server
    host_name               web-server-01
    alias                   Web Server 1
    address                 192.168.1.10
    hostgroups              web-servers
    contact_groups          admins,ops
}

define host {
    use                     linux-server
    host_name               web-server-02
    alias                   Web Server 2
    address                 192.168.1.11
    hostgroups              web-servers
    contact_groups          admins,ops
}

define hostgroup {
    hostgroup_name          web-servers
    alias                   Web Servers
    members                 web-server-01,web-server-02
}
EOF

Crear Servicio Configuración

sudo tee /usr/local/nagios/etc/objects/hosts/web-services.cfg > /dev/null << 'EOF'
define service {
    use                     local-service
    host_name               web-server-01,web-server-02
    service_description     CPU Load
    check_command           check_local_load!5.0,4.0!10.0,6.0
    contact_groups          admins,ops
}

define service {
    use                     local-service
    host_name               web-server-01,web-server-02
    service_description     Disk Space
    check_command           check_local_disk!20%!10%!/
    contact_groups          admins,ops
}

define service {
    use                     local-service
    host_name               web-server-01,web-server-02
    service_description     HTTP
    check_command           check_http
    contact_groups          admins,ops
}

define service {
    use                     local-service
    host_name               web-server-01,web-server-02
    service_description     Memory Usage
    check_command           check_local_swap!20!10
    contact_groups          admins,ops
}
EOF

NRPE Instalación

On Monitoreo Servidor

cd /tmp
wget https://github.com/NagiosEnterprises/nrpe/releases/download/nrpe-4.1.1/nrpe-4.1.1.tar.gz
tar -xzf nrpe-4.1.1.tar.gz
cd nrpe-4.1.1

./configure
make all
sudo make install-plugin
sudo make install-daemon
sudo make install-daemon-config
sudo make install-daemon-init

On Remote Hosts (Linux)

# Download and compile
cd /tmp
wget https://github.com/NagiosEnterprises/nrpe/releases/download/nrpe-4.1.1/nrpe-4.1.1.tar.gz
tar -xzf nrpe-4.1.1.tar.gz
cd nrpe-4.1.1

./configure
make all
sudo make install-daemon
sudo make install-daemon-config

# Edit NRPE configuration
sudo sed -i "s/^allowed_hosts=.*/allowed_hosts=127.0.0.1,::1,192.168.1.10/" /usr/local/nagios/etc/nrpe.cfg

# Start service
sudo systemctl enable nrpe
sudo systemctl start nrpe

Define NRPE Comandos in Nagios

sudo tee /usr/local/nagios/etc/objects/commands.cfg >> /dev/null << 'EOF'

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

define command {
    command_name    check_nrpe_1arg
    command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -a $ARG2$
}
EOF

Notificaciones Configuración

Email Notificaciones

Edit commands.cfg to add email commands:

define command {
    command_name    notify-host-by-email
    command_line    /usr/bin/printf "%b" "Notification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n" | mail -s "Host $HOSTSTATE$ alert for $HOSTNAME$" $CONTACTEMAIL$
}

define command {
    command_name    notify-service-by-email
    command_line    /usr/bin/printf "%b" "Notification Type: $NOTIFICATIONTYPE$\nService: $SERVICEDESC$\nHost: $HOSTNAME$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\nInfo: $SERVICEOUTPUT$\n" | mail -s "Service $SERVICESTATE$ alert - $HOSTNAME$/$SERVICEDESC$" $CONTACTEMAIL$
}

Custom Notificación Scripts

sudo mkdir -p /usr/local/nagios/libexec/alerts

sudo tee /usr/local/nagios/libexec/alerts/slack-notification.sh > /dev/null << 'EOF'
#!/bin/bash

SLACK_WEBHOOK="https://hooks.slack.com/services/YOUR/WEBHOOK/URL"
HOSTNAME="$1"
STATE="$2"
OUTPUT="$3"

curl -X POST -H 'Content-type: application/json' \
  --data "{\"text\":\"Alert: $HOSTNAME is $STATE - $OUTPUT\"}" \
  $SLACK_WEBHOOK
EOF

chmod +x /usr/local/nagios/libexec/alerts/slack-notification.sh
sudo chown nagios:nagios /usr/local/nagios/libexec/alerts/slack-notification.sh

Rendimiento Tuning

Optimizar Servicio Checks

# In nagios.cfg
check_result_reaper_frequency=10
max_concurrent_checks=20
service_inter_check_delay_method=smart
host_inter_check_delay_method=smart

Habilitar Servicio Rendimiento Datos

sudo tee -a /usr/local/nagios/etc/nagios.cfg > /dev/null << 'EOF'
process_performance_data=1
EOF

Archivo Old Registros

# Crear log rotation script
sudo tee /etc/logrotate.d/nagios > /dev/null << 'EOF'
/usr/local/nagios/var/nagios.log {
    monthly
    rotate 12
    postrotate
        /bin/kill -HUP `cat /usr/local/nagios/var/nagios.pid`
    endscript
}
EOF

Troubleshooting

Verify Configuration Syntax

/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

Check Service Status

sudo systemctl status nagios
sudo journalctl -u nagios -f

Monitor Log Files

tail -f /usr/local/nagios/var/nagios.log

Debug NRPE Connection

# Prueba from monitoreo server
/usr/local/nagios/libexec/check_nrpe -H 192.168.1.20 -c check_load

Conclusión

Nagios Core provides granular control over infrastructure monitoreo through explicit configuration. By following Esta guía, you've built a scalable monitoreo platform capable of handling complex environments. Focus on developing comprehensive service checks tailored a su applications, implementing effective notification strategies, and regularly reviewing and updating alert thresholds. The flexibility of Nagios allows growth alongside your infrastructure Mientras maintaining visibility into system health.