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
Checkmk tiene una estructura muy modular, y quienes tengan conocimientos de programación en Python pueden ampliar esta estructura en muchos aspectos. Entre otras cosas, es posible ampliar Checkmk con los siguientes elementos:
Comprobaciones propias y plugins de agente, incluyendo máscaras de entrada para el entorno de configuración.
Plugins propios para el inventario de HW/SW de Checkmk
Extensiones para la GUI (vistas de tabla, dashboards, columnas, iconos, etc.).
Definiciones de gráficos o Perf-O-Meters
Scripts de gestión de notificaciones y alert handler (también en shell u otros lenguajes de scripting).
Todas estas extensiones se pueden implementar colocando archivos adicionales en el directorio ~/local dentro del site de Checkmk.
Para gestionar estas extensiones, implementarlas en entornos distribuidos y también compartirlas con otros usuarios, Checkmk ofrece su propio formato de paquete: el paquete de extensión Checkmk, o MKP.
Un MKP puede incluir cualquier conjunto de extensiones que desees —por ejemplo, un conjunto de check plugins que incluya páginas de manual asociadas, entornos de configuración de umbrales y definiciones de métricas asociadas. Además, puede contener ajustes para su distribución a través de Agent bakery. Un MKP tiene un nombre, un número de versión y se puede instalar o eliminar con una simple acción.
|
Utiliza un sitio de prueba para crear y personalizar MKP, y copia los MKP al sitio de producción para distribuirlos. Esto te ahorrará dos problemas potenciales principales que surgen cuando los archivos modificados no se empaquetan en MKP a tiempo:
|
1.1. El Checkmk Exchange
En Checkmk Exchange, los programadores de Plugins pueden proporcionar paquetes para otros usuarios de Checkmk e intercambiarlos entre ellos. Desde Exchange puedes descargar y utilizar extensiones de forma gratuita. Ten en cuenta que los paquetes de Exchange son compartidos voluntariamente por otros usuarios y no tienen ninguna garantía.
Los Plugins mal programados pueden provocar un aumento de la carga de la CPU y del sistema, así como de los requisitos de memoria. Además, es posible que un MKP se haya desarrollado para versiones anteriores de Checkmk y, por lo tanto, no sea totalmente compatible (por ejemplo, con la actualización de la versión 1.6.0 a la versión 2.0.0, Checkmk cambió de Python 2 a Python 3). En casos extremos, puede existir riesgo de pérdida de datos. Por lo tanto, te recomendamos encarecidamente que, antes de utilizar MKP de terceros en un entorno de producción, los instales primero en un site de prueba.
1.2. Herramientas para MKP
Hay dos herramientas para gestionar los MKP:
El comando «
mkp»En el Menú de configuración, el item Extension Packages (solo ediciones comerciales)
Ahora vamos a presentar ambas herramientas de gestión con más detalle. Son compatibles entre sí, por lo que puedes usar tanto el comando como «Extension Packages» sin «estropear nada».
2. Gestión de paquetes de extensión a través del Menú de configuración
La función para gestionar MKP a través de la GUI solo está disponible en las ediciones comerciales de Checkmk.
En el menú «Setup», accede a la administración de MKP a través de «Setup > Maintenance > Extension packages».
Aquí puedes instalar, modificar o crear MKP:

Los MKP obsoletos solo se pueden instalar a través de la línea de comandos. Desde Extension packages, solo puedes instalar (habilitar y activar) los MKP que cumplan los requisitos de versión. Los demás MKP se habilitarán pero no se instalarán (aparecerá el mensaje de error correspondiente). |
2.1. Añadir un MKP
Un MKP que hayas descargado de Exchange, por ejemplo, se puede cargar en Checkmk haciendo clic en el botón «Upload package» y, a continuación, estará disponible para su instalación.
Para ello, el archivo debe estar presente en el equipo en el que también se ejecuta tu navegador web.
El nombre del archivo del paquete debe incluir la extensión .mkp.

Tras la instalación, el paquete de extensión estará disponible inicialmente, pero no estará activo. Se encuentra en «All packages (enabled or disabled)»:

