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.

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

Checkmk è in grado di monitorare i container Docker direttamente tramite l'agente Checkmk di 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 attualmente monitorati si trova nel Catalogo dei plug-in dell'agente.

Oltre alle informazioni sullo stato e sull'inventario che Checkmk è in grado di determinare sul nodo (nel gergo di Docker "l'host su cui sono in esecuzione i container"), Checkmk può anche determinare informazioni dettagliate sullo stato dell'host dei container. A tal fine, ogni container deve essere aggiunto come host separato in Checkmk se deve essere monitorato. I suoi dati saranno trasferiti dal nodo a questo host.

Nelle edizioni commerciali, gli host dei container possono essere creati o rimossi automaticamente grazie alla configurazione dinamica.

2. UP

2.1. Installazione dell'agente e del plug-in dell'agente

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

Avrai bisogno del plug-in dell'agente mk_docker.py, che puoi trovare qui: Setup > Agents > Other operating systems > Plugins

Installa il plug-in nella cartella 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

Nelle edizioni commerciali puoi farlo anche con l'Agent bakery, che viene fornito con il set di regole adatto per il monitoraggio di Docker: Docker node and containers

Nota: è necessaria la libreria Python docker (non docker-py). È necessaria almeno la versione 2.6.1. Puoi verificarlo facilmente inserendo python alla riga di comando:

root@linux# python3
Python 3.8.10 (default, Nov 26 2021, 20:14:08)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import docker
>>> docker.version
'5.0.3'

Se necessario, puoi installare la libreria con pip3:

root@linux# pip3 install docker

Attenzione: Non devono essere installati i pacchetti docker-py o python-docker-py che rendono disponibile una versione obsoleta e incompatibile della libreria Docker nello stesso namespace! Se è stata installata docker-py (o entrambe le varianti), una sola disinstallazione non è sufficiente perché pip3 non può correggere il namespace. In questo caso, per assicurarti che venga installata la versione corretta, esegui i comandi seguenti:

root@linux# pip3 uninstall docker-py docker
root@linux# pip3 install docker

Se ora esegui la scoperta del servizio in Checkmk e attivi le modifiche, dovresti trovare alcuni nuovi servizi che riguardano proprio il nodo Docker:

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

2.2. Messa a punto del plug-in

Puoi configurare diversi parametri del plug-in. Ad esempio, puoi risparmiare risorse disattivando le sezioni non necessarie o, se necessario, personalizzando l'endpoint di Docker API Engine (quello predefinito è 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 si trova nella directory Checkmk ~/share/check_mk/agents/cfg_examples/docker.cfg.

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

2.3. Monitoraggio dei container

Creare gli host dei container

Naturalmente l'aspetto interessante è il monitoraggio dei Docker container, che verrà implementato automaticamente con l'installazione dei plug-in, tuttavia i servizi non saranno assegnati al nodo Docker, piuttosto Checkmk ipotizza un singolo host per ogni container Docker.

Il meccanismo utilizzato in questo caso è chiamato piggyback: il plug-in o lo special agent trasporta i dati di altri host - per così dire "piggyback" - insieme ai propri dati. Checkmk colloca questi dati nella directory tmp/check_mk/piggyback. Tutto ciò che devi fare nel Setup è creare host con i nomi corretti e i servizi saranno assegnati automaticamente a questi.

Nelle edizioni commerciali puoi fare in modo che questi host vengano creati automaticamente. Utilizza il connettore Piggyback nella configurazione dinamica. Tieni presente quanto segue, se crei gli host manualmente:

  • Il nome host deve corrispondere esattamente alla directory creata in tmp/check_mk/piggyback. Per impostazione predefinita, questo è l'ID breve di 12 caratteri del container (ad esempio, 2ed23056480f).

  • Se i container non hanno un proprio indirizzo IP (cosa che di solito accade), 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.

  • È anche importante che il nodo Docker e i suoi container siano monitorati dalla stessa istanza Checkmk.

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

Tuttavia, poiché molti servizi monitorati dall'agente di monitoraggio all'interno dei container mostrano in realtà informazioni provenienti dal nodo (ad esempio il carico della CPU, la temperatura e molti altri parametri del sistema operativo), questi sono stati rimossi.

