Nivell: CFGS - Administració de Sistemes Informàtics en Xarxa (ASIX)
Nagios és un sistema de monitoratge de codi obert que permet supervisar la disponibilitat i el rendiment de hosts, serveis i infraestructures de xarxa. Originalment creat per Ethan Galstad el 1999 com a NetSaint, va ser reanomenat com a Nagios el 2002.
| Característica | Nagios Core | Nagios XI |
|---|---|---|
| Llicència | Codi obert (GPLv2) | Propietari (de pagament) |
| Interfície web | Bàsica (CGI) | Avançada i moderna |
| Configuració | Fitxers de text | Assistent gràfic |
| Suport | Comunitat | Comercial |
| Cost | Gratuït | De pagament |
En aquest document treballarem amb Nagios Core, la versió de codi obert.
Nagios segueix una arquitectura client-servidor:
Nagios Daemon (nagios) El procés
principal que s’encarrega de llegir la configuració, programar els
checks i processar els resultats.
Scheduler Gestor intern que determina quan s’ha d’executar cada check segons l’interval configurat.
Plugins Scripts o executables externs que realitzen les comprovacions reals. Retornen un codi de sortida estàndard:
| Codi | Estat | Color |
|---|---|---|
0 |
OK | Verd |
1 |
WARNING | Groc |
2 |
CRITICAL | Vermell |
3 |
UNKNOWN | Taronja |
NRPE (Nagios Remote Plugin Executor) Agent instal·lat als hosts remots que permet executar plugins localment i retornar el resultat al servidor Nagios.
sudo apt update
sudo apt install -y apache2 php libapache2-mod-php \
gcc make libgd-dev libssl-dev unzip wget \
libmcrypt-dev libnet-snmp-perl gettextsudo useradd -m -s /bin/bash nagios
sudo groupadd nagcmd
sudo usermod -aG nagcmd nagios
sudo usermod -aG nagcmd www-data# Descarregar l'última versió estable
cd /tmp
wget https://github.com/NagiosEnterprises/nagioscore/releases/download/nagios-4.4.14/nagios-4.4.14.tar.gz
tar xzf nagios-4.4.14.tar.gz
cd nagios-4.4.14
# Compilar i instal·lar
./configure --with-command-group=nagcmd
make all
sudo make install
sudo make install-init
sudo make install-commandmode
sudo make install-config
sudo make install-webconfcd /tmp
wget https://nagios-plugins.org/download/nagios-plugins-2.4.6.tar.gz
tar xzf nagios-plugins-2.4.6.tar.gz
cd nagios-plugins-2.4.6
./configure --with-nagios-user=nagios --with-nagios-group=nagios
make
sudo make install# Crear usuari per a la interfície web
sudo htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
# Activar mòduls d'Apache necessaris
sudo a2enmod rewrite cgi
sudo systemctl restart apache2sudo systemctl enable nagios
sudo systemctl start nagios
sudo systemctl status nagios# Comprovar la sintaxi de la configuració
sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg/usr/local/nagios/
├── bin/
│ └── nagios ← Executable principal
├── etc/
│ ├── nagios.cfg ← Fitxer de configuració principal
│ ├── cgi.cfg ← Configuració de la interfície web
│ ├── htpasswd.users ← Usuaris web
│ ├── resource.cfg ← Variables de macro ($USER1$...)
│ └── objects/
│ ├── commands.cfg ← Definició d'ordres
│ ├── contacts.cfg ← Contactes i grups
│ ├── hosts.cfg ← Hosts monitorats (creat per l'admin)
│ ├── services.cfg ← Serveis monitorats (creat per l'admin)
│ ├── localhost.cfg ← Exemple de configuració local
│ ├── templates.cfg ← Plantilles reutilitzables
│ └── timeperiods.cfg ← Períodes de temps
├── libexec/ ← Plugins instal·lats
├── share/ ← Fitxers web (HTML, CGI)
├── var/
│ ├── nagios.log ← Registre principal
│ ├── status.dat ← Estat actual dels objectes
│ └── rw/
│ └── nagios.cmd ← Pipe per a ordres externes
└── sbin/ ← Scripts CGI de la interfície webnagios.cfgEl fitxer nagios.cfg conté els paràmetres globals i les
referències als fitxers d’objectes:
# Indica quins fitxers o directoris contenen objectes de configuració
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
# Es pot incloure un directori complet
cfg_dir=/usr/local/nagios/etc/servers
# Intervals de check (en segons)
interval_length=60
# Fitxer de log
log_file=/usr/local/nagios/var/nagios.log
# Retenció de l'estat entre reinicis
retain_state_information=1
state_retention_file=/usr/local/nagios/var/retention.datNagios utilitza un model basat en objectes per descriure tot allò que es vol monitorar. Els tipus d’objectes principals són:
| Tipus d’objecte | Descripció |
|---|---|
host |
Equip o dispositiu de xarxa |
hostgroup |
Agrupació de hosts |
service |
Servei associat a un host |
servicegroup |
Agrupació de serveis |
contact |
Persona que rep notificacions |
contactgroup |
Agrupació de contactes |
timeperiod |
Interval de temps per a checks o notificacions |
command |
Ordre per executar un plugin |
Nagios permet definir plantilles
(templates) per evitar repetir configuració. Un objecte pot
heretar valors d’un altre amb el paràmetre use:
# Plantilla genèrica per a hosts Linux
define host {
name linux-server
check_command check-host-alive
check_interval 5
retry_interval 1
max_check_attempts 3
check_period 24x7
notification_interval 30
notification_period 24x7
notification_options d,u,r
register 0 ; No és un host real, és una plantilla
}
# Host que hereta la plantilla
define host {
use linux-server
host_name servidor-web
alias Servidor Web Principal
address 192.168.1.10
}
Un host representa qualsevol dispositiu de xarxa que volem monitorar (servidors, routers, switches, impressores…).
define host {
; Paràmetres obligatoris
host_name servidor-db ; Identificador únic
alias Servidor de base de dades ; Nom descriptiu
address 192.168.1.20 ; IP o nom DNS
; Herència de plantilla
use linux-server
; Checks
check_command check-host-alive ; Ordre per verificar disponibilitat
check_interval 5 ; Cada 5 minuts en estat OK
retry_interval 1 ; Cada minut si hi ha problema
max_check_attempts 3 ; 3 intents abans de notificar
; Períodes
check_period 24x7
notification_period feina ; Notificar només en horari laboral
; Notificacions
notification_options d,u,r,f ; Down, Unreachable, Recovery, Flap
notification_interval 60
; Contactes
contacts admin
contact_groups admins-ti
; Grups
hostgroups servidors-linux, servidors-bd
}
define hostgroup {
hostgroup_name servidors-linux
alias Servidors Linux
members servidor-web, servidor-db, servidor-ftp
}
hosts.cfg# /usr/local/nagios/etc/objects/hosts.cfg
define host {
use linux-server
host_name portail
alias Servidor principal (NUC11)
address 192.168.1.1
hostgroups servidors-linux
}
define host {
use linux-server
host_name portatil-debian
alias Portàtil Debian
address 192.168.1.50
hostgroups servidors-linux, portatils
}
define hostgroup {
hostgroup_name servidors-linux
alias Servidors Linux
}
define hostgroup {
hostgroup_name portatils
alias Portàtils del departament
}
Un servei és una comprovació associada a un host concret. Cada host pot tenir múltiples serveis.
define service {
; Associació al host
host_name servidor-web
service_description HTTP ; Nom descriptiu del servei
; Herència
use generic-service
; Ordre de check (amb arguments)
check_command check_http!-p 80 -u /index.html
; Intervals
check_interval 5
retry_interval 1
max_check_attempts 3
; Períodes
check_period 24x7
notification_period 24x7
; Notificacions
notification_options w,u,c,r ; Warning, Unknown, Critical, Recovery
notification_interval 30
; Contactes
contact_groups admins-ti
}
# Comprovar PING
define service {
use generic-service
host_name servidor-web
service_description PING
check_command check_ping!100.0,20%!500.0,60%
; Sintaxi: check_ping!<warning_ms>,<warning_%>!<critical_ms>,<critical_%>
}
# Comprovar SSH (port 22)
define service {
use generic-service
host_name servidor-web
service_description SSH
check_command check_ssh
}
# Comprovar espai en disc via NRPE
define service {
use generic-service
host_name servidor-web
service_description Disc arrel (/)
check_command check_nrpe!check_disk
}
# Comprovar càrrega de CPU via NRPE
define service {
use generic-service
host_name servidor-web
service_description Càrrega CPU
check_command check_nrpe!check_load
}
# Comprovar un port específic
define service {
use generic-service
host_name servidor-db
service_description MySQL (3306)
check_command check_tcp!3306
}
define service {
use generic-service
hostgroup_name servidors-linux ; Aplica a tots els membres del grup
service_description SSH
check_command check_ssh
}
define contact {
contact_name admin-ti
alias Administrador de Sistemes
email admin@thos.local
pager +34600000000
; Quan notificar
host_notifications_enabled 1
service_notifications_enabled 1
host_notification_period 24x7
service_notification_period 24x7
host_notification_options d,u,r,f,s ; Down,Unreachable,Recovery,Flap,Scheduled
service_notification_options w,u,c,r,f,s
; Ordres de notificació
host_notification_commands notify-host-by-email
service_notification_commands notify-service-by-email
}
define contactgroup {
contactgroup_name admins-ti
alias Equip d'Administració TI
members admin-ti, responsable-ti
}
# Disponibilitat 24 hores, 7 dies
define timeperiod {
timeperiod_name 24x7
alias 24 Hores al dia, 7 Dies a la Setmana
sunday 00:00-24:00
monday 00:00-24:00
tuesday 00:00-24:00
wednesday 00:00-24:00
thursday 00:00-24:00
friday 00:00-24:00
saturday 00:00-24:00
}
# Horari laboral
define timeperiod {
timeperiod_name feina
alias Horari laboral (L-V 8h-18h)
monday 08:00-18:00
tuesday 08:00-18:00
wednesday 08:00-18:00
thursday 08:00-18:00
friday 08:00-18:00
}
Els plugins es troben a /usr/local/nagios/libexec/.
Segueixen un estàndard: prenen arguments per línia d’ordres i retornen
un codi de sortida (0, 1, 2 o 3) acompanyat d’un missatge.
nagios-plugins| Plugin | Funció |
|---|---|
check_ping |
Comprova la latència i pèrdua de paquets |
check_http |
Comprova la disponibilitat d’un servei web |
check_ssh |
Comprova la disponibilitat del servei SSH |
check_tcp |
Comprova si un port TCP és accessible |
check_smtp |
Comprova el servei de correu SMTP |
check_dns |
Comprova la resolució DNS |
check_disk |
Comprova l’ús de l’espai en disc (local) |
check_load |
Comprova la càrrega de la CPU (local) |
check_users |
Comprova el nombre d’usuaris connectats (local) |
check_procs |
Comprova processos en execució (local) |
check_swap |
Comprova l’ús de la memòria d’intercanvi (local) |
check_snmp |
Comprova valors via protocol SNMP |
check_nrpe |
Executa checks remots via agent NRPE |
Les ordres es defineixen al fitxer commands.cfg:
# Exemple: ordre check_http amb arguments
define command {
command_name check_http
command_line $USER1$/check_http -H $HOSTADDRESS$ $ARG1$
}
# Exemple: ordre check_disk via NRPE
define command {
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
| Macro | Valor |
|---|---|
$USER1$ |
Ruta als plugins (/usr/local/nagios/libexec) |
$HOSTADDRESS$ |
Adreça IP o DNS del host actual |
$HOSTNAME$ |
Nom del host actual |
$SERVICEDESC$ |
Descripció del servei actual |
$ARG1$, $ARG2$… |
Arguments passats a l’ordre |
# Com a usuari nagios
sudo -u nagios /usr/local/nagios/libexec/check_http -H 192.168.1.10 -p 80
# Sortida: HTTP OK: HTTP/1.1 200 OK - 1234 bytes in 0.123 second response time |...
sudo -u nagios /usr/local/nagios/libexec/check_ping -H 192.168.1.1 -w 100,20% -c 500,60%
# Sortida: PING OK - Packet loss = 0%, RTA = 1.23 msL’NRPE (Nagios Remote Plugin Executor) permet executar plugins als hosts remots i retornar els resultats al servidor Nagios. Això és necessari per monitorar recursos locals dels hosts, com ara ús de disc, CPU, processos o memòria.
# Al host que volem monitorar (host client/agent)
sudo apt install nagios-nrpe-server nagios-plugins-basic nagios-plugins-standardEditar /etc/nagios/nrpe.cfg:
sudo nano /etc/nagios/nrpe.cfg# Adreça IP del servidor Nagios que pot fer consultes
allowed_hosts=127.0.0.1, 192.168.1.100 ; Afegir la IP del servidor Nagios
# Habilitar arguments (necessari per a checks parametritzats)
dont_blame_nrpe=0 ; Deixar a 0 per seguretat si no cal
# Definició dels checks locals disponibles
command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10
command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20
command[check_disk]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /
command[check_swap]=/usr/lib/nagios/plugins/check_swap -w 20% -c 10%
command[check_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200 -s RSZDT
sudo systemctl enable nagios-nrpe-server
sudo systemctl start nagios-nrpe-server# Al servidor Nagios
sudo apt install nagios-nrpe-plugin# Des del servidor Nagios, provar la connexió al host remot
/usr/local/nagios/libexec/check_nrpe -H 192.168.1.20
# Sortida esperada: NRPE v4.1.0
# Executar un check remot
/usr/local/nagios/libexec/check_nrpe -H 192.168.1.20 -c check_disk
# Sortida: DISK OK - free space: / 15432 MB (78% inode=90%)# A commands.cfg
define command {
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
# A services.cfg
define service {
use generic-service
host_name servidor-web
service_description Disc arrel (/)
check_command check_nrpe!check_disk
}
define service {
use generic-service
host_name servidor-web
service_description Càrrega CPU
check_command check_nrpe!check_load
}
L’accés a la interfície web de Nagios Core es fa des d’un navegador:
http://<ip-servidor-nagios>/nagios/Les credencials s’han configurat durant la instal·lació amb htpasswd.
Tactical Overview Resum general de l’estat de tots els hosts i serveis: quants estan en OK, WARNING, CRITICAL, UNKNOWN i quants checks han fallat.
Hosts Llistat de tots els hosts monitorats amb el seu estat actual, última comprovació i informació addicional.
Services Llistat de tots els serveis amb el seu estat, l’hora de l’última comprovació i el missatge retornat pel plugin.
Host Groups / Service Groups Vista agrupada per grups definits a la configuració.
Problems Vista filtrada que mostra únicament els problemes actuals (CRITICAL, WARNING o UNKNOWN).
Event Log Registre cronològic de tots els canvis d’estat i notificacions.
Status Maps Mapa visual de la infraestructura
monitorada (requereix el paquet libgd).
La configuració d’accés es troba a cgi.cfg:
# Usuari que té accés d'administrador complet
authorized_for_all_services=nagiosadmin
authorized_for_all_hosts=nagiosadmin
authorized_for_system_information=nagiosadmin
authorized_for_configuration_information=nagiosadmin
authorized_for_system_commands=nagiosadmin
authorized_for_all_service_commands=nagiosadmin
authorized_for_all_host_commands=nagiosadmin
Permeten enviar alertes a contactes addicionals si un problema no es resol en un temps determinat:
define serviceescalation {
host_name servidor-web
service_description HTTP
first_notification 3 ; Escalar a partir de la 3a notificació
last_notification 0 ; 0 = sense límit
notification_interval 15
contact_groups direccio-ti
}
Permet definir que un check no s’executi si un servei del qual depèn ja ha fallat:
define servicedependency {
host_name servidor-web
service_description Xarxa
dependent_host_name servidor-web
dependent_service_description HTTP
execution_failure_criteria c,u ; No executar check HTTP si Xarxa és CRITICAL o UNKNOWN
notification_failure_criteria c,u
}
Permet executar una acció automàtica quan un servei canvia d’estat. Per exemple, reiniciar Apache si cau:
# Script: /usr/local/nagios/libexec/event_handler_apache.sh
#!/bin/bash
case "$1" in
WARNING) ;;
UNKNOWN) ;;
CRITICAL) /usr/bin/sudo /bin/systemctl restart apache2 ;;
OK) ;;
esac
exit 0define service {
use generic-service
host_name servidor-web
service_description HTTP
check_command check_http
event_handler_enabled 1
event_handler event_handler_apache!$SERVICESTATE$
}
En els checks actius (per defecte), el servidor Nagios inicia el check. En els checks passius, és el propi host qui envia l’estat a Nagios. Útil per a dispositius darrere de tallafocs o per a tasques programades:
# Enviar un resultat passiu via ordre externa
echo "[$(date +%s)] PROCESS_SERVICE_CHECK_RESULT;servidor-web;HTTP;0;HTTP OK - Resultat passiu" \
| sudo tee /usr/local/nagios/var/rw/nagios.cmdPermet detectar si un host o servei no ha enviat un check passiu en un temps màxim:
define service {
use generic-service
host_name servidor-backup
service_description Backup nocturn
check_freshness 1
freshness_threshold 86400 ; 24 hores en segons
check_command check_dummy!2!No s'ha rebut resultat del backup
active_checks_enabled 0 ; Desactivar checks actius
passive_checks_enabled 1
}
PNP4Nagios és un complement per generar gràfiques de rendiment a
partir de les dades de performance data que retornen els
plugins:
sudo apt install pnp4nagiosEls plugins que suporten performance data retornen dades com:
HTTP OK: HTTP/1.1 200 OK - 1234 bytes in 0.123 second response time |time=0.123s;;;0.000 size=1234B;;;0Les dades després del | s’emmagatzemen i es representen
gràficament.
Sempre executar aquest pas abans de reiniciar el servei:
sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg# Log principal de Nagios
sudo tail -f /usr/local/nagios/var/nagios.log
# Log d'Apache (per a problemes amb la interfície web)
sudo tail -f /var/log/apache2/error.log
# Journal del sistema
sudo journalctl -u nagios -fEl daemon no arrenca: error a la configuració
Error: Could not open config file '/usr/local/nagios/etc/objects/hosts.cfg' for reading!Solució: El fitxer referenciat a nagios.cfg no existeix
o no té permisos correctes.
sudo chown nagios:nagios /usr/local/nagios/etc/objects/hosts.cfgEl check NRPE falla: “Connection refused”
# Comprovar que el servei NRPE s'executa al host remot
sudo systemctl status nagios-nrpe-server
# Comprovar el tallafoc al host remot
sudo ufw allow 5666/tcp # Port NRPE per defecte
# Verificar que el servidor Nagios és a la llista allowed_hosts
grep allowed_hosts /etc/nagios/nrpe.cfg“Return code of 127 for check…” (plugin no trobat)
El plugin no existeix o no és executable:
ls -la /usr/local/nagios/libexec/check_nrpe
sudo chmod +x /usr/local/nagios/libexec/check_nrpeNotificacions per correu no s’envien
# Comprovar que el MTA (Postfix, sendmail) funciona
echo "Test" | mail -s "Prova Nagios" admin@thos.local
# Verificar que les notificacions estan habilitades
grep notifications_enabled /usr/local/nagios/etc/nagios.cfghosts.cfg.nagios-nrpe-server a la
VM client.check_disk, check_load i check_swap al fitxer nrpe.cfg.check_nrpe.services.cfg
del servidor.contacts.cfg amb el teu
correu electrònic.hostgroups: servidors-web i servidors-bd.servidors-web.servidors-bd.hosts.cfg (per
exemple, elimina un paràmetre obligatori).nagios.log i identifica els
esdeveniments de les darreres 24 hores.# Verificar configuració
sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
# Gestió del servei
sudo systemctl start|stop|restart|status nagios
# Recarregar configuració sense aturar el servei
sudo systemctl reload nagios
# Provar un plugin manualment
sudo -u nagios /usr/local/nagios/libexec/check_http -H <ip> -p 80
# Provar un check NRPE
sudo -u nagios /usr/local/nagios/libexec/check_nrpe -H <ip-host-remot> -c check_disk
# Consultar el log en temps real
sudo tail -f /usr/local/nagios/var/nagios.log