In un mondo sempre più distribuito, avere un modo visivo per vedere come sono connesse le tue reti e se ci sono host con problemi è un aiuto inestimabile per gli amministratori. Rende più semplice capire come un'infrastruttura è interconnessa e di cosa è fatta.
La visualizzazione della rete è un backend grafico integrato in Checkmk per mostrare le connessioni tra gli oggetti. Questi oggetti possono essere host e servizi di host della tua istanza Checkmk o qualsiasi oggetto che non fa parte dell'istanza Checkmk, ad esempio indirizzi IP, reti IP, cloud o qualunque cosa tu voglia. Teoricamente parlando, gli oggetti possono essere qualsiasi cosa, come una collezione di mattoncini giocattolo o la rete ferroviaria locale, ma ci concentreremo esclusivamente sulle infrastrutture di rete IT.
Lo scopo di visualizzare queste connessioni è darti una migliore comprensione di come sono collegati i componenti della tua infrastruttura IT, il che può aiutarti a trovare configurazioni errate tra i dispositivi (ad esempio connessioni con diverse velocità di interfaccia) o collegamenti interrotti.
La topologia di rete in Checkmk raccoglie le sue informazioni tramite due protocolli comuni per questo compito: CDP e LLDP. Il primo, Cisco Discovery Protocol, è presente principalmente sui dispositivi Cisco ma è stato implementato anche da altri fornitori. È probabile che tu lo abbia disponibile nella tua infrastruttura. Il secondo protocollo, Link Layer Discovery Protocol, è neutrale rispetto al fornitore. Entrambi operano al livello OSI layer 2, quindi stiamo parlando di informazioni al di sotto degli indirizzi IP come tabelle ARP e indirizzi MAC.
Inoltre, è supportata anche la topologia a livello IP. Si tratta del livello OSI layer 3 e opera sugli indirizzi IP. Questo coprirà i tuoi dispositivi di rete Windows, Linux e SNMP, includendoli nella topologia.
Indipendentemente dalla scelta di CDP o LLDP o dall'utilizzo di IP, ti consigliamo di scegliere ciò che meglio si adatta alle tue esigenze o al tuo ambiente.
Vediamo come appare la visualizzazione della rete in Checkmk con un piccolo esempio:

La topologia qui sopra è stata creata dalle informazioni LLDP degli switch monitorati, presenti nell'inventario HW/SW di Checkmk. Probabilmente è più chiaro vedere come sono collegati i nodi root e gli switch, e quali servizi stanno eseguendo, nella seguente gif animata:

Possiamo vedere qui i nodi root sulla sinistra, gli switch connessi sulla destra e le varie interfacce che li collegano nel mezzo. Le informazioni sul nodo/servizio vengono fornite in un tooltip al passaggio del mouse sopra le icone.
Ulteriori informazioni possono essere ricavate dalle linee che collegano i dispositivi e i servizi:

Lo spessore può essere utilizzato per mostrare la larghezza di banda, il colore per mostrare problemi (come il rosso per una connessione lenta).
I filtri sono disponibili sul lato destro dello schermo, come di consueto nell'interfaccia di Checkmk:

Nella GIF animata qui sopra vengono mostrate le opzioni di visualizzazione per mostrare o nascondere le etichette e intere interfacce. Questi filtri sono in tempo reale, non è necessario applicarli.
Questo è l'aspetto che ha e ciò che può fare. Vediamo come procedere con la configurazione.
TL;DR:
Checkmk introduce la visualizzazione del livello di rete, offrendo agli amministratori una visione chiara e interattiva di come host e servizi sono connessi in tutta la loro infrastruttura.
- La visualizzazione mostra dispositivi e connessioni utilizzando i dati della topologia a livello CDP, LLDP o IP.
- La configurazione consiste semplicemente nell'installazione del plug-in NVDCT, nel rilevamento delle etichette degli host, nell'esecuzione degli inventari hardware/software, nella configurazione dello strumento e nella generazione dei dati della topologia.
Visualizzazione della Topologia di Rete in Checkmk
La configurazione della visualizzazione della topologia di rete è ormai semplicissima. I plug-in necessari per l'inventario della topologia di rete mainline sono integrati nativamente in Checkmk a partire dalla versione 2.5.0. Ciò significa che hai immediatamente accesso a:
- Plug-in per la topologia Layer 2: plug-in di inventario CDP e LLDP.
- Plug-in per la topologia Layer 3: plug-in di inventario IP per SNMP, Windows e Linux.
- Plug-in aggiuntivi: plug-in di inventario per i nomi delle interfacce.
In precedenza, popolare l'inventario HW/SW di Checkmk richiedeva agli amministratori di scaricare e installare manualmente più plug-in esterni (CDP, LLDP, IPv4 e INV_IFNAME). Questo non è più necessario dalla versione 2.5 in poi.
Nota sulla compatibilità con le versioni precedenti
Tieni presente che se provieni da una precedente configurazione di Checkmk e NVDCT e usi regole o script personalizzati che fanno riferimento alle vecchie etichette host nvdct/, devi aggiornarle alle nuove etichette cmk/ per mantenere la compatibilità. Inoltre, le tabelle di inventario sono state rinominate in en-us e le intestazioni delle tabelle ora seguono la formattazione sentence case, anche se ciò non influirà sui flussi di lavoro o sulle integrazioni.
Come impostare la Visualizzazione di Rete in Checkmk
Per questa configurazione, Checkmk include già tutti i pacchetti necessari in modo nativo. L'unica eccezione è il plug-in Network Visualization Data Creation Tool (NVDCT), che è ancora necessario installare manualmente. Puoi installarlo come di consueto tramite la GUI di Checkmk andando su Setup > Extension Packages > Upload package. Gli utenti di Checkmk Community dovranno installarlo tramite CLI con:
mkp add PAKAGE_NAME.mkp
mkp enable PAKAGE_NAME VERSION
(Ri)scoprire le etichette degli host
NVDCT si basa su determinate etichette host scoperte tramite i plug-in integrati.
Importante: Checkmk 2.5+ utilizza il prefisso cmk/ per tutte le etichette host relative alla topologia. Tutti i riferimenti che in precedenza utilizzavano il prefisso nvdct/ sono stati sostituiti dai loro equivalenti cmk/.
Queste etichette possono accelerare la creazione del file di dati e sono obbligatorie per le topologie IP di Livello 3, poiché le informazioni sui vicini non sono disponibili nativamente come nel caso di CDP/LLDP. Assicurati di aggiornare le etichette degli host, ad esempio utilizzando il rilevamento collettivo (bulk discovery):

Quando la scoperta delle etichette degli host è completata, puoi esaminare le etichette scoperte:

Configurazione ed esecuzione dell'inventario HW/SW
L'inventario HW/SW deve essere abilitato per tutti i dispositivi di rete che desideri includere nella topologia tramite la regola "Do hardware/software inventory". L'intervallo di controllo consigliato è di 24 ore. L'inventario HW/SW deve essere eseguito prima di NVDCT per consentire al plug-in di raccogliere i dati riportati e costruire la topologia di rete da essi.
Al termine dell'esecuzione dell'inventario HW/SW, puoi verificarne i risultati.