2.2. Activación de un MKP
Solo al hacer clic en el icono del enchufe
se activará un paquete disponible.
Durante la activación, los archivos se instalan en una jerarquía de carpetas bajo ~/local/.
El archivo de descripción del paquete también se coloca en ~/var/check_mk/packages/.
Tras la activación, el paquete también aparecerá en la lista de MKP habilitados y activos — Enabled (active on this site):

Ahora realiza la activación de los cambios, tras lo cual todas las funciones del paquete quedarán integradas en el sistema y listas para su uso.
2.3. Desactivación y eliminación de paquetes
La eliminación completa de un paquete también se realiza en dos pasos.
Con el botón «
» (Desactivar), primero desactivas un paquete en la lista de paquetes activos.
En este paso se eliminan los archivos instalados, pero el MKP se mantiene; este paso solo revierte la activación.
Con el icono «
» de la lista de todos los paquetes, puedes volver a eliminar los paquetes instalados y no utilizados.
Al eliminarlos, el paquete se borra y, con él, la extensión se elimina por completo, es decir, lo contrario de añadir un paquete.
2.4. MKP en entornos distribuidos
En el caso de una monitorización distribuida con configuración centralizada, basta con que los paquetes estén disponibles en el sitio central.
Para cada sitio remoto asociado al sitio central, puedes determinar por separado si las personalizaciones deben propagarse a ese sitio remoto.
Todo lo que tienes que hacer es activar la opción «Replicate extensions».
Después de eso, los MKP y todos los demás cambios dentro del directorio «~/local» también se transferirán durante una sincronización.

Si no deseas una transferencia concreta, simplemente desactiva la opción para este o todos los sites.
Importante: Las personalizaciones de la configuración central solo se transferirán si la opción «Enable replication» está configurada en «Push configuration to this site».
2.5. Un caso especial: paquetes habilitados pero inactivos
Una situación especial es el intento de activación de un paquete que no tiene coincidencia con la versión de Checkmk utilizada. Un paquete de este tipo, que está habilitado pero cuya activación falla debido a una versión de Checkmk incompatible, acabará en la lista Enabled (inactive on this site).

