In un mondo sempre più distribuito, avere un modo visivo per vedere come sono collegate le 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. Ecco cos'è una topologia di rete.
Durante la Checkmk Conference 9 dello scorso anno abbiamo annunciato che una visualizzazione della rete sarebbe stata inclusa in Checkmk. L'abbiamo fornita con la versione 2.3. In questo articolo ti mostreremo come funziona questa funzione in Checkmk e come puoi attivarla nei tuoi siti Checkmk.
La visualizzazione della rete è un nuovo backend grafico integrato in Checkmk 2.3 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 faccia parte dell'istanza Checkmk, ad esempio indirizzi IP, reti IP, cloud o qualsiasi altra cosa tu voglia. In teoria, 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 della visualizzazione delle connessioni tra gli oggetti è quello di far capire meglio come sono collegati i componenti della tua infrastruttura IT, con una rappresentazione semplice ma efficace. Può anche aiutare a trovare configurazioni errate tra i dispositivi (ad esempio, connessioni con velocità di interfaccia diverse) o collegamenti interrotti.
La topologia di rete in Checkmk è disponibile attraverso una serie di pacchetti comunitari che consentono di raccogliere le informazioni attraverso due protocolli comuni per questo compito: CDP e LLDP. Il primo, Cisco Discovery Protocol, è presente soprattutto sui dispositivi Cisco, ma è stato implementato anche da altri produttori. È probabile che sia presente nella tua infrastruttura. Il secondo protocollo, Link Layer Discovery Protocol, è neutrale rispetto ai produttori. Entrambi operano al livello OSI 2, quindi si tratta di informazioni al di sotto degli indirizzi IP, come le tabelle ARP e gli indirizzi MAC.
Inoltre, è supportata anche la topologia a livello IP. Si tratta del livello OSI 3 e opera sugli indirizzi IP. Indipendentemente dalla scelta di CDP o LLDP o di IP, si consiglia di scegliere quello che meglio si adatta alle proprie esigenze o al proprio ambiente.
Vediamo come appare la visualizzazione della rete in Checkmk con un piccolo esempio:

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

Qui possiamo vedere i nodi radice a sinistra, gli switch collegati a destra e le varie interfacce che li collegano tra loro. Le informazioni sul nodo/servizio sono riportate in un tooltip a sfioramento sulle icone.
Ulteriori informazioni possono essere ricavate dalle linee che collegano i dispositivi e i servizi:

Lo spessore può essere usato per mostrare la larghezza di banda, il colore per mostrare i 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 sono dimostrate le opzioni di visualizzazione per mostrare o nascondere etichette e intere interfacce. Questi filtri sono in tempo reale, non è necessario applicarli.
Ecco come si presenta e cosa può fare. Vediamo come configurarlo.
Come impostare la visualizzazione della rete in Checkmk
Poiché la creazione dei dati necessari per il backend di visualizzazione non fa parte di Checkmk, in questo esempio utilizzeremo il plug-in NVDCT creato da thl-cmk e fornito sotto licenza GPL all'indirizzo thl-cmk.hopto.org. In questo articolo ci concentreremo su una topologia di rete Layer 2/Layer 3. Se vuoi creare il tuo file di dati di visualizzazione, consulta la sezione sul formato dei dati.
La configurazione di NVDCT consiste in questi semplici passaggi:
- Installare i pacchetti necessari
- (Ri)scoprire le etichette dell'host
- Configurazione ed esecuzione dell'inventario HW/SW
- Modificare le impostazioni di NVDCT
- Eseguire lo strumento NVDCT
Installare i pacchetti necessari
Per popolare l'inventario HW/SW di Checkmk con i dati necessari, installare uno o più dei seguenti plug-in di inventario:
- CDP cache HW/SW per la topologia Cisco Discovery Protocol.
- LLDP cache Plug-in di inventario HW/SW per la topologia del Link Layer Discovery Protocol.
- Indirizzo IPv4 Plug-in di inventario HW/SW per la topologia del livello di indirizzo IPv4.
A seconda dei protocolli supportati dai dispositivi, è sufficiente installare uno o più dei plug-in di cui sopra. Ad esempio, se nessuno dei dispositivi supporta CDP, è possibile ignorare il plug-in CDP.
Opzionale, ma fortemente consigliato, è il plug-in che consente la corrispondenza tra nome e servizio, aiutando a mappare i dati CDP/LLDP con i nomi dei servizi Checkmk:
L'ultimo pacchetto necessario è Network Visualization Data Creation Tool (NVDCT). È il programma che crea il file di dati per il backend grafico di visualizzazione della rete.

