Icinga 2 · 7 min read · Nov 18, 2025

Aggiungi un nuovo Host e Servizi da Monitorare con Icinga 2

In questo tutorial, ti mostrerò come aggiungere un nuovo host da monitorare con Icinga 2 e come i servizi dell’host, come un server web HTTP, possono essere monitorati da Icinga. Ti mostrerò anche come creare il tuo comando plugin Icinga personalizzato per monitorare i servizi UDP nella tua infrastruttura di rete.

Icinga 2 fornisce un’infrastruttura di plug-in che consente di implementare controlli di server e servizi, nonché notifiche facilmente. Questo fatto consente agli amministratori di sistema e ai programmatori di costruire nuove funzionalità per Icinga 2 e creare comandi speciali specializzati nella verifica di diversi aspetti di un host, di un servizio di rete o di una funzionalità di rete.

Icinga 2 memorizza le definizioni degli Host con attributi oggetto utilizzati per le regole di servizio, notifiche, dipendenze e oggetti di inattività programmata nel file hosts.conf che si trova nella directory /etc/icinga2/conf.d/. In questo file puoi aggiungere una nuova definizione di host da controllare dal processo di monitoraggio di Icinga2. Nell’esempio seguente aggiungeremo una nuova definizione affinché il nostro router gateway predefinito possa essere controllato periodicamente da Icinga2 per vedere se è online tramite controlli ICMP.

nano /etc/icinga2/conf.d/hosts.conf

Vai alla fine del file e aggiungi le seguenti righe per aggiungere la nuova definizione dell’host.

object Host "Router" {  
  address = "192.168.1.1"  
  check_command = "hostalive"  
}

Ad esempio, sul router principale vogliamo anche controllare lo stato del server web HTTP utilizzato per l’autenticazione e le configurazioni. Le righe seguenti controlleranno il server web sul router per vedere se il server HTTP è attivo e risponde con i codici HTTP appropriati.

object Service "http" {  
  host_name = "Router"  
  check_command = "http"  
}

Monitora il server web con Icinga 2

Affinché Icinga 2 possa rilevare le nuove definizioni di Host e iniziare a monitorare periodicamente la nuova risorsa, è necessario riavviare il processo emettendo il seguente comando.

systemctl restart icinga2.service

Per verificare lo stato dell’host appena aggiunto, in questo caso il router, accedi al pannello Web di Icinga 2 e naviga su Panoramica -> Host. Nel piano di destra, dovresti vedere lo stato dell’host appena aggiunto, come illustrato nell’immagine sottostante che descrive lo stato del nostro router. I controlli degli host vengono eseguiti fondamentalmente tramite il protocollo ICMP e Icinga2 mostrerà il tempo medio di andata e ritorno per un host nel pannello web.

Stato host Icinga 2

Se desideri visualizzare lo stato dei controlli del servizio HTTP dell’host, naviga su Panoramica -> Gruppi di servizi e fai clic su Controlli HTTP. Nel piano di destra, dovresti vedere lo stato del servizio HTTP del router, come illustrato nello screenshot seguente.

Stato del servizio host

Icinga 2 viene fornito con una serie di comandi predefiniti che possono essere utilizzati per monitorare un’ampia gamma di servizi. Ma quei comandi predefiniti a volte non sono sufficienti per controllare servizi personalizzati. In questo caso, un approccio è creare il proprio script di comando personalizzato che può essere chiamato da Icinga 2 per monitorare il servizio. Nell’esempio seguente ti mostreremo come aggiungere un nuovo script di comando personalizzato per verificare lo stato di diversi servizi UDP sulla tua rete. Il comando personalizzato deve essere parametrizzato e deve contenere almeno due parametri, nella forma di –H hostname o IP e –p numero di porta. Lo script del comando personalizzato per verificare una porta di servizio UDP dovrebbe essere posizionato nella directory /usr/lib/nagios/plugins/ e dovrebbe avere il contenuto dichiarato nel campione sottostante.

nano /usr/lib/nagios/plugins/check_udpport

estratto del file check_udpport.

#!/bin/bash  
while getopts H:p: option  
do  
 case "${option}"  
in  
H) addr=${OPTARG};;  
p) port=${OPTARG};;  
 esac  
done  
   
/bin/nc -vz -u "$addr" "$port" > /dev/null 2>&1  
   
stat=`echo $?`  
   
if test $stat -eq 0; then  
echo "Port $port is opened on $addr"  
exit 0  
else  
echo "Port $port is not opened on $addr"  
exit 2  
fi

Plugin UDP personalizzato di Icunga

