![]() |
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. Introducción

En todo el mundo, Docker se ha convertido en uno de los productos de software más utilizados para la virtualización de contenedores. Por muy necesaria que sea la monitorización integral y transparente de los contenedores, también es compleja debido a la arquitectura dinámica y multicapa de éstos.
Checkmk puede monitorizar contenedores Docker directamente a través del agente de Linux. Pero Checkmk no sólo monitoriza el estado general del daemon o del contenedor, sino también el del propio contenedor. En el Catálogo de plugins de check se puede encontrar una lista completa de los elementos que se pueden monitorizar actualmente.
Además de la información sobre el estado y el inventario que Checkmk puede determinar sobre el nodo (la jerga de Docker para "el host en el que se ejecutan los contenedores"), Checkmk también puede determinar información detallada sobre el estado de los contenedores. Para ello, cada contenedor debe añadirse como host independiente en Checkmk si se va a monitorizar. Sus datos se transferirán del nodo a este host.
En las ediciones comerciales, los hosts de contenedor pueden crearse o eliminarse automáticamente mediante la configuración dinámica.
2. Puesta en marcha
2.1. Instalación del agente y del Plugin
Para poder monitorizar un nodo Docker con Checkmk, primero hay que monitorizarlo con el agente Linux normal. Esto te dará una monitorización básica del sistema host, pero no habrá información sobre el daemon Docker ni sobre el contenedor.
Necesitarás el Plugin de agente mk_docker.py
, que puedes encontrar aquí: Setup > Agents > Other operating systems > Plugins
Instala el Plugin en la carpeta de plugins de agente (normalmente /usr/lib/check_mk_agent/plugins
). Para obtener información detallada sobre la instalación de un plugin de agente, consulta el artículo sobre el agente de Linux.
root@linux# install -m 0755 mk_docker.py /usr/lib/check_mk_agent/plugins
En las ediciones comerciales también puedes hacerlo con el Agent bakery, que viene con el conjunto de reglas adecuado para la monitorización de Docker: Docker node and containers
Ten en cuenta que se necesita la biblioteca Python docker
(no docker-py
). Se necesita al menos la versión 2.6.1. Puedes comprobarlo fácilmente introduciendo python
en la línea de comandos:
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'
Si es necesario, puedes instalar la biblioteca con pip3
:
root@linux# pip3 install docker
Atención: No deben instalarse los paquetes docker-py
o python-docker-py
respectivamente, ya que ponen a disposición una versión anticuada e incompatible de la biblioteca Docker bajo el mismo namespace. Si se ha instalado docker-py
(o ambas variantes), no basta con desinstalarlas, ya que pip3
no puede arreglar el namespace. En este caso, para asegurarte de que se instala la versión correcta, ejecuta los siguientes comandos:
root@linux# pip3 uninstall docker-py docker
root@linux# pip3 install docker
Si ahora realizas el descubrimiento de servicios en Checkmk y activas los cambios, deberías encontrar algunos servicios nuevos que afectan al propio nodo Docker:

2.2. Ajuste preciso del Plugin
Puedes configurar distintos parámetros del Plugin. Por ejemplo, puedes ahorrar recursos desactivando secciones innecesarias o, si es necesario, personalizando el endpoint del motor de la API de Docker (el predeterminado es el socket Unix unix://var/run/docker.sock
).
Crea el archivo de configuración /etc/check_mk/docker.cfg
en el host Docker. Puedes encontrar una plantilla con explicaciones detalladas en el directorio Checkmk ~/share/check_mk/agents/cfg_examples/docker.cfg
.
En las ediciones comerciales puedes configurar fácilmente todos los parámetros con el Agent bakery.
2.3. Monitorización de los contenedores
Crear los host de los contenedores
Por supuesto, el aspecto interesante es la monitorización de los contenedores Docker. Esto se implementará automáticamente instalando los Plugin, aunque los servicios no se asignarán al nodo Docker, sino que Checkmk asume un único host por contenedor Docker.
El mecanismo utilizado aquí se denomina piggyback: el plugin o agente especial transporta datos de otros hosts - "piggybacked" por así decirlo- junto con sus propios datos. Checkmk coloca estos datos en el directorio tmp/check_mk/piggyback
. Todo lo que tienes que hacer en la Configuración es crear hosts con los nombres correctos, y los servicios se les asignarán automáticamente.
En las ediciones comerciales puedes hacer que estos hosts se creen automáticamente. Utiliza el conector Piggyback en la configuración dinámica. Ten en cuenta lo siguiente, si creas los hosts manualmente:
El nombre del host debe coincidir exactamente con el directorio creado en
tmp/check_mk/piggyback
. Por defecto, éste es el ID corto de 12 caracteres del contenedor (por ejemplo,2ed23056480f
).Si los contenedores no tienen sus propias direcciones IP (que suele ser el caso), configura Network address > familia de direcciones IP# en No IP.
Para Monitoring agents asegúrate de establecer Checkmk agent / API integrations en No API integrations, no Checkmk agent.
Puedes configurar el campo Parents de la sección Basic settings con el nombre del host del nodo Docker.
También es importante que el nodo Docker y sus contenedores se monitoricen desde el mismo site de Checkmk.
Una vez creados los hosts contenedores, y tras realizar un descubrimiento de servicios, aparecen nuevos servicios en ellos.
Sin embargo, como muchos servicios monitorizados por el agente dentro de los contenedores en realidad muestran información del nodo (por ejemplo, la carga de la CPU, la temperatura y muchos otros parámetros del sistema operativo), se han eliminado.
Nombres alternativos para los host de los contenedores
Por defecto -como ya se ha dicho- se utiliza el ID abreviado de 12 caracteres del contenedor como nombre para el host del contenedor. Opcionalmente, esto puede configurarse de otra manera. Para ello, en el archivo de configuración docker.cfg
(ver Ajuste fino del Plugin) establece la opción container_id
en long
para utilizar el ID completo del contenedor como nombre, o en name
para utilizar el nombre del contenedor.
Los usuarios de ediciones comerciales pueden configurar esto en el Agent bakery utilizando la regla Docker node and containers, opción Host name used for containers.