Installarli come di consueto attraverso l'interfaccia grafica di Checkmk tramite Setup > Extension Packages > Upload package
. Gli utenti di Checkmk Raw dovranno installarli manualmente uno per uno con:
mkp add PAKAGE_NAME.mkp
mkp enable PAKAGE_NAME VERSION
(Ri)scoprire le etichette degli host
Lo strumento NVDCT si basa su alcune etichette di host rilevate tramite i plug-in sopra citati. Queste etichette sono:
-
nvdct/routing_capable:yes
-
nvdct/has_cdp_neighbours:yes
-
nvdct/has_lldp_neighbours:yes
Le topologie di livello 2 funzionano anche senza etichette host utilizzando le informazioni sui vicini del protocollo CDP/LLDP. Come per il livello IP, tali informazioni sui vicini non sono disponibili e quindi le etichette host sono obbligatorie.
L'altro caso di utilizzo delle etichette host da parte di NVDCT è l'opzione della riga di comando --pre-fetch
, che può velocizzare la creazione del file di dati.
Assicurarsi quindi di aggiornare le etichette host, ad esempio utilizzando il bulk discovery:

Al termine della ricerca delle etichette host, è possibile esaminare le etichette host scoperte:

Configurare ed eseguire l'inventario HW/SW
L'inventario HW/SW deve essere abilitato per tutti i dispositivi di rete che si desidera includere nella topologia. Può essere abilitato tramite la regola "Esegui inventario hardware/software". L'intervallo di controllo consigliato per l'intervallo è di 24 ore e può essere impostato nella regola: "Intervallo di controllo normale per i controlli di servizio".
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 a partire da questi.
Dopo che l'inventario HW/SW è stato eseguito correttamente, è possibile verificare i risultati.

Se il dispositivo ha dei vicini CDP, si dovrebbe vedere anche una tabella per CDP come quella per LLDP.
Modificare le impostazioni di NVDCT
Una volta che tutti i pacchetti sono stati installati, tutte le regole sono state impostate, l'inventario HW/SW è stato eseguito e le etichette sono state scoperte, è il momento di iniziare con la creazione della topologia vera e propria.
Per prima cosa dare un'occhiata al file di configurazione all'indirizzo ~/local/bin/nvdct/conf/nvdct.toml
.
Questo file viene usato per mettere a punto alcuni aspetti della visualizzazione della topologia. È possibile modificarlo, ma solo dopo averne creato una copia personale, lasciando l'originale così com'è perché verrà sovrascritto a ogni aggiornamento di NVDCT MKP. Per il livello CDP/LLDP è necessario aggiungere almeno i dispositivi seed, da cui NVDCT inizierà a creare la topologia. Essi si trovano nella sezione SEED_DEVICES del file TOML, come mostrato di seguito:
# list of (additional to -s/--seed-devices) seed devices
SEED_DEVICES = [
"DEVICE01",
"DEVICE02",
"DEVICE03",
]
Tenere presente che le opzioni del client -s/--seed-devices
sono state rimosse a partire dalla versione 0.9.2-2024-11-17 di NVDCT e quindi i dispositivi seed devono essere impostati solo nel file TOML, come mostrato sopra.
Nella sezione [IMPOSTAZIONI] abilitare i livelli che si desidera creare. Per impostazione predefinita, NVDCT creerà solo il livello CDP:
# settings equivalent to CLI options
[SETTINGS]
# layers = ["LLDP", "CDP", "STATIC", "CUSTOM", "L3v4"]
layers = ["LLDP", "L3v4"]
Eseguire NVDCT
Una volta soddisfatto del contenuto del file di configurazione, è il momento di creare la topologia di rete. Questo si fa con:
~$ ~/local/bin/nvdct/conf/nvdct.py -c ~/local/bin/nvdct/conf/my_nvdct.toml
Che produrrà un risultato simile a:
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 trovano sotto ~/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 "Topologia del livello di rete", come mostrato nella schermata seguente. Iniziare con uno dei dispositivi di partenza per esplorare la topologia di rete.

