Adagios is a web-based Nagios configuration interface that allows you to manage your Nagios configuration through a user-friendly web UI. It provides real-time configuration editing, validation, and deployment capabilities.
| File/Directory | Path | Purpose |
|---|---|---|
| Main config | /etc/adagios/adagios.conf |
Adagios main configuration |
| Nagios config | /etc/nagios/nagios.cfg |
Nagios main configuration |
| Object config | /etc/nagios/objects/ |
Nagios object definitions |
| Adagios objects | /etc/adagios/objects/ |
Adagios object templates |
| Pynag config | /etc/pynag/pynag.conf |
Pynag library configuration |
| Web config | /etc/apache2/sites-available/adagios.conf |
Apache configuration |
| Session data | /var/lib/adagios/sessions/ |
Session storage |
| Cache | /var/cache/adagios/ |
Cached configuration data |
| Logs | /var/log/adagios/ |
Adagios log files |
| Plugins | /usr/lib/nagios/plugins/ |
Nagios plugins |
| Event handlers | /etc/nagios/eventhandlers/ |
Event handler scripts |
# /etc/adagios/adagios.conf
[general]
# Application settings
debug = False
language = en
theme = default
# Nagios configuration
nagios_config = /etc/nagios/nagios.cfg
nagios_bin = /usr/sbin/nagios
nagios_init_script = /etc/init.d/nagios
# Pynag settings
pynag_config_file = /etc/pynag/pynag.conf
# Authentication
authentication = True
authentication_backend = apache
default_user = nagiosadmin
# Session settings
session_timeout = 3600
session_cookie_secure = True
session_cookie_httponly = True
# Logging
log_file = /var/log/adagios/adagios.log
log_level = INFO
[paths]
# Directory paths
nagios_config_dir = /etc/nagios/objects
nagios_state_file = /var/nagios/state/status.dat
nagios_log_file = /var/nagios/nagios.log
nagios_command_file = /var/nagios/rw/nagios.cmd
# Adagios paths
adagios_config_dir = /etc/adagios
adagios_cache_dir = /var/cache/adagios
adagios_session_dir = /var/lib/adagios/sessions
adagios_template_dir = /usr/share/adagios/templates
# Plugin paths
plugin_dir = /usr/lib/nagios/plugins
eventhandler_dir = /etc/nagios/eventhandlers
notification_dir = /etc/nagios/notifications
[security]
# Security settings
allow_command_file = True
allow_config_changes = True
allow_external_commands = True
# Allowed hosts for external commands
allowed_hosts = 127.0.0.1, 192.168.1.0/24
# CSRF protection
csrf_enabled = True
csrf_token_timeout = 3600
# File access restrictions
allowed_config_extensions = .cfg, .conf, .ini
forbidden_paths = /etc/shadow, /etc/passwd, /etc/sudoers
[notifications]
# Notification settings
enable_notifications = True
notification_methods = email, slack
# Email settings
email_from = adagios@example.com
email_smtp_server = smtp.example.com
email_smtp_port = 587
email_smtp_user = adagios@example.com
email_smtp_password = EmailPassword123!
email_use_tls = True
# Slack settings
slack_webhook_url = https://hooks.slack.com/services/XXX/YYY/ZZZ
slack_channel = #monitoring
[ui]
# User interface settings
items_per_page = 50
show_object_ids = False
show_object_comments = True
enable_quick_edit = True
enable_bulk_edit = True
# Dashboard settings
dashboard_refresh_interval = 60
dashboard_show_acknowledged = False
dashboard_show_downtime = True
# Map settings
enable_status_map = True
map_layout_file = /etc/adagios/maps/default.map
[performance]
# Performance settings
enable_caching = True
cache_timeout = 300
max_config_size_mb = 50
parallel_config_loading = True
worker_processes = 4
[plugins]
# Plugin configuration
enabled_plugins = status, config, rest, mikrotik, business
plugin_timeout = 30
plugin_debug = False
# /etc/pynag/pynag.conf
[nagios]
# Nagios configuration
config_file = /etc/nagios/nagios.cfg
nagios_bin = /usr/sbin/nagios
nagios_init_script = /etc/init.d/nagios
# State file
state_file = /var/nagios/state/status.dat
log_file = /var/nagios/nagios.log
command_file = /var/nagios/rw/nagios.cmd
# Object directories
object_dirs = /etc/nagios/objects
object_dirs = /etc/nagios/conf.d
# Plugin directory
plugin_dir = /usr/lib/nagios/plugins
[pynag]
# Pynag settings
debug = False
log_file = /var/log/pynag/pynag.log
cache_dir = /var/cache/pynag
session_dir = /var/lib/pynag/sessions
# Parser settings
parser_encoding = utf-8
parser_ignore_errors = False
parser_warn_on_duplicates = True
# Validation
validate_on_save = True
validate_before_reload = True
# /etc/nagios/nagios.cfg
# Adagios integration
cfg_dir=/etc/nagios/objects
cfg_dir=/etc/nagios/conf.d
cfg_file=/etc/nagios/objects/commands.cfg
cfg_file=/etc/nagios/objects/contacts.cfg
cfg_file=/etc/nagios/objects/timeperiods.cfg
cfg_file=/etc/nagios/objects/templates.cfg
# External commands
check_external_commands=1
command_file=/var/nagios/rw/nagios.cmd
command_check_interval=1s
# Status file
status_file=/var/nagios/state/status.dat
status_update_interval=10
# Logging
log_file=/var/nagios/nagios.log
log_notifications=1
log_service_retries=1
log_host_retries=1
log_event_handlers=1
log_initial_states=1
log_current_states=1
log_external_commands=1
log_passive_checks=1
# Performance data
service_perfdata_file=/var/nagios/perfdata/service-perfdata
service_perfdata_file_template=DATATYPE::SERVICEPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tSERVICEDESC::$SERVICEDESC$\tSERVICEPERFDATA::$SERVICEPERFDATA$\tSERVICECHECKCOMMAND::$SERVICECHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$\tSERVICESTATE::$SERVICESTATE$\tSERVICESTATETYPE::$SERVICESTATETYPE$
service_perfdata_file_mode=a
service_perfdata_file_processing_interval=30
host_perfdata_file=/var/nagios/perfdata/host-perfdata
host_perfdata_file_template=DATATYPE::HOSTPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tHOSTPERFDATA::$HOSTPERFDATA$\tHOSTCHECKCOMMAND::$HOSTCHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$
host_perfdata_file_mode=a
host_perfdata_file_processing_interval=30
# /etc/nagios/objects/contacts.cfg
define contact {
contact_name nagiosadmin
alias Nagios Administrator
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r
host_notification_options d,u,r
service_notification_commands notify-service-by-email
host_notification_commands notify-host-by-email
email admin@example.com
pager +1234567890
}
define contact {
contact_name ops-team
alias Operations Team
service_notification_period workhours
host_notification_period workhours
service_notification_options c,r
host_notification_options d,r
service_notification_commands notify-service-by-email
host_notification_commands notify-host-by-email
email ops-team@example.com
}
define contactgroup {
contactgroup_name admins
alias Nagios Administrators
members nagiosadmin
}
define contactgroup {
contactgroup_name ops
alias Operations Team
members ops-team
}
# /etc/nagios/objects/commands.cfg
define command {
command_name notify-host-by-email
command_line /usr/bin/printf "%b" "Subject: $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$\n\n$NOTIFICATIONTYPE$ Host Alert\n\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/bin/sendmail -f nagios@example.com $CONTACTEMAIL$
}
define command {
command_name notify-service-by-email
command_line /usr/bin/printf "%b" "Subject: $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$\n\n$NOTIFICATIONTYPE$ Service Alert\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\nInfo: $SERVICEOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/bin/sendmail -f nagios@example.com $CONTACTEMAIL$
}
define command {
command_name check-host-alive
command_line $USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 5
}
define command {
command_name check-http
command_line $USER1$/check_http -I $HOSTADDRESS$ -u $ARG1$ -s $ARG2$
}
define command {
command_name check-ssh
command_line $USER1$/check_ssh -H $HOSTADDRESS$ -p $ARG1$
}
define command {
command_name check-disk
command_line $USER1$/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$
}
# /etc/nagios/objects/timeperiods.cfg
define timeperiod {
timeperiod_name 24x7
alias 24 Hours A Day, 7 Days A Week
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
}
define timeperiod {
timeperiod_name workhours
alias Work Hours (8AM-6PM)
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
}
define timeperiod {
timeperiod_name never
alias Never
}
# /etc/nagios/objects/templates.cfg
define host {
name generic-host
check_period 24x7
check_interval 5
retry_interval 1
max_check_attempts 5
check_command check-host-alive
notification_period 24x7
notification_interval 30
notification_options d,u,r
contact_groups admins
register 0
}
define host {
name linux-server
use generic-host
check_command check-host-alive
register 0
}
define host {
name windows-server
use generic-host
check_command check-host-alive
register 0
}
define host {
name network-device
use generic-host
check_command check-host-alive
register 0
}
define service {
name generic-service
check_period 24x7
check_interval 5
retry_interval 1
max_check_attempts 4
notification_period 24x7
notification_interval 60
notification_options w,u,c,r
contact_groups admins
register 0
}
define service {
name http-service
use generic-service
check_command check-http!/
register 0
}
define service {
name ssh-service
use generic-service
check_command check-ssh!22
register 0
}
# /etc/nagios/objects/hosts.cfg
define host {
use linux-server
host_name webserver01
alias Web Server 01
address 192.168.1.10
contact_groups admins,ops
action_url http://webserver01/
notes_url http://wiki.example.com/webserver01
icon_image server-linux.png
}
define host {
use linux-server
host_name dbserver01
alias Database Server 01
address 192.168.1.20
contact_groups admins,dba
action_url http://dbserver01:3306/
notes_url http://wiki.example.com/dbserver01
icon_image database.png
}
define host {
use network-device
host_name switch-core-01
alias Core Switch 01
address 192.168.1.1
contact_groups admins,network
action_url https://192.168.1.1/
icon_image switch.png
}
# /etc/nagios/objects/services.cfg
define service {
use http-service
host_name webserver01
service_description HTTP
check_command check-http!/!200
}
define service {
use ssh-service
host_name webserver01
service_description SSH
}
define service {
use generic-service
host_name webserver01
service_description Disk /
check_command check-disk!20%!10%!/
}
define service {
use generic-service
host_name dbserver01
service_description MySQL
check_command check_mysql!monitoring!Password123
}
define service {
use generic-service
host_name dbserver01
service_description Disk /var/lib/mysql
check_command check-disk!25%!15%!/var/lib/mysql
}
#!/bin/bash
# /etc/nagios/notifications/notify-by-email.sh
# Email notification script for Adagios/Nagios
NOTIFICATIONTYPE="$1"
HOSTNAME="$2"
SERVICEDESC="$3"
SERVICESTATE="$4"
HOSTADDRESS="$5"
SERVICEOUTPUT="$6"
LONGDATETIME="$7"
CONTACTEMAIL="$8"
SUBJECT="[$NOTIFICATIONTYPE] $HOSTNAME/$SERVICEDESC is $SERVICESTATE"
BODY="$NOTIFICATIONTYPE Alert
Host: $HOSTNAME
Address: $HOSTADDRESS
Service: $SERVICEDESC
State: $SERVICESTATE
Info: $SERVICEOUTPUT
Date/Time: $LONGDATETIME
--
Nagios Monitoring System
"
echo "$BODY" | mail -s "$SUBJECT" "$CONTACTEMAIL"
#!/bin/bash
# /etc/nagios/notifications/notify-by-slack.sh
# Slack notification script for Adagios/Nagios
WEBHOOK_URL="https://hooks.slack.com/services/XXX/YYY/ZZZ"
CHANNEL="#monitoring-alerts"
USERNAME="Nagios"
NOTIFICATIONTYPE="$1"
HOSTNAME="$2"
SERVICEDESC="$3"
SERVICESTATE="$4"
SERVICEOUTPUT="$5"
# Determine color based on state
case "$SERVICESTATE" in
"CRITICAL")
COLOR="danger"
EMOJI=":rotating_light:"
;;
"WARNING")
COLOR="warning"
EMOJI=":warning:"
;;
"OK")
COLOR="good"
EMOJI=":white_check_mark:"
;;
*)
COLOR="#808080"
EMOJI=":information_source:"
;;
esac
PAYLOAD=$(cat <<EOF
{
"channel": "$CHANNEL",
"username": "$USERNAME",
"icon_emoji": "$EMOJI",
"attachments": [
{
"color": "$COLOR",
"title": "Nagios Alert: $NOTIFICATIONTYPE",
"fields": [
{"title": "Host", "value": "$HOSTNAME", "short": true},
{"title": "Service", "value": "$SERVICEDESC", "short": true},
{"title": "State", "value": "$SERVICESTATE", "short": true},
{"title": "Info", "value": "$SERVICEOUTPUT", "short": false}
],
"footer": "Nagios via Adagios",
"ts": $(date +%s)
}
]
}
EOF
)
curl -X POST -H 'Content-type: application/json' --data "$PAYLOAD" "$WEBHOOK_URL"
# Validate Nagios configuration
sudo nagios -v /etc/nagios/nagios.cfg
# Validate through Adagios web interface
# Navigate to Config -> Validate
# Check Pynag configuration
sudo pynag config test
# Verify object files
sudo pynag config show
# Restart Nagios
sudo systemctl restart nagios
# Restart Apache (for Adagios web interface)
sudo systemctl restart apache2
# Check service status
sudo systemctl status nagios
sudo systemctl status apache2
# View logs
sudo tail -f /var/log/nagios/nagios.log
sudo tail -f /var/log/adagios/adagios.log
# Through Adagios web interface:
# 1. Navigate to Config
# 2. Make changes
# 3. Click "Validate"
# 4. Click "Apply" or "Restart Nagios"
# Command line alternative
sudo nagios -v /etc/nagios/nagios.cfg && sudo systemctl reload nagios
# Access Adagios web interface
curl http://localhost/adagios
# Check API endpoint
curl http://localhost/adagios/api/1.0/config/
# Verify authentication
curl -u nagiosadmin:password http://localhost/adagios/api/1.0/status/
# List all hosts
sudo pynag config list host
# List all services
sudo pynag config list service
# Show specific object
sudo pynag config show host webserver01
# Validate configuration
sudo nagios -v /etc/nagios/nagios.cfg
# Check Nagios status
sudo systemctl status nagios
# View status file
sudo cat /var/nagios/state/status.dat
# Check command file
sudo ls -la /var/nagios/rw/nagios.cmd
Every deployment is unique. We provide consulting for:
Get personalized assistance: office@linux-server-admin.com | Contact Page