Pero, ¿por qué instalar paquetes que no tienen coincidencia con la versión de Checkmk que estás usando? Hay dos buenas razones posibles:
Una actualización de la versión de Checkmk: Tienes la posibilidad de almacenar paquetes tanto para la versión antigua como para la nueva; cuando realices la próxima actualización, el paquete más reciente se activará automáticamente.
Monitorización distribuida: Para facilitar las actualizaciones, la versión principal de Checkmk de los sitios remotos puede ser una superior a la del sitio central. Sin embargo, esto dificultaba anteriormente la distribución de MKP, ya que estos tenían que ser compatibles con ambas versiones principales. Con la posibilidad de desbloquear paquetes no coincidentes, puedes mantener en el sitio central paquetes que coincidan tanto con la versión de origen como con la de destino. La versión más reciente se activará entonces automáticamente durante una actualización.
A partir de los números de versión que se muestran en la captura de pantalla anterior, puedes ver que se trata de un site central de Checkmk 2.1.0 que proporciona paquetes para sitios remotos que ya se han actualizado a 2.2.0.
3. Gestión de paquetes de extensiones mediante la línea de comandos
También puedes realizar todas las acciones anteriores desde la línea de comandos.
Para ello se utiliza el comando `mkp`.
Si lo ejecutas sin ningún subcomando, te muestra sugerencias sobre cómo utilizarlo.
Hemos abreviado la salida, que tiene unas 50 líneas, a menos de la mitad para que resulte más claro:
En las siguientes secciones, te presentaremos los comandos más importantes para gestionar los MKP. Al final de este artículo encontrarás una tabla con una referencia útil de los comandos.
3.1. Añadir un MKP
La adición de un paquete se realiza con mkp add.
Para ello, por supuesto, primero debes subir el archivo MKP al servidor Checkmk (por ejemplo, con scp).
A continuación, ejecuta el siguiente comando:
Solicitas una lista de los paquetes disponibles con mkp list.
Tras una instalación, el paquete de extensión está inicialmente disponible, pero no activo; en la lista aparecerá con el estado «Disabled»:
3.2. Activación de un MKP
Solo con el subcomando «enable» se activará también un paquete disponible.
Solo es necesario especificar el número de versión en caso de que el nombre por sí solo no sea único:
En principio, solo puedes activar MKP que tengan una coincidencia con la versión de tu instalación de Checkmk, incluso en la línea de comandos.
Si quieres saltarte las restricciones de versión e instalar (habilitar y activar) el MKP en cualquier condición, usa --force-install.
Esto es especialmente relevante para desarrolladores que necesitan adaptar gradualmente los paquetes a nuevas versiones de Checkmk en entornos distribuidos.
Una vez activado —independientemente de si se utiliza force-install—, los archivos se instalan en una jerarquía de directorios dentro de ~/local/ y el archivo de descripción del paquete se coloca en ~/var/check_mk/packages/.
Esto hace que el paquete adquiera el estado «Enabled (active on this site)»:
Puedes obtener detalles sobre un paquete concreto con mkp show, sin importar su estado de activación actual:
3.3. Desactivar y eliminar paquetes
La desinstalación de un paquete se realiza en dos pasos.
Primero, el paquete se desactiva con mkp disable.
Esto elimina los archivos instalados, pero mantiene el paquete, por ejemplo, para una posible reactivación posterior.
De nuevo, especificar el número de versión solo es necesario en caso de que el nombre del paquete por sí solo no sea único:
En la lista de paquetes verás ahora el estado «Disabled» cuando vuelvas a ejecutar «mkp list»:
Solo «mkp remove» eliminará el paquete de forma irreversible:
3.4. Un caso especial: paquetes habilitados pero inactivos
Una situación especial se da cuando se instala un paquete que no tiene coincidencia con la versión de Checkmk que se está utilizando:
Puedes activar ese paquete, pero la activación fallará debido a la versión incompatible de Checkmk, y el paquete pasará al estado «Enabled (inactive on this site)».
Ya hemos explicado anteriormente, en la sección de configuración correspondiente, las posibles circunstancias para optar por instalar paquetes incompatibles, es decir, con actualizaciones en entornos distribuidos.
Al igual que en el procedimiento de configuración, usa mkp enable packagename version para habilitar un paquete, o mkp disable packagename version para desactivar una habilitación existente.
4. MKP para desarrolladores
La mayoría de los que sabemos o estamos aprendiendo a programar somos «como enanos que se suben a hombros de gigantes para poder ver más lejos que ellos»: Es en el mundo del Open Source donde realmente podemos beneficiarnos del trabajo previo de otros. En el caso de Checkmk, esto es especialmente cierto para las extensiones, que, en el contexto de la GPL, son obras derivadas del propio Checkmk, el cual, a su vez, está sujeto a la GPL (versión 2.0). En concreto, esto significa que puedes personalizar los paquetes descargados de Checkmk Exchange a tu antojo (o simplemente según tus necesidades actuales).
En las siguientes secciones te mostramos —desde el reempaquetado con cambios menores, pasando por la resolución de un paquete existente (ejemplo), hasta la compilación de archivos sin empaquetar— todos los pasos relevantes presentados en la secuencia típica en la que se realizan.
Si estás programando o modificando tus propios Plugins para Checkmk, consulta los artículos sobre las interfaces de programación existentes y la integración en Agent bakery.
4.1. Edición de paquetes
La corrección de pequeños errores a menudo hace necesario adaptar un paquete existente sin cambiar su estructura o nombre. En este caso, es recomendable no solo adaptar los archivos existentes almacenados en el sistema de archivos, sino también actualizar al menos el número de versión del paquete. Si los cambios en las API de Checkmk requieren modificaciones en un paquete, ajusta también los números de versión almacenados en el paquete para las versiones mínima y máxima compatibles. Además, al usar Agent bakery, la presencia de nuevos MKP activa la recompilación de los paquetes de agente.
En las ediciones comerciales, usa el icono «
» para acceder al diálogo de modificaciones.