Nomi alternativi per i container host

Per impostazione predefinita, come già detto, l'ID breve di 12 caratteri del container viene utilizzato come nome host del container. Questo può essere configurato in modo diverso. Per farlo, nel file di configurazione docker.cfg (vedi Messa a punto 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 impostarlo nell'Agent bakery utilizzando la regola Docker node and containers, opzione Host name used for containers.

Rule for selecting the host names of the containers.

Per inciso: Con il set di regole Access to agents > General settings > Hostname translation for piggybacked hosts puoi definire regole abbastanza 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, ad esempio.

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

Per ulteriori opzioni e una descrizione più dettagliata di questa funzione, consulta l'articolo Il meccanismo del piggyback.

Stato di monitoraggio dell'host

Poiché non è possibile verificare lo stato dell'host di un container utilizzando i pacchetti TCP o ICMP, è necessario determinarlo in un altro modo. Il servizio Docker container status facilita questo compito: in ogni caso controlla se il container è in esecuzione e può quindi essere utilizzato come strumento sicuro per rilevare lo stato dell'host. Definisci un set di regole 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.

Operare l'agente direttamente nel container

Per monitorare i dettagli nel container stesso (es. processi in esecuzione, database, file di log, ecc.), è necessario che l'agente Checkmk sia installato ed eseguito nel container stesso. Questo vale soprattutto per il roll-out dei plug-in dell'agente. I tre plug-in mem, cpu e diskstat (Disk I/O) funzionano però senza un agente nel container e vengono analizzati dall'agente Checkmk sul nodo stesso.

Soprattutto per le immagini Docker auto-create, potresti voler installare l'agente stesso nel container. In questo caso i dati non vengono più analizzati, come descritto sopra, dall'agente del nodo Docker. Al posto di questo, un agente separato viene eseguito in ogni container. La chiamata di questo agente verrà comunque eseguita in una procedura di piggyback tramite il nodo Docker.

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

In questo caso, l'uso del set di regole Host Check Command sarà necessario solo se il container non è pingabile, ma altrimenti funzionerà esattamente come descritto sopra.

3. Opzioni diagnostiche

3.1. Diagnosi di un nodo Docker

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

Se la versione dell'agente sull'host è adeguata, controlla se i dati sono presenti nell'output dell'agente. Puoi scaricare l'output come file di testo: in una visualizzazione dell'host nell'agente di monitoraggio tramite la voce di 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, nell'esempio seguente l'output è abbreviato in output per il nodo:

OMD[mysite]:~$ strings tmp/check_mk/cache/mydockerhost | grep "&lt&lt&ltdocker"
<<<docker_node_info>>>
<<<docker_node_disk_usage:sep(44)>>>
<<<docker_node_images>>>
<<<docker_node_network:sep(0)>>>

Se le sezioni non sono mostrate 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 questo modulo sull'host. Se necessario, controlla la tua installazione di Docker:

root@linux# docker info 2>&1

3.2. Diagnosi per l'host di un container

Se l'host del container non riceve alcun dato o, rispettivamente, non viene rilevato alcun servizio, verifica innanzitutto se i dati piggyback sono disponibili 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 Hostname translation for piggybacked hosts. In questo caso, tuttavia, solo l'opzione Explicit hostname mapping è adatta:

Rule for translating host names of hosts with piggyback data.

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

OMD[mysite]:~$ ls -l tmp/check_mk/piggyback/
76adfc5a7794  f0bced2c8c96  bf9b3b853834

4. Etichette dell'host

In Checkmk esistono le cosiddette etichette dell'host. Tra l'altro, il monitoraggio di Docker imposta automaticamente queste etichette:

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

  • per ogni 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 etichette per le regole, per far dipendere la configurazione del monitoraggio dall'immagine utilizzata in un container.

5. File e directory

Percorso dei file Funzione

tmp/check_mk/piggyback/

Checkmk archivia qui i dati piggyback. Per ogni host viene generata una sottocartella con il nome dell'host. Questa contiene un file di testo con i dati dell'host. Il nome del file è quello dell'host che ha fornito i dati.

tmp/check_mk/cache/

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

In questa pagina