Por cierto: Con el conjunto de reglas Access to agents > General settings > Hostname translation for piggybacked hosts puedes definir reglas bastante flexibles para renombrar los nombres del host contenidos en los datos piggyback. Con este método también puedes resolver el problema de tener contenedores con el mismo nombre en dos nodos Docker diferentes, por ejemplo.

Consulta el artículo El mecanismo piggyback para ver más opciones y una descripción más detallada de esta función.
Monitorización del estado del host
Dado que el estado del host de un contenedor no puede verificarse realmente mediante paquetes TCP o ICMP, debe determinarse de otra forma. El servicio Docker container status facilita esta tarea: en cualquier caso, comprueba si el contenedor se está ejecutando, por lo que puede utilizarse como herramienta segura para detectar el estado del host. Define una regla en el conjunto de reglas Host Check Command para este fin, y establece la opción Use the status of the service… en el servicio mencionado. No olvides establecer las condiciones para que sólo se vean afectados los contenedores. En nuestro ejemplo, todos los contenedores se encuentran en una carpeta con el mismo nombre:

Operar el agente directamente en el contenedor
Para monitorizar detalles en el propio contenedor (por ejemplo, procesos en ejecución, bases de datos, archivos de registro, etc.), es necesario que el agente Checkmk esté instalado y se ejecute en el propio contenedor. Esto es especialmente cierto para el despliegue de los plugins de agente. Los tres plugins mem
, cpu
y diskstat
(E/S de disco) funcionan, sin embargo, sin un agente en el contenedor, y son analizados por el agente Checkmk en el propio nodo.
Especialmente en el caso de las imágenes Docker creadas por ti mismo, es posible que desees desplegar el propio agente en el contenedor. En este caso, los datos ya no son analizados -como se ha descrito anteriormente- por el agente del nodo Docker. En su lugar, se ejecuta un agente independiente en cada contenedor. Sin embargo, la llamada a este agente se seguirá realizando mediante un procedimiento piggyback a través del nodo Docker.
Sin embargo, el agente instalado en el contenedor sólo funciona si todos los comandos necesarios también están presentes en el contenedor. Especialmente con los contenedores mínimamente construidos basados en Alpine Linux, es muy posible que elementos elementales como Bash no estén presentes. En tal situación, debes monitorizar el contenedor desde el nodo Docker.
El uso del conjunto de reglas Host Check Command sólo será necesario en este caso si el contenedor no es pingable, pero por lo demás funcionará exactamente como se ha descrito anteriormente.
3. Opciones de diagnóstico
3.1. Diagnóstico de un nodo Docker
Si la configuración no se realiza correctamente, existen varias opciones para analizar el problema. Si procede, comprueba que hay instalado en el host un agente Checkmk con al menos la versión 1.5.0 o una versión posterior.
Si la versión del agente en el host es adecuada, comprueba a continuación si los datos están presentes en la salida del agente. Puedes descargar la salida como un archivo de texto: en una vista de tabla en la monitorización a través de la entrada del menú de acción Download agent output:

Alternativamente, puedes buscar directamente en la caché del agente. Para mayor claridad, en el siguiente ejemplo se abrevia la salida del 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)>>>
El siguiente comando se utiliza para el servicio Docker node info. Este comando debe poder ejecutarse exactamente de esta forma en el host. Si es necesario, comprueba tu instalación de Docker:
root@linux# docker info 2>&1
3.2. Diagnóstico de un host contenedor
Si el host contenedor no recibe datos o, respectivamente, no se detectan servicios, comprueba primero si hay datos piggyback disponibles para este host. El nombre del host debe ser idéntico al ID del contenedor. Como alternativa, también puedes hacer una asignación manual utilizando el conjunto de reglas Hostname translation for piggybacked hosts. Aquí, sin embargo, sólo es adecuada la opción Explicit hostname mapping:

Para comprobar si se crearán datos piggyback para un ID, puedes comprobar el siguiente directorio:
OMD[mysite]:~$ ls -l tmp/check_mk/piggyback/
76adfc5a7794 f0bced2c8c96 bf9b3b853834
4. Etiquetas de host
En Checkmk existen las llamadas host labels. Entre otras cosas, la monitorización de Docker establece automáticamente estas etiquetas:
para el nodo Docker, la etiqueta
cmk/docker_object:node
,para cada uno de los contenedores las etiquetas
cmk/docker_image
,cmk/docker_image_name
,cmk/docker_image_version
ycmk/docker_object
.
Puedes utilizar estas etiquetas, por ejemplo, en las condiciones de tus reglas, para que la configuración de tu monitorización dependa de la imagen utilizada en un contenedor.
5. Archivos y directorios
Ruta del archivo | Función |
---|---|
|
Checkmk almacena aquí los datos piggyback. Para cada host se generará una subcarpeta con el nombre del host. Contiene un archivo de texto con los datos del host. El nombre del archivo es el host que proporcionó los datos. |
|
Aquí se guarda temporalmente la salida del agente más reciente de todos los host. El contenido del archivo de un host es idéntico al del comando |