Nagios Plugin · 7 min read · Nov 18, 2025
Come Scrivere un Plugin di Controllo Personalizzato per Nagios
Questo tutorial è stato testato utilizzando Nagios Core 4.3.4 su Debian 9.2
Anche se Nagios Exchange ha migliaia di plugin disponibili per il download gratuito, a volte lo stato da controllare è molto specifico per il tuo scenario.
Considerazioni
Si presume che:
- Hai Nagios installato e in esecuzione (Puoi seguire questo Tutorial se non lo hai).
- Conosci le basi dell’amministrazione di Nagios.
Il server Nagios in questo esempio è ospitato su 192.168.0.150 e un client di esempio è ospitato sull’IP 192.168.0.200
Codici di Uscita
Per identificare lo stato di un servizio monitorato, Nagios esegue un plugin di controllo su di esso. Nagios può determinare quale sia lo stato del servizio leggendo il codice di uscita del controllo.
Nagios comprende i seguenti codici di uscita:
- 0 - Il servizio è OK.
- 1 - Il servizio ha un AVVISO.
- 2 - Il servizio è in uno stato CRITICO.
- 3 - Lo stato del servizio è SCONOSCIUTO.
Un programma può essere scritto in qualsiasi linguaggio per funzionare come un plugin di controllo Nagios. In base alla condizione controllata, il plugin può informare Nagios di un servizio malfunzionante.
Esempio di Plugin
Userò un semplice esempio. Ho scritto un plugin in uno script bash per controllare gli avvisi attuali. Consideriamo che ho configurato il server Nagios per avvisare solo in caso di stato critico, quindi voglio un avviso se ho troppi servizi in stato di avviso.
Considera il seguente script (check_warnings.sh):
#!/bin/bash
countWarnings=$(/usr/local/nagios/bin/nagiostats | grep "Ok/Warn/Unk/Crit:" | sed 's/[[:space:]]//g' | cut -d"/" -f5)
if (($countWarnings<=5)); then
echo "OK - $countWarnings servizi in stato di avviso"
exit 0
elif ((6<=$countWarnings && $countWarnings<=30)); then
# Questo caso non ha senso perché aggiunge solo un avviso.
# È solo per fare un esempio su tutte le possibili uscite.
echo "AVVISO - $countWarnings servizi in stato di avviso"
exit 1
elif ((30<=$countWarnings)); then
echo "CRITICO - $countWarnings servizi in stato di avviso"
exit 2
else
echo "SCONOSCIUTO - $countWarnings"
exit 3
fiIn base alle informazioni fornite dallo strumento nagiostats, presumo che tutto sia ok se ci sono cinque o meno servizi in stato di avviso.
Lascerò questo script con tutti gli altri plugin di Nagios all’interno di /usr/local/nagios/libexec/ (Questa directory potrebbe essere diversa a seconda della tua configurazione).
Come ogni plugin di Nagios, vorrai controllare dalla riga di comando prima di aggiungerlo ai file di configurazione.
Ricorda di consentire l’esecuzione dello script:
sudo chmod +x /usr/local/nagios/libexec/check_warnings.shE poi eseguilo come qualsiasi altro script:
Il risultato è un messaggio di testo e un codice di uscita:
Imposta un Nuovo Comando di Controllo e Servizio
Questo passaggio sarà lo stesso con i tuoi plugin, e se scarichi un plugin di terze parti da Internet.
Prima dovresti definire un comando nel file commands.cfg. La posizione di questo file dipende dalla configurazione che hai fatto, nel mio caso si trova in /usr/local/nagios/etc/objects/commands.cfg.
Quindi aggiungerò alla fine del file il seguente blocco:
# Comandi plugin personalizzati...
define command{
command_name check_warnings
command_line $USER1$/check_warnings.sh
}Ricorda che la variabile $USER1$ è una variabile locale di Nagios impostata nel file resource.cfg, nel mio caso punta a /usr/local/nagios/libexec.
Dopo aver definito il comando puoi associare quel comando a un servizio, e poi a un host. In questo esempio andremo a definire un servizio e assegnarlo a localhost, perché questo controllo è su Nagios stesso.
Modifica il file /usr/local/nagios/etc/objects/localhost.cfg e aggiungi il seguente blocco:
# Esempio - Controlla gli avvisi attuali...
define service{
use local-service
host_name localhost
service_description Avvisi Server Nagios
check_command check_warnings
}Ora siamo pronti, l’unica cosa che resta è ricaricare Nagios per leggere di nuovo i file di configurazione.
Ricorda sempre, prima di ricaricare Nagios, controlla che non ci siano errori nella configurazione. Puoi farlo con il comando nagios -v come root:
sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfgDovresti ottenere qualcosa del genere:

Assicurati che restituisca 0 errori e 0 avvisi e procedi a ricaricare il servizio:
sudo systemctl reload-or-restart nagios.serviceDopo aver ricaricato il servizio, vedrai il controllo associato nel localhost. Prima come in attesa:
E dopo l’esecuzione con il suo risultato:
Usa NRPE per Eseguire sui Client
Per eseguire uno script su un client remoto, dovrai configurare il Nagios Remote Plugin Executor (NRPE)
Poiché questo tutorial è basato su Debian 9, mostrerò come esempio come installarlo, ma puoi trovare istruzioni per qualsiasi distribuzione.
Installazione Generica su Client Basato su Debian
Nota che tutta la configurazione in questa sezione viene eseguita sul client da controllare, non sul server nagios.
Installa NRPE e i plugin di Nagios:
sudo apt-get install libcurl4-openssl-dev nagios-plugins nagios-nrpe-server nagios-nrpe-plugin --no-install-recommends
sudo ln -s /usr/lib/nagios/plugins/check_nrpe /usr/bin/check_nrpeConsenti al server Nagios di eseguire comandi sul client aggiungendolo all’entry allowed_hosts in /etc/nagios/nrpe.cfg. La riga dovrebbe apparire così:
allowed_hosts=127.0.0.1,::1,192.168.0.150Definisci i controlli standard che eseguirai su ogni client con NRPE. Definisci i controlli in /etc/nagios/nrpe_local.cfg. Ad esempio, un modello per il file potrebbe essere:
######################################
# Fai qui qualsiasi configurazione nrpe locale
######################################
#-----------------------------------------------------------------------------------
# Utenti
command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10
# Carico
command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20
command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z
command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200
# Disco
command[check_root]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /
command[check_boot]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /boot
command[check_usr]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /usr
command[check_var]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /var
command[check_tmp]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /tmp
# Se vuoi aggiungere un punto di montaggio non standard:
# command[check_mnt1]=/usr/lib/nagios/plugins/check_disk -w 4% -c 1% -p /export
#-----------------------------------------------------------------------------------L’idea di avere quel file generico è in modo da poter controllare lo stesso su ogni client.
Assicurati che il file locale e la directory .d siano inclusi nel file di configurazione principale con:
cat /etc/nagios/nrpe.cfg | grep include | grep -v ^#Riavvia il servizio:
sudo systemctl restart nagios-nrpe-server.serviceControlla che il servizio NRPE sia in esecuzione:
cat /etc/services | grep nrpe
netstat -at | grep nrpeOra controlla uno dei comandi NRPE precedentemente definiti dal server Nagios:
Nota che il comando check_users NRPE è stato definito nel file /etc/nagios/nrpe_local.cfg per eseguire /usr/lib/nagios/plugins/check_users -w 5 -c 10.
Nel caso non avessi il plugin nel server Nagios, puoi installarlo con:
sudo apt-get install nagios-nrpe-pluginQuindi, riassumendo, l’NRPE eseguirà uno script in un host remoto e restituirà il codice di uscita al server Nagios.
Configurazione per Script Personalizzati
Per utilizzare uno script personalizzato come plugin da eseguire remotamente tramite NRPE, dovresti prima scrivere lo script sul server, ad esempio in /usr/local/scripts/check_root_home_du.sh:
#!/bin/bash
homeUsage=$(du -s /root/ | cut -f1)
if (($homeUsage<=$((1024*1024)))); then
echo "OK - L'uso della home root è $(du -sh /root/ | cut -f1)"
exit 0
elif (($((1024*1024))<$homeUsage && $homeUsage<=$((3*1024*1024)))); then
echo "AVVISO - L'uso della home root è $(du -sh /root/ | cut -f1)"
exit 1
elif (($((3*1024*1024))<$homeUsage)); then
echo "CRITICO - L'uso della home root è $(du -sh /root/ | cut -f1)"
exit 2
else
echo "SCONOSCIUTO - Valore ricevuto: $homeUsage"
exit 3
fiConsenti l’esecuzione dello script:
sudo chmod +x /usr/local/scripts/check_root_home_du.shLo script precedente è un esempio molto semplice, che controlla l’uso del disco della directory /root e imposta una soglia per considerarlo OK, Avviso o Critico.
Aggiungi il comando al file di configurazione NRPE sul client (/etc/nagios/nrpe_local.cfg):
# Personalizzato
command[check_root_home_du]=/usr/local/scripts/check_root_home_du.shE riavvia l’ascoltatore NRPE:
sudo systemctl restart nagios-nrpe-server.serviceOra possiamo accedere al server e testarlo come qualsiasi plugin standard
Imposta il Controllo NRPE nei File di Configurazione del Server
Ora sappiamo che il plugin personalizzato funziona sul client e sul server, e che l’NRPE comunica correttamente, possiamo procedere a configurare i file di Nagios per controllare il dispositivo remoto. Quindi nel server imposta i file:
/usr/local/nagios/etc/objects/commands.cfg:
#...
define command{
command_name check_nrpe
command_line /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}/usr/local/nagios/etc/objects/nrpeclient.cfg:
define host{
use linux-server
host_name nrpeclient
alias nrpeclient
address 192.168.0.200
}
define service{
use local-service
host_name nrpeclient
service_description Uso Home Root
check_command check_nrpe!check_root_home_du
}Nota che il segno ! separa il comando dagli argomenti nell’entry check_command. Questo definisce che check_nrpe è il comando e check_root_home_du è il valore di $ARG1$.
Inoltre, a seconda della tua configurazione, dovresti aggiungere quest’ultimo file al file principale (/usr/local/nagios/etc/nagios.cfg):
#...
cfg_file=/usr/local/nagios/etc/objects/nrpeclient.cfg
#...Controlla la configurazione e, se non ci sono errori o avvisi, ricarica il servizio:
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfgsudo systemctl reload-or-restart nagios.serviceE ora hai un nuovo controllo personalizzato su un host:
Conclusione
Nagios ha una vasta libreria di plugin disponibili su Nagios Exchange. Tuttavia, in un grande ambiente è molto probabile che sia necessario alcuni controlli personalizzati per usi specifici, ad esempio: Controllare il risultato di un certo compito, monitorare un’applicazione sviluppata internamente, tra gli altri.
La flessibilità fornita da Nagios è perfetta per questi scenari.
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.