Nagios Monitoring
Nagios is one of the oldest and most widely deployed monitoring systems. It uses a check-based model: define hosts and services, define check commands, and Nagios runs those checks on a schedule and alerts when checks fail. Unlike Prometheus (metrics-based), Nagios checks binary state: OK, WARNING, CRITICAL, or UNKNOWN. It is well-suited for traditional infrastructure monitoring where you want to know "is this service up?" rather than "what is the CPU trend over 6 months?"
Nagios architecture
Nagios monitoring model:
nagios-server runs checks:
check_http → GET http://website → 200 OK?
check_ping → ICMP to server → responding?
check_disk → SSH + NRPE → disk usage?
check_mysql → connect to DB → running?
↓
OK: no action
WARNING: notify after N failures
CRITICAL: notify immediately
UNKNOWN: check failed to runInstalling Nagios Core
# Install Nagios Core from Ubuntu repos (older but functional):
sudo apt install -y nagios4 nagios-plugins
# Set admin password:
sudo htpasswd -c /etc/nagios4/htpasswd.users nagiosadmin
sudo systemctl enable --now nagios4 apache2
# Access at http://localhost/nagios4
Default Nagios login
URL: http://YOUR_SERVER_IP/nagios4
User: nagiosadmin
Password: (the one you set with htpasswd)
Adding hosts and services
# Create a host configuration:
sudo nano /etc/nagios4/conf.d/webserver01.cfg
/etc/nagios4/conf.d/webserver01.cfg
define host {
use linux-server
host_name webserver01
alias Web Server 01
address 192.168.1.50
max_check_attempts 3
notification_interval 60
contact_groups admins
}
define service {
use generic-service
host_name webserver01
service_description HTTP
check_command check_http!-H webserver01
max_check_attempts 3
}
define service {
use generic-service
host_name webserver01
service_description Disk Usage
check_command check_disk!-w 20% -c 10% -p /
}
sudo nagios4 -v /etc/nagios4/nagios.cfg # Verify config
sudo systemctl reload nagios4
NRPE remote checks
# NRPE (Nagios Remote Plugin Executor) runs checks on remote servers:
# On the monitored server:
sudo apt install -y nagios-nrpe-server nagios-plugins
# Configure /etc/nagios/nrpe.cfg:
# allowed_hosts=192.168.1.100 ← your Nagios server IP
# command[check_disk]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /
sudo systemctl enable --now nagios-nrpe-server
# On the Nagios server, check via NRPE:
/usr/lib/nagios/plugins/check_nrpe -H 192.168.1.50 -c check_disk
Conclusion
Nagios is still widely deployed in traditional enterprise environments where the check-based "up/down" monitoring model fits the operations team's workflow. Its main limitation compared to modern tools is the configuration format (text-based config files, not web UI or YAML) and lack of time-series metrics for trending. For new deployments, Prometheus+Grafana is usually the better choice. For existing Nagios environments, Icinga2 is a compatible replacement that adds better configuration tooling while maintaining plugin compatibility.
Need help with Ubuntu administration?
Work directly with Muhammad Irfan Aslam for Ubuntu Server, Linux, cloud, Docker, DevOps, CI/CD, or infrastructure troubleshooting support.
Work with Muhammad Irfan Aslam