4.2. Descomprimir paquetes
El menú de configuración
El descomprimido de un paquete en
«libera», por así decirlo, los archivos empaquetados dentro de ~/local/ y elimina únicamente la descripción del paquete.
Como resultado, los archivos quedarán descomprimidos y las extensiones seguirán activas.
Esto es lo contrario a crear un paquete a partir de archivos previamente descomprimidos.
En la práctica, lo más probable es que necesites descomprimir cuando quieras personalizar una extensión y luego volver a empaquetarla para incluir cualquier modificación. Por ejemplo, puedes empezar con nuestro ejemplo «¡Hola, mundo!», que en realidad no hace nada útil, pero puede servir como plantilla para tu primer paquete personalizado.
La línea de comandos
En la línea de comandos, puedes desempaquetar un paquete con el comando `mkp release`.
Para que esto funcione, el paquete que se va a desempaquetar debe tener el estado «Enabled (active on this site)».
Los archivos de la extensión se conservan y solo se elimina la descripción del paquete:
El paquete original permanece intacto y cambia su estado a «Enabled (inactive on this site)». Por lo tanto, también puede servir como copia de seguridad en caso de que algo salga mal durante la personalización. A continuación, simplemente elimina los archivos «redundantes», vuelve a habilitar el paquete y empieza de nuevo.
4.3. Buscar archivos sin empaquetar
El Menú de configuración
Una vez completado el trabajo de programación o personalización, será necesario volver a encontrar los archivos existentes y añadidos. Dado que estos archivos no pertenecen actualmente a ningún paquete, aparecen en la lista de archivos bajo «Unpackaged files»:

La línea de comandos
El equivalente en la línea de comandos es «mkp find»:
Elimina los archivos que no necesites o anota cuáles no deben incluirse en el nuevo paquete. En el siguiente paso, los archivos sin empaquetar se volverán a combinar en un paquete.
4.4. Creación de paquetes
El menú de configuración
El botón «
» (Create package) en la vista general de archivos sin empaquetar te lleva al diálogo para crear un nuevo paquete:

