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

A nivel mundial, 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 una monitorización de extremo a extremo y transparente de los contenedores, también resulta compleja debido a la arquitectura dinámica y multicapa de estos contenedores.
Checkmk puede monitorizar contenedores Docker directamente a través del agente de Linux. Pero Checkmk no solo monitoriza el estado general del daemon o del contenedor, sino también el propio contenedor. En el Catálogo de check plugins de Checkmk encontrarás una lista completa de los elementos que se pueden monitorizar actualmente.
Además de la información de estado e inventario que Checkmk puede determinar sobre el nodo (término de Docker para «el host en el que se ejecutan los contenedores»), Checkmk también puede determinar información detallada del estado de los contenedores. Para ello, cada contenedor debe añadirse como un host independiente en Checkmk si se quiere realizar la monitorización. Sus datos se transferirán desde el nodo a este host.
En las ediciones comerciales, los hosts de contenedores se pueden crear o eliminar automáticamente mediante la administración dinámica del host.
2. Configuración
2.1. Instalación del agente y del plugin de agente
Para poder supervisar un nodo Docker con Checkmk, primero hay que supervisarlo con el agente normal de Linux. Esto te proporcionará 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 de agente en la carpeta de complementos del agente (normalmente /usr/lib/check_mk_agent/plugins).
Para obtener información detallada sobre cómo instalar un plugin de agente, consulta el artículo sobre el agente de Linux.
En las ediciones comerciales también puedes hacerlo con Agent bakery, que incluye el conjunto de reglas adecuado para la monitorización de Docker: Docker node and containers
Para que funcione correctamente, se requiere el módulo de Python docker.
Puedes checkear fácilmente si el módulo está presente con python en la línea de comandos:
Si es necesario, instala el módulo que falta.
El método de instalación recomendado es utilizar el administrador de paquetes de tu distribución de Linux.
Instalar mediante el comando pip3 conlleva el riesgo de dañar los módulos de Python proporcionados por la distribución.
En algunos casos, tendrás que recurrir a un entorno virtual de Python ( |
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 diferentes 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 valor predeterminado es el socket Unix unix://var/run/docker.sock).
Crea el archivo de configuración /etc/check_mk/docker.cfg en el host de Docker.
Encontrarás una plantilla con explicaciones detalladas en el directorio de Checkmk ~/share/check_mk/agents/cfg_examples/docker.cfg.
En las ediciones comerciales puedes configurar fácilmente todos los parámetros con Agent bakery.
2.3. Monitorización de los contenedores
Creación de los hosts de contenedores
Por supuesto, lo interesante es la monitorización de los contenedores Docker. Esto se implementará automáticamente al instalar los Plugins; sin embargo, los servicios no se asignarán al nodo Docker, sino que Checkmk asume un único host por contenedor Docker.
El mecanismo que se utiliza aquí se llama piggyback:
El complemento o agente especial transporta datos de otros hosts —«a cuestas», 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 tipo de conexión «Piggyback data» en la administración dinámica del host. Ten en cuenta lo siguiente si creas los hosts manualmente:
El nombre del host debe tener una coincidencia exacta con el directorio creado en
~/tmp/check_mk/piggyback. Por defecto, se trata del ID corto de 12 caracteres del contenedor (por ejemplo,2ed23056480f).Si los contenedores no tienen sus propias direcciones IP (lo cual suele ser el caso), configura Network address > IP address family# en No IP.
Para «Monitoring agents», asegúrate de configurar «Checkmk agent / API integrations» como «No API integrations, no Checkmk agent».
Puedes configurar el campo «Parents» en 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 realicen tareas de monitorización desde el mismo sitio de Checkmk.
Una vez creados los hosts de contenedores, y tras realizar un descubrimiento de servicios, aparecerán nuevos servicios en ellos.
Si tienes un agente de Linux instalado en el contenedor, se ejecutará automáticamente. Sin embargo, dado que muchos servicios supervisados por el agente dentro de los contenedores muestran en realidad información del nodo (por ejemplo, la carga de la CPU, la temperatura y muchos otros parámetros del sistema operativo), estos se han eliminado.
Nombres alternativos para los hosts de contenedores
Por defecto —como se ha mencionado anteriormente— se utiliza el ID corto de 12 caracteres del contenedor como nombre del host del contenedor.
Esto se puede configurar de forma diferente si se desea.
Para ello, en el archivo de configuración docker.cfg (consulta Ajuste preciso 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 las ediciones comerciales pueden configurar esto en Agent bakery utilizando la regla Docker node and containers, opción Host name used for containers.

Por cierto: con el conjunto de reglas «Host name 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 Docker 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 se puede verificar realmente mediante paquetes TCP o ICMP, esto debe determinarse de otra manera. El servicio Docker container status facilita esto: en cualquier caso, check si el contenedor está en ejecución y, por lo tanto, puede utilizarse como una herramienta segura para detectar el estado del host. Define una regla en el conjunto de reglas Host check command para este fin y configura la opción Use the status of the service… con el servicio mencionado. No te olvides de configurar las condiciones para que solo 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 supervisar detalles dentro del 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 dentro del propio contenedor.
Esto es especialmente cierto para la implementación de plugins de agente.
Sin embargo, los tres plugins mem, cpu y diskstat (E/S de disco) funcionan sin un agente en el contenedor y son analizados por el agente Checkmk en el propio nodo.
Especialmente en el caso de imágenes Docker creadas por ti mismo, es posible que quieras implementar 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. No obstante, la llamada a este agente seguirá estando integrada en un procedimiento piggyback a través del nodo Docker.
No obstante, el agente instalado en el contenedor solo funciona si todos los comandos necesarios también están presentes en el contenedor. Especialmente con contenedores de construcción mínima basados en Alpine Linux, es muy posible que no estén presentes elementos básicos como Bash. En tal situación, deberías supervisar el contenedor desde el nodo Docker.
El uso del conjunto de reglas «Host check command» solo será necesario en este caso si no se puede hacer ping al contenedor, 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, hay varias opciones para analizar el problema. Si procede, comprueba que en el host esté instalado un agente Checkmk con al menos la versión 1.5.0 o una posterior.
Si la versión del agente en el host es la adecuada, check 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 host en la monitorización a través de la entrada del menú de acción «Download agent output»:

Como alternativa, puedes buscar directamente en la caché del agente. Para mayor claridad, la salida del siguiente ejemplo se ha abreviado a la salida del nodo:
Si las secciones no aparecen aquí, no se reconocerá la instalación de Docker. El siguiente comando se utiliza para el servicio «Docker node info». Este comando debe ser ejecutable exactamente de esta forma en el host. Si es necesario, check tu instalación de Docker:
3.2. Diagnóstico para un host de contenedor
Si el host del 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 realizar una asignación manual utilizando el conjunto de reglas Host name translation for piggybacked hosts. En este caso, sin embargo, solo es adecuada la opción Explicit hostname mapping:

Para comprobar si se crearán datos piggyback para un ID, puedes check el siguiente directorio:
4. Host labels
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» y «cmk/docker_object».
Puedes usar estas etiquetas, por ejemplo, en las condiciones de tus reglas, para que tu configuración de monitorización dependa de la imagen utilizada en un contenedor.
5. Archivos y directorios
| Ruta del archivo | Función |
|---|---|
|
Checkmk guarda aquí los datos piggyback. Para cada host piggyback se crea una subcarpeta con el nombre del host; esta subcarpeta contiene un archivo de texto con los datos del host. El nombre del archivo es el nombre del host piggyback que proporciona los datos. |
|
Aquí se guardan temporalmente los resultados más recientes del agente de todos los hosts. El contenido del archivo de un host es idéntico al del comando « |