Se il tuo dispositivo ha dei vicini CDP, dovresti vedere anche una tabella per CDP simile alla tabella per LLDP.
Modificare le impostazioni di NVDCT
Una volta installato il pacchetto NVDCT, impostate le regole, eseguito l'inventario HW/SW e scoperte le etichette cmk/, è il momento di iniziare con la creazione della topologia.
Innanzitutto, guarda il file di configurazione in ~/local/bin/nvdct/conf/nvdct.toml. Creane una copia personale prima di modificarlo, in modo che gli aggiornamenti non sovrascrivano le tue impostazioni. Per il livello CDP/LLDP, dovresti aggiungere i tuoi dispositivi seed (da cui NVDCT inizia a creare la topologia) nella sezione SEED_DEVICES del file TOML, come mostrato di seguito:
# list of seed devices
SEED_DEVICES = [
"DEVICE01",
"DEVICE02",
"DEVICE03",
]
Nella sezione [SETTINGS], abilita i livelli che desideri creare (ad esempio, LLDP, CDP, L3v4):
# settings equivalent to CLI options
[SETTINGS]
# layers = ["LLDP", "CDP", "STATIC", "CUSTOM", "L3v4"]
layers = ["LLDP", "L3v4"]
Eseguire NVDCT
Una volta soddisfatti del contenuto del file di configurazione, crea la tua topologia di rete eseguendo:
~$ ~/local/bin/nvdct/conf/nvdct.py -c ~/local/bin/nvdct/conf/my_nvdct.toml
Che produrrà un output simile a questo:
Network Visualisation Data Creation Tool (NVDCT)
by thl-cmk[at]outlook[dot]com, version 0.8.7-20240430
see https://thl-cmk.hopto.org/gitlab/checkmk/vendor-independent/nvdct
Start time....: 2024-04-30T14:17:02.04
Devices added.: 16, source lldp
Devices added.: 59, source L3v4
Time taken....: 3.225333135/s
End time......: 2024-04-30T14:17:05.04
~$
I dati della topologia creata si troveranno in ~/var/check_mk/topology/data/
Sarà presente anche un collegamento simbolico alla topologia predefinita:
~$ ls -ls ~/var/check_mk/topology/data
4 drwx------ 2 build build 4096 Apr 30 14:17 2024-04-30T14:17:05.04/
0 lrwxrwxrwx 1 build build 57 Apr 30 14:25 default -> /omd/sites/build/var/topology_data/2024-04-30T14:17:05.04/
La topologia generata sarà ora accessibile nel menu host di Checkmk, selezionando l'opzione "Network layer topology", come mostrato nello screenshot qui sotto. Inizia con uno dei tuoi dispositivi seed per esplorare la topologia di rete.

Opzioni di visualizzazione
Indipendentemente da come viene creata la topologia di rete, manualmente o con il pacchetto NVDCT, ci sono molte possibilità di personalizzazione in Checkmk. L'informazione predefinita mostrata è la relazione tra gli host e le interfacce. È inoltre visibile lo stato attuale di host e servizi, con un link alla visualizzazione appropriata. Se lo desideri, puoi nascondere i servizi per ridurre il disordine visivo, oppure mostrare solo i servizi con problemi, grazie all'interruttore in alto a sinistra della visualizzazione.
È possibile confrontare visivamente due set di dati provenienti da momenti diversi nel tempo. Questa è la funzione "compare history" nelle opzioni, come si vede qui sotto:

Per prima cosa si seleziona un orario di riferimento, solitamente l'ora corrente, e poi si seleziona l'orario di confronto. La topologia determina quindi eventuali differenze nelle connessioni tra i due timestamp, ovvero connessioni mancanti nel riferimento e connessioni che esistono solo nel riferimento.
Sono disponibili stili di visualizzazione. Attualmente è possibile passare tra due layout pronti per la visualizzazione dei dati: full e flat.
Il layout full offre una visuale migliore delle connessioni, poiché queste sono visualizzate in una struttura ad albero. Il layout flat è più compatto, più facile da leggere a colpo d'occhio ma mantiene i dati completi delle connessioni quando si passa il mouse sopra i nodi e le connessioni.

In alternativa, è possibile utilizzare la funzione 'layout configuration' per generare un layout completamente libero, che viene caricato automaticamente quando questa visualizzazione viene richiamata con le stesse identiche impostazioni di filtro.

