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. Introducción

Logo of the Docker, Inc. company.

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:

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

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.

Rule for selecting the host names of the 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.

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

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:

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

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:

Action menu of the host in monitoring with the entry for downloading the 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 "&lt&lt&ltdocker"
<<<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:

Rule for translating host names of hosts with piggyback data.

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 y cmk/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

tmp/check_mk/piggyback/

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.

tmp/check_mk/cache/

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 cmk -d myserver123.

En esta página