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. ¿Por qué molestarse en crear tus propias comprobaciones?

Gracias a la gran cantidad de check plugins que vienen de serie, Checkmk ya puede supervisar una gran cantidad de datos relevantes. Sin embargo, cada entorno TI es único, por lo que a menudo surgen requisitos muy específicos. Con las local checks, puedes crear tus propios servicios de forma rápida y sencilla realizando pequeñas ampliaciones al agente en el host de destino.

Estos plugins locales se diferencian de otras comprobaciones en un aspecto importante: Su estado se determina directamente en el host en el que se recogen los datos.

Esto elimina la necesidad de crear checks con Python y te da total libertad para elegir el lenguaje de scripting. Los local checks también ofrecen una gran libertad a los administradores de servidores. Los administradores de monitorización solo tienen que decidir si incluir nuevas comprobaciones locales como servicios.

Tip

Puedes combinar el mecanismo que ofrecen las local checks con todos los métodos que admite Checkmk para transportar datos del agente: programas de origen de datos, agentes especiales, datos piggyback y archivos spool. Los datos de todas las fuentes se agrupan, pero se producirán conflictos si el nombre del servicio se asigna (sin querer) dos veces; por este motivo, asegúrate de que los nombres de cada servicio sean únicos.

2. Cómo escribir un local check sencillo

2.1. Crear el script

Una local check se puede escribir en cualquier lenguaje de programación compatible con el host de destino. El script debe estar estructurado de manera que cada check genere una línea de estado compuesta por cuatro partes. Aquí tienes un ejemplo:

0 "My service" myvalue=73 My output text which may contain spaces

Las cuatro partes están separadas por espacios y tienen los siguientes significados:

Valor de ejemplo Significado Descripción

0

Estado

El estado del servicio se indica con un número: 0 para OK, 1 para WARN, 2 para CRIT y 3 para UNKNOWN. También se puede calcular el estado de forma dinámica: en ese caso, el número se sustituye por un P.

"My service"

Nombre del servicio

El nombre del servicio tal y como aparece en Checkmk, en la salida de la check entre comillas dobles.

myvalue=73;65;75

Valor y métricas

Valores de métricas para los datos. Encontrarás más información sobre la estructura en el capítulo sobre métricas. También se puede introducir un signo menos si la check no genera métricas.

My output text which may contain spaces

Detalles del estado

Detalles del estado tal y como se mostrarán en Checkmk en el campo «Summary». Esta parte también puede contener espacios en blanco.

Important

Hasta Checkmk 2.4.0 p4, siempre debe haber exactamente un espacio (0x20 ASCII) entre las cuatro partes de esta salida. A partir de 2.4.0 p5, se permiten varios espacios. Dentro de los detalles del estado, se puede usar cualquier número de espacios de cualquier tipo. Las desviaciones de la especificación que acabamos de describir pueden funcionar, pero no se garantiza que sea así. Hasta Checkmk 2.4.0 p4, las líneas que no se puedan analizar simplemente se ignorarán. A partir de 2.4.0 UP, se creará un servicio con el estado CRIT y detalles sobre los problemas encontrados.

Si no estás seguro de un posible resultado, puedes probarlo simplemente escribiendo un pequeño script con el comando echo. Inserta el resultado que quieres probar en el comando echo. Nuestro ejemplo utiliza comillas dobles en el exterior, ya que las variables del interior (variables del entorno y las definidas en el script) se evalúan. Por lo tanto, debes encerrar las comillas del nombre del servicio entre \ para que el shell no interprete estos caracteres como el inicio y el final de una cadena (y, por lo tanto, los elimine de la salida):

mylocalcheck
#!/bin/bash
echo "0 \"My 1st service\" - This static service is always OK"
Copiar el contenido del archivo al portapapeles
¡Contenido del archivo copiado correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

En hosts Windows, un script así tendrá un aspecto muy similar a este:

mylocalcheck.bat
@echo off
echo 0 "My 1st service" - This static service is always OK