Nella parte superiore della visualizzazione sono presenti alcune funzioni interessanti. È possibile filtrare la topologia di rete e configurarne il layout. I filtri sono personalizzabili, puoi aggiungere i tuoi. Per impostazione predefinita sono presenti quelli più comuni, come:
- Topology max nodes
- Topology mesh depth
- Hostname (regex)
- Hostalias (regex)
- Several host groups
- Host Contact Group
- Host states
- Host labels
- Host tags
- Site
Una parola in più è necessaria per i primi due filtri. "Topology max nodes" specifica quanti nodi devono essere mostrati e se il limite selezionato viene raggiunto, viene visualizzato un avviso nel titolo.
"Topology max depth" è utile per limitare il percorso per costruire la topologia a un numero di salti dal nodo o dai nodi di partenza.
È anche possibile confrontare le differenze tra due timestamp, per verificare visivamente cosa è cambiato tra due momenti. Con NVDCT puoi stilizzare la topologia con diverse icone, un colore personalizzato per le linee, connessioni più spesse e altro ancora.
Esiste anche un filtro integrato per personalizzare i parametri di visualizzazione predefiniti. Si chiama topology_filters. Clonalo e regola i suoi parametri secondo le tue preferenze.

Formato dei dati
La topologia utilizza un file di dati per ogni tipo di dato per un determinato timestamp. Possono diventare numerosi ma non molto grandi, poiché sono tutti semplici file TOML. I componenti principali dei dati sono due:
- Gli oggetti, che rappresentano i nodi nella visualizzazione
- Le connessioni, che rappresentano le relazioni tra i nodi
Un esempio di file di dati è mostrato di seguito:
{
"version": 1, # data format version
"name": "CDP data", # some name to display somewhere
"objects": { # A dictionary containing the object ID key and the object as value
# A generic node with the ID NodeA and the display name 'NodeA'
# It is a simple node with no relationship to the monitoring core
'NodeA': {'metadata': {}, 'name': 'NodeA'},
# A node with the ID HostA_ID, which is linked to a host 'HostA' in the core.
# In the visualization the node is named 'HostA Name'
'HostA_ID': {'link': {'core': 'HostA'}, 'metadata': {}, 'name': 'HostA Name'},
# A node with the ID HostA_ServiceX, which is linked to a service
# 'HostA'/'ServiceX' in the core. In the visualization the node is named 'Service X'
'HostA_ServiceX': {'link': {'core': ['HostA', 'ServiceX']}, 'metadata': {}, 'name': 'Service X'},
# The metadata field is used to add additional information.
# A generic node with the ID NodeWithImages and the display name 'ImageNode'
# This generates a node which is shown in the screenshot above
'NodeWithImages': {'metadata': {
'images': {"icon": "icon_checkmark", "emblem": "emblem_warning"}
},
'name': 'ImageNode'},
},
# The objects are always identified by their ID
# A connection always connects two objects and has tree values [SOURCE_ID, TARGET_ID, metadata]
"connections": [
# A simple connection between NodeA and HostA_ID
[["NodeA"], ["HostA_ID"], {}],
# Another simple connection between NodeA and HostA_ServiceX
[["NodeA"], ["HostA_ServiceX"], {}],
# A connection between HostA_ServiceX and NodeWithImages.
# The line_config field specifies the custom styling
[["HostA_ServiceX"], ["NodeWithImages"], {"line_config": {"thickness": 5, "color": "green"}}],
]
}
Importanti da notare sono gli indici "images" e "line_config". L'indice "images" ha due chiavi:
- “icon”: un'icona da visualizzare in alto a sinistra del nodo, che sostituisce le icone preconfigurate nel core
- “emblem”: un'immagine per sostituire il punto interrogativo blu sui nodi che non sono collegati al core
Anche l'indice "line_config" ha due chiavi:
- “thickness”: lo spessore desiderato della connessione
- “color”: il colore della connessione. Sono accettati sia i nomi dei colori che i codici colore HEX
Conclusione
Al di fuori della personalizzazione e di esigenze specifiche, la topologia di rete in Checkmk 2.5 è il più snella possibile e non è necessario toccare alcun file di configurazione se ci si accontenta delle impostazioni predefinite della visualizzazione.
Per gli utenti che migrano da configurazioni precedenti, le configurazioni esistenti continueranno generalmente a funzionare senza interazione manuale. Ci sono solo cambiamenti minimi se si utilizzano regole o script personalizzati per portarli dalle versioni precedenti. Per chiunque inizi da zero, Checkmk 2.5 porta con sé la visualizzazione della topologia di rete in un pacchetto facile da configurare.