Checkmk
to checkmk.com
Important

This is a machine translation based on the English version of the article. It might or might not have already been subject to text preparation. If you find errors, please file a GitHub issue that states the paragraph that has to be improved.

1. Introduzione

Logo of the Docker, Inc. company.

In tutto il mondo, Docker è diventato uno dei prodotti software più utilizzati per la virtualizzazione dei container. Per quanto sia necessario un end-to-end monitoring trasparente dei container, è anche complesso a causa dell'architettura dinamica e multistrato di questi container.

Checkmk può monitorare i Docker container direttamente tramite l'agente Linux. Ma Checkmk non monitora solo lo stato generale del daemon o del container, ma anche il container stesso. Un elenco completo degli elementi che possono essere monitorati attualmente è disponibile nel catalogo dei plugin per i controlli.

Oltre alle informazioni sullo stato e sull'inventario che Checkmk può determinare sul nodo (termine Docker per indicare "l'host su cui sono in esecuzione i container"), Checkmk può anche determinare informazioni dettagliate sullo stato dei container. Per questo, ogni container deve essere aggiunto come host separato in Checkmk se si desidera effettuare il monitoraggio. I suoi dati verranno piggybacked dal nodo a questo host.

Nelle edizioni commerciali, gli host dei container possono essere creati o rimossi automaticamente utilizzando la gestione dinamica degli host.

2. Configurazione

2.1. Installazione dell'agente e del plug-in

Per poter monitorare un nodo Docker con Checkmk, devi prima monitorarlo con il normale agente Linux. Questo ti fornirà un monitoraggio di base del sistema host, ma non ci saranno informazioni sul daemon Docker o sul container.

Ti servirà il plug-in dell'agente mk_docker.py, che puoi trovare qui: Setup > Agents > Other operating systems > Plugins

Installa il plug-in nella cartella dei plug-in dell'agente (di solito /usr/lib/check_mk_agent/plugins). Per informazioni dettagliate sull'installazione di un plug-in dell'agente, consulta l'articolo sull'agente Linux.

root@linux# install -m 0755 mk_docker.py /usr/lib/check_mk_agent/plugins
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Nelle edizioni commerciali puoi farlo anche con agent bakery, che include il set di regole appropriato per il monitoraggio di Docker: Docker node and containers

Per funzionare correttamente, è necessario il modulo Python docker. Puoi verificare facilmente la presenza del modulo con python dalla riga di comando:

root@linux# python3
Python 3.12.3 (main, Jun 18 2025, 17:59:45) [GCC 13.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import docker
>>> docker.version
'5.0.3'
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Se necessario, installa il modulo mancante. Il metodo di installazione preferito è l'uso dello strumento di gestione dei pacchetti della tua distribuzione Linux. L'installazione tramite il comando pip3 comporta il rischio di danneggiare i moduli Python forniti dalla distribuzione.

Tip

In alcuni casi devi affidarti a un ambiente virtuale Python (venv) per effettuare l'installazione di una versione sufficientemente recente del modulo Python docker. Se necessario, puoi utilizzare il file di configurazione $MK_CONFDIR/python_path.cfg per specificare il percorso assoluto dell'interprete Python richiesto come variabile PYTHON3.

Se ora esegui l'operazione di scoperta del servizio in Checkmk e attivi le modifiche, dovresti trovare alcuni nuovi servizi che riguardano il nodo Docker stesso:

View of the Docker services currently having been found in Checkmk.

2.2. Regolazione del plug-in

Puoi configurare diversi parametri del plug-in. Ad esempio, puoi risparmiare risorse disattivando sezioni non necessarie o, se necessario, personalizzando l'endpoint dell'API Engine di Docker (l'impostazione predefinita è il socket Unix unix://var/run/docker.sock).

Crea il file di configurazione /etc/check_mk/docker.cfg sull'host Docker. Un modello con spiegazioni dettagliate è disponibile nella directory Checkmk ~/share/check_mk/agents/cfg_examples/docker.cfg.

Nelle edizioni commerciali puoi configurare facilmente tutti i parametri con agent bakery.

2.3. Monitoraggio dei container

Creazione degli host dei container

Naturalmente l’aspetto interessante è il monitoraggio dei Docker container. Questo verrà implementato automaticamente durante l’installazione dei plug-in, tuttavia i servizi non verranno assegnati al nodo Docker, ma Checkmk presuppone un singolo host per ogni Docker container.

Il meccanismo utilizzato in questo caso si chiama piggyback: Il plug-in o l’special agent trasporta i dati di altri host — “piggyback”, per così dire — insieme ai propri dati. Checkmk colloca questi dati nella directory ~/tmp/check_mk/piggyback. Tutto quello che devi fare nel Setup è creare host con i nomi corretti, e i servizi verranno poi assegnati automaticamente a essi.

Nelle edizioni commerciali puoi far creare questi host automaticamente. Usa il tipo di connessione Piggyback data nella gestione dinamica degli host. Se crei gli host manualmente, tieni presente quanto segue:

  • Il nome host deve corrispondere esattamente alla directory creata in ~/tmp/check_mk/piggyback. Per impostazione predefinita, si tratta dell'ID breve di 12 caratteri del contenitore (ad esempio, 2ed23056480f).

  • Se i contenitori non dispongono di indirizzi IP propri (come avviene solitamente), imposta Network address > Famiglia di indirizzi IP# su No IP.

  • Per Monitoring agents assicurati di impostare Checkmk agent / API integrations su No API integrations, no Checkmk agent.

  • Puoi impostare il campo Parents nella sezione Basic settings sul nome host del nodo Docker.

  • È inoltre importante che il nodo Docker e i suoi container siano monitorati dallo stesso sito Checkmk.

Una volta creati gli host dei container e dopo aver eseguito la scoperta del servizio, su questi compaiono nuovi servizi.

Se hai un agente Linux installato nel container, verrà eseguito automaticamente. Tuttavia, poiché molti servizi monitorati dall'agente all'interno dei container mostrano in realtà informazioni provenienti dal nodo (ad esempio, carico della CPU, temperatura e molti altri parametri del sistema operativo), questi sono stati rimossi.

Nomi alternativi per gli host dei container

Per impostazione predefinita — come menzionato sopra — l’ID breve di 12 caratteri del container viene utilizzato come nome per l’host del container. Questo può essere configurato in modo diverso, se lo desideri. Per farlo, nel file di configurazione docker.cfg (vedi Regolazione del plug-in) imposta l’opzione container_id su long per utilizzare l’ID completo del container come nome, oppure su name per utilizzare il nome del container.

Gli utenti delle edizioni commerciali possono configurare questa opzione in agent bakery utilizzando la regola Docker node and containers e l'opzione Host name used for containers.

Rule for selecting the host names of the containers.

A proposito: con il set di regole "Host name translation for piggybacked hosts" puoi definire regole piuttosto flessibili per rinominare i nomi host contenuti nei dati piggyback. Con questo metodo puoi anche risolvere il problema di avere container con lo stesso nome su due nodi Docker diversi, per esempio.

Rule for renaming the host names contained in the piggyback data.

Consulta l'articolo Il meccanismo piggyback per ulteriori opzioni e una descrizione più dettagliata di questa funzione.

Monitoraggio dello stato dello host

Poiché lo stato dello host di un container non può essere realmente verificato utilizzando pacchetti TCP o ICMP, questo deve essere determinato in un altro modo. Il servizio Docker container status facilita questa operazione: in ogni caso checka se il container è in esecuzione e può quindi essere utilizzato come strumento sicuro per rilevare lo stato dello host. Definisci una regola nel set di regole Host check command a questo scopo e imposta l'opzione Use the status of the service…​ sul servizio menzionato. Non dimenticare di impostare le condizioni in modo che siano interessati solo i container. Nel nostro esempio tutti i container si trovano in una cartella con lo stesso nome:

Rule for the command to check the host state of the containers.

Operazione dell'agente direttamente nel container

Per monitorare i dettagli all’interno del container stesso (ad es. processi in esecuzione, database, file di log, ecc.), è necessario che l’agente Checkmk sia installato ed eseguito all’interno del container stesso. Ciò vale in particolare per l’implementazione dei plug-in dell’agente. I tre plug-in mem, cpu e diskstat (Disk I/O) funzionano comunque senza un agente nel container e vengono analizzati dall’agente Checkmk sul nodo stesso.

Soprattutto per le immagini Docker create autonomamente, potresti voler distribuire l'agente stesso nel container. In questo caso i dati non vengono più analizzati — come descritto sopra — dall'agente del nodo Docker. Al suo posto, in ogni container viene eseguito un agente separato. La chiamata a questo agente sarà comunque integrata in una procedura piggyback tramite il nodo Docker.

Tuttavia, l'agente installato nel container funziona solo se nel container sono presenti anche tutti i comandi necessari. Soprattutto con container minimalisti basati su Alpine Linux, è molto probabile che elementi fondamentali come Bash non siano presenti. In una situazione del genere dovresti monitorare il container dal nodo Docker.

L'uso del set di regole Host check command in questo caso sarà necessario solo se il container non è raggiungibile via ping, ma per il resto funzionerà esattamente come descritto sopra.

3. Opzioni di diagnostica

3.1. Diagnosi di un nodo Docker

Se il Setup non va a buon fine, ci sono diverse opzioni per analizzare il problema. Se possibile, verifica che sull'host sia effettuata l'installazione di un agente Checkmk con versione almeno 1.5.0 o successiva.

Se la versione dell'agente sull'host è corretta, check se i dati sono presenti nell'output dell'agente. Puoi effettuare lo scaricamento dell'output come file di testo: in una visualizzazione host nel monitoraggio tramite la voce del menu azione "Download agent output":

Action menu of the host in monitoring with the entry for downloading the agent output.

In alternativa, puoi cercare direttamente nella cache dell'agente. Per chiarezza, l'output nell'esempio seguente è abbreviato all'output per il nodo:

OMD[mysite]:~$ strings tmp/check_mk/cache/mydockerhost | grep "<<<docker"
<<<docker_node_info>>>
<<<docker_node_disk_usage:sep(44)>>>
<<<docker_node_images>>>
<<<docker_node_network:sep(0)>>>
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

Se le sezioni non vengono visualizzate qui, l'installazione di Docker non verrà riconosciuta. Il comando seguente viene utilizzato per il servizio Docker node info. Questo comando deve essere eseguibile esattamente in questa forma sull'host. Se necessario, controlla la tua installazione di Docker:

root@linux# docker info 2>&1
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

3.2. Diagnosi per un host del container

Se l'host del container non riceve dati o, rispettivamente, non vengono rilevati servizi, verifica innanzitutto se sono disponibili dati piggyback per questo host. Il nome dell'host deve essere identico all'ID del container. In alternativa, puoi anche effettuare un'assegnazione manuale utilizzando il set di regole Host name translation for piggybacked hosts. In questo caso, tuttavia, è adatta solo l'opzione Explicit hostname mapping:

Rule for translating host names of hosts with piggyback data.

Per verificare se verranno creati dati piggyback per un ID, puoi checkare la seguente directory:

OMD[mysite]:~$ ls -l tmp/check_mk/piggyback/
76adfc5a7794  f0bced2c8c96  bf9b3b853834
Copia i comandi negli appunti
Comandi copiati con successo negli appunti!
L'accesso in scrittura agli appunti è stato negato!

4. Etichette dell'host

In Checkmk ci sono le cosiddette etichette dell'host. Tra le altre cose, il monitoraggio Docker imposta automaticamente queste etichette:

  • per il nodo Docker l'etichetta cmk/docker_object:node,

  • per ciascuno dei container le etichette cmk/docker_image, cmk/docker_image_name, cmk/docker_image_version e cmk/docker_object.

Puoi utilizzare queste etichette, ad esempio nelle condizioni delle tue regole, per rendere la tua configurazione di monitoraggio dipendente dall'immagine utilizzata in un container.

5. File e directory

Percorso del file Funzione

~/tmp/check_mk/piggyback/

Checkmk salva qui i dati piggyback. Per ogni host piggybacked viene creata una sottocartella con il nome dell'host — questa sottocartella contiene un file di testo con i dati dell'host. Il nome del file è il nome dell'host piggyback che fornisce i dati.

~/tmp/check_mk/cache/

Qui viene salvato temporaneamente l'output più recente dell'agente da tutti gli host. Il contenuto del file di un host è identico a quello del comando cmk -d myserver123.


Last modified: Mon, 15 Dec 2025 20:41:19 GMT via commit 8075c7a52
In questa pagina