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
fi

In 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.sh

E 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.cfg

Dovresti ottenere qualcosa del genere:

Controlla Configurazione Nagios

Assicurati che restituisca 0 errori e 0 avvisi e procedi a ricaricare il servizio:

sudo systemctl reload-or-restart nagios.service

Dopo 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_nrpe

Consenti 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.150

Definisci 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.service

Controlla che il servizio NRPE sia in esecuzione:

cat /etc/services | grep nrpe  
netstat -at | grep nrpe

Ora 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-plugin

Quindi, 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
fi

Consenti l’esecuzione dello script:

sudo chmod +x /usr/local/scripts/check_root_home_du.sh

Lo 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.sh

E riavvia l’ascoltatore NRPE:

sudo systemctl restart nagios-nrpe-server.service

Ora 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.cfg
sudo systemctl reload-or-restart nagios.service

E 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.

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.