Ambos scripts producen el mismo resultado en la salida:

0 "My 1st service" - This static service is always OK

Para Checkmk solo es relevante esta salida, no cómo la has creado.

Por cierto, puedes escribir tantas salidas como quieras en un script. Cada línea de salida tendrá su propio servicio creado en Checkmk. Por lo tanto, no se permiten caracteres de nueva línea en la salida, a menos que estén enmascarados, por ejemplo, para una salida de varias líneas en Checkmk.

En el Análisis de errores puedes ver cómo se puede checkear si el agente invocará correctamente el script local.

Important

Si se utiliza el núcleo de Nagios (siempre en Checkmk Community), no se permiten los siguientes caracteres especiales en el nombre del servicio :
`;~!$%^&*|\'"<>?,()=
Si estos caracteres siguen apareciendo en los nombres de los servicios, simplemente se eliminan en Checkmk.
En las ediciones comerciales con Checkmk Micro Core (CMC), no se permite el punto y coma (; ) en el nombre. El símbolo del dólar ($ ) solo se muestra si se escapan los caracteres con una barra invertida (\ ).
Lo siguiente se aplica a todas las ediciones: Si aparecen comillas simples en el nombre del servicio, ¡el reconocimiento de servicios no lo encontrará!

2.2. Distribución del script

Una vez escrito el script, se puede distribuir a los hosts correspondientes. La ruta utilizada dependerá del sistema operativo. Encontrarás una lista de nombres de rutas en «Archivos y directorios» más abajo.

No te olvides de hacer que el script sea ejecutable en sistemas tipo Unix. La ruta que se muestra en este ejemplo es para Linux (paquete del agente con la configuración predeterminada):

root@linux# chmod +x /usr/lib/check_mk_agent/local/mylocalcheck
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Si utilizas Agent bakery, el script se puede distribuir mediante un procedimiento basado en reglas. Encontrarás más información sobre la creación de reglas en el capítulo «Distribución a través de Agent bakery».

2.3. Añadir el servicio a la monitorización

Cada vez que se ejecute el agente Checkmk, también se ejecutará el local check contenido en el script y se añadirá a la salida del agente. El descubrimiento de servicios también funciona automáticamente, al igual que con otros servicios:

The local check found by the service discovery.

Una vez que el servicio se haya añadido a la monitorización y se hayan activado los cambios, la implementación del servicio creado por ti mismo con la ayuda de una local check habrá finalizado. Si surge algún problema durante el descubrimiento de servicios, el análisis de errores puede ser de ayuda.

3. Métricas

3.1. Definición de métricas

También puedes definir métricas en una local check. La sintaxis más breve posible para los datos de métricas es:

metricname=value

donde value es el valor actual.

La sintaxis completa para los datos métricos es:

metricname=value;warn;crit;min;max

Aquí, warn y crit definen los valores umbral (superiores). Para que estos valores umbral se muestren en el gráfico, debe activarse el cálculo dinámico (estado P). El estado se calcula entonces utilizando Checkmk. Los últimos parámetros especificados para min y max fijan el rango de valores.

Un ejemplo completo podría tener este aspecto:

count=73;80;90;0;100

Los valores se separan con punto y coma. Si no se necesita un valor, el campo se deja vacío o se omite al final, como en los siguientes casos para warn, crit y max:

count=42;;;0
Tip

En las ediciones comerciales se pueden definir los valores para min y max, pero solo por motivos de compatibilidad. Limitar el gráfico asociado a un rango de valores específico no tiene ningún efecto en las ediciones comerciales.

3.2. Nombres y unidades utilizados por las métricas

Las definiciones de métricas para local checks no difieren de las definiciones de métricas para otros tipos de checks. En definitiva, tienes tres opciones para asignar unidades y nombres fáciles de entender a las métricas:

  • Accedes a definiciones de métricas existentes que «se ajustan» al propósito requerido.

  • Creas tus propias métricas de forma ad hoc y única; esto suele ser suficiente para los contadores puros.

  • Crear tus propias métricas y guardar una definición de métrica: esto te ofrece la mayor flexibilidad.

Uso de definiciones de métricas existentes

La forma más fácil de obtener unidades adecuadas, una leyenda ajustada automáticamente y, a menudo, un Perf-O-Meter es utilizar definiciones de métricas existentes. En este artículo, algunos ejemplos utilizan los identificadores humidity o temperature. Existen definiciones de métricas predefinidas para ambos (humedad y temperatura), que proporcionan a las métricas las unidades correctas. En ambos casos, la definición de la métrica proporciona un Perf-O-Meter y las leyendas de los gráficos muestran entonces grados Celsius y humedad relativa en porcentaje.

Las definiciones de métricas más importantes se pueden encontrar en ~/lib/python3/cmk/plugins/collection/graphing (GitHub), otras en ~/lib/python3/cmk/plugins/*/graphing (GitHub) y las unidades utilizadas en ~/lib/python3/cmk/gui/plugins/metrics/unit.py (GitHub). A menudo merece la pena buscar definiciones de métricas con concordancia exacta, ya que Checkmk también ofrece gráficos combinados para métricas relacionadas.

Definición de métricas ad hoc

En los primeros ejemplos mostrados en este artículo para las métricas, usamos nombres como myvalue, count o metricname. Sin una definición de métrica adecuada, a estos se les asigna una letra mayúscula inicial en la leyenda del gráfico y los guiones bajos se sustituyen por espacios. Así, outgoing_queue_size se convierte en el fácilmente legible Outgoing queue size. Dado que un contador puro no requiere una unidad, el identificador seleccionado de forma sensata ya cumple su propósito aquí sin necesidad de una definición métrica adicional. Si realmente se requieren unidades, es posible que tengas que incluirlas en el nombre.

El problema surge si el intento de definir una métrica ad hoc tiene inadvertidamente el efecto explicado en la sección anterior y asigna una definición de métrica ya existente. La confusión puede ser máxima especialmente cuando hay coincidencia entre las unidades; por ejemplo, una métrica proporcionada utiliza una escala porcentual con números de coma flotante entre 0 y 100 %, pero el rango de valores de tu local check proporciona un número sin límite como número de coma fija. O tienes una cola de solicitudes actuales (Current requests queue), a la que simplemente quieres llamar «current»: el resultado sería la asignación de la definición de métrica para la intensidad de corriente.

Por lo tanto, «current_requests_queue» sería una opción mucho mejor en este caso. Puedes estar completamente seguro con un prefijo adicional, por ejemplo: «mycompany_current_requests_queue».

Escribir tus propias definiciones de métricas

Si tienes requisitos especiales, por ejemplo, si necesitas gráficos con una leyenda y un Perf-O-Meter, necesitarás tus propias definiciones de métricas. Lee el capítulo sobre métricas en el artículo sobre la programación de check plugins basados en agentes

3.3. Múltiples métricas

También puedes generar múltiples métricas. En las definiciones, estas se separan con el carácter «barra vertical» (|), por ejemplo, así:

count1=42|count2=23

En hosts Windows, debes anteponer a estas barras verticales en el script un acento circunflejo (^) para que estas barras también aparezcan en la salida:

mylocalcheck.bat
@echo off
echo 0 "My 2nd service" count1=42^|count2=23 A service with 2 graphs

Una salida completa con dos métricas tendrá entonces un aspecto similar a este:

root@linux# /usr/lib/check_mk_agent/local/mylocalcheck
0 "My 2nd service" count1=42|count2=23 A service with 2 graphs
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Una vez que también hayas añadido el nuevo servicio a la monitorización, en la lista de servicios verás el texto con los detalles del estado en el campo «Summary». Al hacer clic en el servicio, se mostrará la página con sus detalles. Las métricas se muestran en el campo «Details», y debajo verás los gráficos del servicio que Checkmk genera automáticamente:

The service details with the two graphs.
Tip

Este ejemplo utiliza una evaluación en el host (0, 1 o 2) en lugar de un cálculo dinámico (P). Cualquier valor umbral adicional superado se ignoraría aquí en el gráfico.

3.4. Cálculo dinámico del estado

En las secciones anteriores, has aprendido a proporcionar valores para las métricas y a utilizarlos para generar gráficos. El siguiente paso lógico es ahora utilizar los valores de umbral pasados adicionalmente para un cálculo dinámico del estado del servicio. Esto es exactamente lo que permite Checkmk para que la preparación de los datos recibidos sea coherente con muchos de los estados generados a través de los Plugins.

Si en el primer campo de la salida, que determina el estado, pasas la letra P en lugar de un número, el estado del servicio se calculará basándose en los valores umbral que se hayan pasado. Además del valor real, los valores umbral transferidos se muestran entonces también como una línea amarilla y roja en el gráfico.

Tip

Este cálculo dinámico no significa que se puedan modificar los valores umbral a través de las reglas de monitorización definidas en Checkmk. Para el cálculo real siempre se utilizan los valores umbral proporcionados en la local check.

El resultado sería entonces el siguiente:

root@linux# /usr/lib/check_mk_agent/local/mylocalcheck
P "My 1st dynamic service" count=40;30;50 Result is computed from two threshold values
P "My 2nd dynamic service" - Result is computed with no values
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

… y la visualización en una vista de servicio como esta:

“The service list with two dynamically calculated services.”

Esta visualización difiere de la anterior en dos aspectos:

  • Para los servicios en estado «WARN» o «CRIT», la vista «Summary» del servicio muestra toda la información importante de las métricas (nombre, valor, umbrales). Esto significa que siempre puedes ver cómo se calculó este estado a partir de un valor. Para todos los demás estados, la información de las métricas solo se muestra en el campo «Details».

  • Si no se transfieren métricas, el estado del servicio siempre será «OK».

Alternar entre la evaluación de estado dinámica y estática

Puede ser útil alternar entre la evaluación dinámica y estática del estado en el script que realiza la local check. Como ejemplo, tomemos un script de copia de seguridad que escribe un archivo spool en el formato de una local check. La evaluación del estado según la duración de la copia de seguridad debería ser dinámica, por lo que el script debería escribir un «P»:

P "Backup stuff" duration=2342;1800;3600 Successfully created the backup. Good luck restoring.

Sin embargo, si la copia de seguridad falla al poco tiempo, el estado viene determinado por el valor de retorno del script de copia de seguridad y no por los valores umbral. En este caso, el script debe establecer el estado de forma estática con un número:

2 "Backup stuff" duration=123;1800;3600 Backup failed. Nuff said.

En este caso, simplemente tiene sentido que no se muestren valores umbral en el gráfico, ya que no se trata de la duración requerida hasta la copia de seguridad (fallida), sino del hecho de que la copia de seguridad no se realizó correctamente.

3.5. Valores umbrais superiores e inferiores

Algunos parámetros no solo tienen umbrales superiores, sino también inferiores. Un ejemplo de esto es el registro de humedad. Para estos casos, la local check ofrece la opción de pasar dos valores umbral para cada uno de los estados «WARN» y «CRIT». Estos se separan con dos puntos y representan los valores umbral inferior y superior, respectivamente.

En la sintaxis general queda así:

metricname=value;warn_lower:warn_upper;crit_lower:crit_upper

… en el ejemplo como este:

root@linux# /usr/lib/check_mk_agent/local/mylocalcheck
P "My 3rd service" humidity=37;40:60;30:70 A service with lower and upper thresholds
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

… y en la visualización de una vista de tabla de servicio así:

A service with state evaluation from lower and upper threshold values.

Si solo te interesan los valores de umbral inferior, omite los campos de los valores de umbral superior:

root@linux# /usr/lib/check_mk_agent/local/mylocalcheck
P "My 4th dynamic service" count_lower=37;40:;30: A service with lower thresholds only
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Con esta salida, especificas que el servicio debe pasar a estar «WARN» si el valor es inferior a 40 y «CRIT» si es inferior a 30: por lo tanto, el servicio recibirá el estado «WARN» si el valor especificado es 37.

Tip

El sistema de métricas y gráficos de Checkmk se limita a los umbrales superiores por motivos de simplicidad. Esto significa que, aunque la determinación del estado de un servicio funciona como se espera, la información mostrada en el componente de métricas y gráficos ignora los umbrales inferiores. Por este motivo, elementos como las líneas amarillas y rojas en los gráficos, los Perf-O-Meters y los «Service performance data» no aparecen en la GUI de Checkmk cuando solo se utilizan umbrales inferiores.

3.6. Salidas de varias líneas

También está disponible la opción de distribuir una salida en varias líneas. Como Checkmk se ejecuta en Linux, puedes utilizar la secuencia de escape '\n' para forzar un salto de línea. Aunque debido al lenguaje de scripting sea necesario escapar la barra invertida, Checkmk la interpretará correctamente:

root@linux# /usr/lib/check_mk_agent/local/mylocalcheck
P "My service" humidity=37;40:60;30:70 My service output\nA line with details\nAnother line with details
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

En los detalles del servicio, estas líneas adicionales serán visibles bajo el Summary:

“The service details with a multi-line output.”

4. Ejecución asíncrona

Los resultados de las comprobaciones locales, al igual que los de los plugins de agente, se pueden almacenar en caché. Esto puede ser necesario si un script tarda más tiempo en procesarse. En ese caso, el script se ejecuta de forma asíncrona y solo en un intervalo de tiempo definido, y se almacena en caché el último resultado. Si se vuelve a consultar al agente antes de que expire el tiempo, este utiliza esta caché para la local check y la devuelve en la salida del agente.

Tip

La caché solo está disponible para AIX, FreeBSD, Linux, OpenWrt y Windows. En otras plataformas, usa cronjobs en combinación con el directorio spool.

4.1. Configuración de Linux

En Linux u otro sistema operativo tipo Unix, cualquier Plugin se puede ejecutar de forma asíncrona. Para una local check, la configuración necesaria es muy similar a la de un Plugin. Para ello, crea un subdirectorio con el nombre del número de segundos que quieres que se almacene la salida en la caché y coloca tu script en ese subdirectorio.

En el siguiente ejemplo, el local check se ejecutará solo cada 10 minutos (600 segundos):

root@linux# /usr/lib/check_mk_agent/local/600/mylocalcheck
2 "My cached service" count=4 Some output of a long running script
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Los datos almacenados en caché se escriben en un directorio de caché.

Para un servicio que proporciona datos almacenados en la caché, la información específica de la caché se añade a la vista del servicio:

“A service that outputs cached data.”

4.2. Configuración en Windows

En Windows, la configuración también es similar a la de un plugin de agente. En lugar de usar un subdirectorio especial como en Linux y similares, las opciones se configuran en un archivo de configuración:

C:\ProgramData\Checkmk\agente Checkmk\check_mk.user.yml
local:
    enabled: yes
    execution:
        - pattern     : $CUSTOM_LOCAL_PATH$\mylocalcheck.bat
          async       : yes
          run         : yes
          cache_age   : 600
Copiar el contenido del archivo al portapapeles
¡Contenido del archivo copiado correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

Como puedes ver arriba, en Windows puedes configurar la ejecución asíncrona (con async) y el intervalo de tiempo (con cache_age) por separado.

Como alternativa, en Windows también puedes realizar la configuración en Agent bakery.

5. Distribución a través de Agent bakery

CEE Si ya estás usando Agent bakery en las ediciones comerciales, también puedes distribuir los scripts con local checks a varios hosts de esta manera.

Para ello, primero crea el directorio custom en el servidor Checkmk como usuario del site en ~/local/share/check_mk/agents/ y, dentro de él, un árbol de subdirectorios para cada paquete de local checks:

OMD[mysite]:~$ cd ~/local/share/check_mk/agents
OMD[mysite]:~/local/share/check_mk/agents$ mkdir -p custom/mycustompackage/lib/local/
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

El directorio del paquete en el ejemplo anterior es mycustompackage. Debajo de ese, el directorio lib marca el script como un Plugin o como una local check. El directorio local que viene a continuación asigna el archivo de forma explícita. Coloca el script con la local check en este directorio.

Tip

En Linux, puedes configurar la ejecución asíncrona de forma análoga a lo descrito en el capítulo anterior creando ahora un directorio bajo custom/mycustompackage/lib/local/ con el número de segundos del intervalo de ejecución y colocando allí el script. En Windows, puedes utilizar los conjuntos de reglas Set execution mode for plug-ins and local checks y Set cache age for plug-ins and local checks. Estos y otros conjuntos de reglas para local checks en Windows se pueden encontrar en Agent bakery en Agent rules > Windows agent options.

En el entorno de configuración de Checkmk, aparecerá el directorio de paquetes mycustompackage como una nueva opción: Abre Setup > Agents > Windows, Linux, Solaris, AIX, crea una nueva regla con Agents > Agent rules > Generic agent options > Deploy custom files with agent y selecciona el paquete recién creado:

“Rule for storing the script files in a package directory.”

Checkmk integrará entonces de forma autónoma la local check correctamente en el paquete de instalación para el sistema operativo correspondiente. Una vez que se hayan activado los cambios y se haya actualizado el agente, la configuración estará completa. Ahora solo queda distribuir los agentes.

6. Análisis de errores

6.1. Probar el script

Si tienes problemas con un script que has escrito tú mismo, deberías check las siguientes posibles causas de error:

  • ¿Está el script en el directorio correcto?

  • ¿Es el script ejecutable y son correctos los permisos de acceso? Esto es especialmente relevante si no estás ejecutando el agente o el script con la cuenta root o LocalSystem.

  • ¿La salida cumple con la sintaxis indicada? La salida del local check debe ajustarse a la sintaxis descrita en los capítulos Creación del script y Métricas. De lo contrario, no se puede garantizar una ejecución sin errores.

    Pueden surgir problemas y errores, en particular, cuando una local check está destinada a realizar una tarea que requiere un check plugin completo, por ejemplo, cuando la salida de la propia local check contiene un título de la sección o la definición de un nombre del host tal y como se utiliza al transportar datos piggyback.

Tip

En Linux, cuando el script del agente o el plugin de agente se ejecutan directamente en un shell, pueden estar disponibles variables del entorno diferentes a las que hay cuando los ejecuta el Controlador de agentes de Checkmk. En Windows, el Controlador de agentes también se ejecuta bajo la cuenta LocalSystem, pero la llamada en el terminal se realiza bajo un usuario normal o un administrador. Además del entorno diferente, esto puede significar que falten permisos. Para poder analizar la salida del script del agente de la forma más parecida posible a las condiciones en las que se invoca el agente Checkmk, debes usar el Controlador de agentes en modo de volcado si es posible.

6.2. Probar la salida del agente en el host de destino

Si el script en sí es correcto, el agente se puede ejecutar en el host. En sistemas operativos tipo Unix, como Linux, BSD, etc., está disponible el comando siguiente. Con la opción `-A` se puede especificar el número de líneas adicionales que se mostrarán tras un acierto. Este número se puede personalizar para que se ajuste al número de líneas de salida esperadas:

root@linux# cmk-agent-ctl dump | grep -v grep | grep -A2 "<<<local"
<<<local:sep(0)>>>
P "My service" humidity=37;40:60;30:70 My service output\nA line with details\nAnother line with details
cached(1618580356,600) 2 "My cached service" count=4 Some output of a long running script
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

En la última línea, puedes reconocer un servicio almacenado en caché por la información de «cached» que lo precede, con la hora Unix actual y el intervalo de ejecución en segundos.

En Windows, puedes conseguir un resultado muy similar con PowerShell y la Cmdlet Select-String, igual que con el comando grep en Linux. En el siguiente comando, los dos dígitos que siguen al parámetro Context determinan cuántas líneas se mostrarán antes y después del resultado:

PS C:\Program Files (x86)\checkmk\service> ./cmk-agent-ctl.exe dump | Select-String -Pattern "<<<local" -Context 0,3
<<<local:sep(0)>>>
0 "My 1st service" - This static service is always OK

cached(1618580520,600) 1 "My cached service on Windows" count=4 Some output of a long running script
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!
Tip

Dependiendo del entorno, el lenguaje de programación utilizado, la versión de Windows y algunas otras condiciones, a menudo te enfrentas al juego de caracteres UTF-16 en Windows. Además, allí se encuentra con frecuencia la combinación de retorno de carro y salto de línea para los saltos de línea. Sin embargo, Checkmk, como aplicación de Linux, espera UTF-8 y simples saltos de línea sin peros. Nuestro artículo sobre el directorio spool incluye un capítulo que explica cómo solucionar problemas relacionados con el juego de caracteres.

6.3. Probar la salida del agente en el servidor Checkmk

Como último paso, el procesamiento de la salida del script también se puede probar en el servidor Checkmk con el comando «cmk» —una vez para el descubrimiento de servicios:

OMD[mysite]:~$ cmk -IIv --detect-plugins=local mycmkserver
Discovering services and host labels on: mycmkserver
mycmkserver:
...
+ EXECUTING DISCOVERY PLUGINS (1)
  2 local
SUCCESS - Found 2 services, no host labels
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

… y también el proceso de la salida del servicio con un comando similar:

OMD[mysite]:~$ cmk -nv --detect-plugins=local mycmkserver
+ FETCHING DATA
Get piggybacked data
My cached service    Some output of a long running script(!!), Cache generated 6 minutes 30 seconds ago, cache interval: 10 minutes 0 seconds, elapsed cache lifespan: 68.71%
My service           My service output, Humidity: 37.00 (warn/crit below 40.00/30.00)(!)
[agent] Success, [piggyback] Success (but no data found for this host), execution time 3.3 sec ...
Copiar comando(s) al portapapeles
¡Comandos copiados correctamente al portapapeles!
¡Se ha denegado el acceso de escritura al portapapeles!

En ambos comandos hemos acortado la salida omitiendo las líneas que no son relevantes para este tema.

Como alternativa, puedes abrir la lista de servicios del host en la monitorización, ir a la sección «Check_MK» y a su columna «Icons». Allí puedes seleccionar la opción de menú «Download agent output» para obtener un archivo de texto con la salida completa del agente.

Si hay errores en una local check, Checkmk los identificará en la salida del servicio. Esto se aplica también a métricas erróneas, a información falsa o incompleta en la salida del script, o a un estado inválido. Estos mensajes de error deberían ayudarte a identificar rápidamente los errores en un script.

7. Archivos y directorios

Todas las rutas especificadas hacen referencia a paquetes de instalación que se han empaquetado con configuraciones estándar. Si has instalado un script del agente sin empaquetar o has adaptado los directorios de instalación mediante una regla de Bakery, busca las rutas en el propio script o adapta las rutas a tu propia configuración.

7.1. Directorio de scripts en el host de destino

Almacenas las local checks en estos directorios. Las local checks pueden ser cualquier archivo ejecutable.

Ruta Sistema operativo

/usr/lib/check_mk_agent/local/

AIX, Linux y Solaris

%ProgramData%\checkmk\agent\local

Windows

7.2. Directorio caché en el host de destino

Los datos almacenados en la caché de secciones individuales, incluida la sección «local», se guardan aquí y se vuelven a adjuntar al agente con cada ejecución, siempre y cuando los datos sean válidos.

Ruta Sistema operativo

/var/lib/check_mk_agent/cache/

AIX, Linux y Solaris


Last modified: Mon, 15 Dec 2025 20:51:39 GMT via commit f8bbb2e26
En esta página