Cerchiamo di capire come funziona questo script. Come puoi vedere, il plugin non è altro che un semplice script Bash. Utilizziamo un’espressione di controllo while per scorrere due parametri definiti dalle lettere H e p. Le due lettere delle variabili shell H e p sono parametrizzate e analizzate come argomenti della riga di comando utilizzando l’istruzione case. L’istruzione case testerà se i parametri esistono e li dichiarerà per le variabili addr e port. Successivamente, le variabili $ addr e $ port verranno aggiunte come opzioni di comando per il comando netcat, che, a sua volta, verificherà se il numero di porta, definito nella variabile $port, è aperto per l’host con l’indirizzo IP definito dalla variabile $addr. L’output del comando netcat e eventuali errori non sono di interesse per questo plugin, quindi verranno scartati nel blackhole di Linux /dev/null. Ciò di cui abbiamo bisogno è il codice di uscita del comando netcat. Dopo che netcat avrà controllato la porta sull’host, restituirà sempre un codice di uscita 0 nel caso in cui la porta UDP controllata sia aperta. Il resto del comando è piuttosto semplice. Un’istruzione condizionale if-else stamperà quanto segue: se la porta UDP è aperta sull’indirizzo IP specificato, stamperà la stringa con il contenuto ‘la porta è aperta’ per quell’indirizzo IP dell’host insieme all’aggiunta del codice di uscita 0. Il codice di uscita 0 è sempre il codice di successo o di nessun errore restituito da un processo in Linux. Se la porta UDP non è aperta (il codice di uscita di netcat sarà diverso da 0), stamperà la stringa che dice ‘la porta non è aperta’ per l’host e aggiungerà il codice di uscita 2. I codici di uscita aggiunti dopo ogni stringa stampata in questo script hanno un enorme significato per i controlli di Icinga2, come spiegato di seguito.

Codice di ritorno del plugin di comando per lo stato del servizio o dello stato dell’host in Icinga 2:

0 = OK per i servizi e UP per gli host

1 = WARNING per i servizi e UP o DOWN/UNREACHABLE per gli host (l’host sta fluttuando o cambia frequentemente stato)

2 = CRITICAL per i servizi e DOWN/UNREACHABLE per gli host

3 = UNKNOWN DOWN/UNREACHABLE

Quindi fondamentalmente, Icinga 2 eseguirà questo script con i parametri host e porta e restituirà due stati: o la porta UDP non è raggiungibile e ti avviserà che il servizio UDP dell’host è Critico oppure la porta UDP è raggiungibile e ti informerà che il servizio UDP è in buone condizioni ed è OK.

Dopo aver modificato il file dello script, salvalo e chiudilo e assicurati che il file possa essere eseguito aggiungendo i permessi di esecuzione con il seguente comando.

chmod +x /usr/lib/nagios/plugins/check_udpport

Quindi, per testare se lo script funziona come previsto, esegui il comando contro una porta UDP aperta e una porta UDP chiusa su un host nella tua rete emettendo la sintassi sottostante.

Qui il server TFTP viene controllato per l’host 192.168.1.2.

/usr/lib/nagios/plugins/check_udpport –H 192.168.1.2 –p 69 

Simula i controlli contro una porta UDP di cui sei sicuro sia chiusa

/usr/lib/nagios/plugins/check_udpport –H 192.168.1.2 –p 68

Test porta UDP

Affinché questo nuovo plugin personalizzato venga ampiamente utilizzato in Icinga 2, aggiungi una nuova definizione di comando nel file di configurazione dei comandi di Icinga 2, come mostrato nell’esempio seguente.

nano /etc/icinga2/conf.d/commands.conf

Vai in fondo a questo file e aggiungi la definizione del comando come segue:

object CheckCommand "myudp" {  
  command = [ PluginDir + "/check_udpport" ]  
    
    arguments = {  
    "-H" = "$addr$"  
    "-p" = "$port$"  
}  
  vars.addr = "$address$"  
}

Aggiungi definizione comando Icinga

Il nome del comando che verrà utilizzato nelle configurazioni di Icinga 2 per chiamare il comando ckeck_udpport sarà “ myudp ”. Non è necessario specificare l’indirizzo quando chiami il comando per una definizione di servizio host perché è hardcoded dalla variabile macro di Icinga 2 $address$.

Per controllare se il comando funziona come previsto, aggiungi una nuova definizione di servizio per un host per controllare se un servizio UDP specifico è aperto o meno su quell’host. Ad esempio, per controllare se la porta DHCP è aperta per l’host 192.168.1.2, aggiungi la seguente definizione nel file hosts.conf di Icinga2.

object Service "dhcp" {  
  host_name = "Pi.hole"  
  check_command = "myudp"  
vars.port = "67"  
}

Aggiungi controllo porta UDP in Icinga 2

Successivamente, riavvia Icinga 2 per riflettere le modifiche e naviga nel pannello Web di Icinga 2, Panoramica -> Host, fai clic sul tuo host specifico e verifica lo stato del servizio UDP, come mostrato nello screenshot sottostante.

Stato servizio UDP

Questo è tutto! Hai aggiunto con successo un host e i suoi servizi verranno controllati periodicamente dall’applicazione di monitoraggio di rete Icinga 2. Per altre configurazioni personalizzate riguardanti il motore di monitoraggio Icinga 2 e lo script di comando personalizzato, visita la pagina della documentazione al seguente indirizzo: https://www.icinga.com/docs/icinga2/latest/doc/03-monitoring-basics/#check-commands

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.