Además de los detalles obvios, es importante que selecciones al menos un archivo para empaquetar.
Al crear un paquete, también se crea una descripción del paquete en ~/var/check_mk/packages/,
que contiene información general, así como la lista de los archivos incluidos.
Por supuesto, es difícil predecir la versión máxima de Checkmk compatible sin una bola de cristal.
Las extensiones que utilizan las nuevas API introducidas en Checkmk 2.3.0 están preparadas para el futuro y también funcionarán hasta Checkmk 2.5.0 sin necesidad de ajustes. En este caso, puedes introducir 2.5.99 en Valid until Checkmk version como la versión máxima de Checkmk compatible. En el momento de la revisión de este artículo, no se puede hacer ninguna afirmación sobre el futuro más allá de esa fecha. |
Ahora puedes descargar este paquete recién creado como un archivo MKP a través de la lista de paquetes con el icono
—por ejemplo, para transferirlo a otro sistema o subirlo al Exchange.
La línea de comandos
El procedimiento para crear MKP en la línea de comandos es similar al del Menú de configuración.
Primero, usa mkp template para crear una configuración de paquete que (por ahora) contenga todos estos archivos.
Especifica el nombre deseado para el nuevo paquete como parámetro:
Ahora realiza la edición de las propiedades del paquete con un editor de texto:
{'author': 'Add your name here',
'description': 'Please add a description here',
'download_url': 'https://example.com/hello_world_ng/',
'files': {'agents': ['plugins/hello_world', 'windows/plugins/hello_world.cmd'],
'cmk_addons_plugins': ['hello_world/agent_based/hello_world.py',
'hello_world/checkman/hello_world',
'hello_world/graphing/helloworld_perfometer_graphing.py',
'hello_world/rulesets/ruleset_hello_world.py',
'hello_world/rulesets/ruleset_hello_world_bakery.py'],
'lib': ['python3/cmk/base/cee/plugins/bakery/hello_world.py']},
'name': 'hello_world_ng',
'title': 'Title of hello_world_ng',
'version': '1.0.0',
'version.min_required': '2.3.0p27',
'version.packaged': 'cmk-mkp-tool 0.2.0',
'version.usable_until': None}Edita este archivo según tus necesidades.
Presta atención a la sintaxis correcta de Python: las cadenas Unicode (textos que contienen caracteres no ASCII, como diéresis) deben ir precedidas de un pequeño u, por ejemplo.
Bajo la entrada «files», puedes eliminar los archivos que no deban incluirse en el paquete.
En «version.min_required», introduce la versión mínima de Checkmk necesaria para poder utilizar el paquete.
Cuando hayas terminado, puedes crear un archivo MKP con mkp package:
Los paquetes se guardan en ~/var/check_mk/packages_local:
5. El formato de paquete MKP
Es posible que quieras programar y empaquetar nuevos paquetes de extensión en una máquina de desarrollo y, a continuación, transferir el paquete terminado al servidor Checkmk para realizar pruebas.
Esto es bastante fácil de hacer, ya que el formato MKP es simplemente un archivo `.tar.gz`, que a su vez contiene archivos `.tar` y archivos de manifiesto.
Al examinar el archivo `hello_world-0.2.5.mkp` descargado, se revela el primer nivel de su estructura:
Descomprime el paquete en un directorio temporal y allí podrás ver el contenido de los archivos tar incluidos. Las rutas de los archivos son relativas al directorio que contiene sus respectivos componentes:
¿Y qué hay de los dos archivos de manifiesto info y info.json?
Ya has visto el archivo info y sus campos en formato Python Dict más arriba.
El equivalente en JSON info.json contiene exactamente los mismos campos y valores, pero ha sido serializado en formato JSON.
Si quieres compilar el paquete como parte de un script, debes introducir el archivo Python dict info y generar el archivo JSON info.json a partir de este antes de empaquetar.
Cuando vuelvas a empaquetar los archivos, ten cuidado de no incluir rutas de archivos que no formen parte de la jerarquía de carpetas en ~/local.
El nivel superior debe contener únicamente los manifiestos y los archivos tar.
6. Referencia de comandos
6.1. Gestión
| Subcomando | Parámetro | Función |
|---|---|---|
|
Nombre del archivo del paquete que se va a añadir |
Hace que el paquete esté disponible, pero aún no lo activa. |
|
Nombre del paquete (y número de versión, si procede) |
Activa un paquete para uso local o para distribuirlo a sitios remotos, dependiendo de la compatibilidad de versiones. |
|
Nombre del paquete (y número de versión, si procede) |
Activa un paquete aunque no haya compatibilidad de versiones. |
|
Nombre del paquete y número de versión |
Desactiva un paquete, que sigue estando disponible en el sistema de archivos. |
|
Nombre del paquete y número de versión |
Elimina por completo un paquete que ya estaba desactivado. |
|
Nombre del archivo del paquete que quieres añadir |
¡Este subcomando está en desuso y se eliminará pronto! |
|
ninguno |
Lista todos los paquetes disponibles y su estado de activación. |
|
Nombre del archivo del paquete que quieres inspeccionar |
Muestra información sobre un MKP desinstalado. |
|
Nombre del paquete (y número de versión, si procede) |
Muestra información sobre un MKP disponible. |
|
ninguno |
Muestra información sobre todos los MKP disponibles. |
|
Nombre del paquete (y número de versión, si procede) |
Lista de todos los archivos que pertenecen a un paquete. |
6.2. Desarrollo
| Subcomando | Parámetro | Función |
|---|---|---|
|
Nombre del paquete |
Resuelve un paquete activo. |
|
ninguno |
Lista todos los archivos que no pertenecen a ningún paquete. |
|
Nombre del nuevo paquete que se va a crear |
Crea un archivo de manifiesto como base para un nuevo paquete. |
|
Ruta al archivo de manifiesto |
Crea un MKP basado en el contenido de un archivo de manifiesto. |
6.3. Actualizaciones
| Subcomando | Parámetro | Función |
|---|---|---|
|
ninguno |
Desactiva los paquetes que ya no tienen coincidencia con la versión de Checkmk tras una actualización. |
|
ninguno |
Activa los paquetes que tienen una coincidencia con la versión de Checkmk tras una actualización. |
