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

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.
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:
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.
In alcuni casi devi affidarti a un ambiente virtuale Python ( |
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:

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.

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.

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:

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":

In alternativa, puoi cercare direttamente nella cache dell'agente. Per chiarezza, l'output nell'esempio seguente è abbreviato all'output per il nodo:
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:
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:

Per verificare se verranno creati dati piggyback per un ID, puoi checkare la seguente directory:
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_versionecmk/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 |
|---|---|
|
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. |
|
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 |