Opzioni di visualizzazione
Indipendentemente dal modo in cui si crea la topologia di rete, a mano o con il pacchetto NVDCT, Checkmk offre numerose possibilità di personalizzazione. Le informazioni mostrate di default sono le relazioni tra gli host e le interfacce. È inoltre visibile lo stato attuale degli host e dei servizi, con un collegamento alla vista appropriata. Se lo si desidera, i servizi possono essere nascosti per ridurre il disordine visivo, oppure possono essere mostrati solo i servizi con problemi, grazie all'interruttore in alto a sinistra della visualizzazione.
È possibile confrontare visivamente due serie di dati in momenti diversi. Si tratta del "confronta cronologia" nelle opzioni, come si vede qui sotto:

Per prima cosa si seleziona un orario di riferimento, di solito l'ora corrente, e poi si seleziona l'orario di confronto. La topologia determina quindi le differenze nelle connessioni tra i due orari, in particolare le connessioni che mancano nel riferimento e quelle che esistono solo nel riferimento.
Sono disponibili stili di visualizzazione. Attualmente è possibile scegliere tra due layout già pronti per la visualizzazione dei dati: pieno e piatto.
Il layout completo offre una migliore visione delle connessioni, che sono visualizzate in una struttura ad albero. Il layout piatto è più compatto, più facile da leggere a colpo d'occhio, ma mantiene i dati completi delle connessioni quando si passa il mouse sui nodi e sulle connessioni.

In alternativa, è possibile utilizzare la funzione "configurazione del layout" per generare un layout completamente libero, che viene caricato automaticamente quando si richiama questa vista con le stesse identiche impostazioni di filtro.

Oltre alla visualizzazione, ci sono alcune caratteristiche interessanti. È possibile filtrare la topologia di rete e configurarne il layout. I filtri sono personalizzabili e si possono aggiungere i propri. Per impostazione predefinita sono presenti i più comuni, come ad esempio:
- Topology max nodes
- Topology mesh depth
- Hostname (regex)
- Hostalias (regex)
- Several host groups
- Host Contact Group
- Host states
- Host labels
- Host tags
- Site
Per i primi due filtri è necessaria una parola in più. Topology max nodes specifica quanti nodi devono essere mostrati e se il limite selezionato viene raggiunto, viene visualizzato un avviso nel titolo.
La Topology mesh depth è utile per limitare il viaggio per costruire la topologia a un certo numero di hop dal nodo o dai nodi di partenza.
È anche possibile confrontare le differenze tra due timestamp, per verificare visivamente cosa è cambiato tra due tempi. Con NVDCT è possibile personalizzare la topologia con icone diverse, 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 in base alle tue preferenze.

Formato dei dati
La topologia utilizza un file di dati per ogni tipo di dati per un determinato timestamp. Può diventare molto numerosa, ma non molto grande, poiché si tratta di semplici file TOML. I dati sono costituiti da due componenti principali:
- Gli oggetti, che rappresentano i nodi della 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"}}],
]
}
È importante notare 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 nucleo.
- "emblem": un'immagine che sostituisce il punto interrogativo blu sui nodi non collegati al nucleo.
Anche l'indice "line_config" ha due chiavi:
- "thickness": lo spessore desiderato del collegamento.
- "color": il colore del collegamento. Sono accettati sia i nomi dei colori che i codici colore HEX.
Sviluppi futuri
Questo è solo l'inizio, molto lavoro verrà fatto per estendere e perfezionare la topologia di rete. L'UX sarà notevolmente ritoccata, come prima cosa, quindi non affezionarti all'UI attuale, che verrà cambiata.
Dietro il frontend, stiamo lavorando per includere gli host specificati nel file di dati ma non presenti nel nucleo di monitoraggio. Anche il traffico tra tutti gli host sarà visibile, ma l'implementazione esatta deve essere decisa. Una fonte affidabile di dati sul traffico per la costruzione della topologia di rete non è ancora stata stabilita, e molti dispositivi completamente diversi hanno bisogno di un modo unico per mostrare il traffico.
La visualizzazione della topologia di rete supporta attualmente solo i protocolli CDP e LLDP. Vogliamo andare oltre e stiamo lavorando per aggiungere il supporto ai dati netstat. Questo dovrebbe ampliare il gruppo di dispositivi supportati, grazie all'universalità di questo piccolo strumento nei sistemi Unix e derivati. Inoltre, migliorerebbe la qualità dei dati, che abbiamo trovato elevata in CDP ma spesso da sanificare in LLDP.
Ma questo avverrà in futuro. Per ora, siamo lieti di fornire agli utenti di Checkmk un nuovo strumento che migliora le possibilità di visualizzazione nei tuoi ambienti di monitoraggio.