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

Además de la monitorización convencional -es decir, la monitorización de los datos de estado, registro y medición-, Checkmk incluye otra función completamente distinta y prácticamente gratuita: el inventario de hardware/software (o inventario de HW/SW, para abreviar), que puede identificar automáticamente elementos de tus hosts, como, por ejemplo:

  • ¿Qué paquetes de software -y qué versiones de los mismos- están instalados en un servidor?

  • ¿Qué tipo de componentes de RAM tiene un servidor?

  • ¿Qué versión de BIOS está instalada en la placa base?

  • Los números de serie de los discos duros instalados.

  • Si hay puertos de un switch que no se utilizan desde hace tiempo (y que, por tanto, probablemente estén libres).

  • ... y mucho más

Los datos obtenidos de este modo se muestran por host en un árbol estructurado, y en varias otras vistas, y también están disponibles a través de una API. He aquí un pequeño ejemplo con los datos de la CPU:

Expanded inventory with CPU data.
Datos de la CPU en la ruta de inventario hardware.cpu

Con el Inventario de hardware/software puedes realizar diversas tareas, como:

  • Proporcionar datos sobre el software instalado para un sistema de gestión de licencias

  • Determinar designaciones de tipo para pedidos de piezas de repuesto (RAM, discos duros, ventiladores)

  • Proporcionar datos generales de hardware y software para su importación periódica a las CMDB, de modo que éstas se basen en datos actuales

  • Realizar un seguimiento de los cambios de hardware o software, por ejemplo, para determinar cuándo se realizó una actualización específica de la BIOS

  • Estar informado si algo ha cambiado en el hardware o el software

  • Identificar servidores a los que aún no se les ha instalado un paquete de servicio específico

La ventaja más importante sobre otros sistemas comparables es obvia: puedes utilizar simplemente la infraestructura existente de Checkmk y ahorrarte el esfuerzo de desplegar y administrar otro entorno de software. Sólo tienes que desplegar un único plugin de agente adicional. Esto ni siquiera es necesario con dispositivos SNMP, porque el escáner de inventario también admite SNMP y simplemente obtiene los datos por esta vía.

Y además, Checkmk no necesita esconderse detrás de otros escáneres de inventario. Al igual que con nuestros check plugins, trabajamos constantemente para ampliar el escaneo de datos. Cada versión de Checkmk aporta nuevos plugins para el escáner de inventario, y la información que se puede recopilar es cada vez más detallada y amplia.

2. Instalación

La instalación del Inventario de HW/SW se realiza en dos pasos. El requisito previo es que ya se haya instalado el agente Checkmk en los host (si éstos no están siendo monitorizados vía SNMP):

  1. Activa el inventario para los host deseados

  2. Despliega el plugin de agente de inventario en estos hosts

2.1. Activar el inventario para los host deseados

Crear la regla

Como siempre, si quieres configurar algo para hosts específicos, también es posible con la ayuda de una regla. Este conjunto de reglas se encuentra en Setup > Hosts > HW/SW inventory rules > Do hardware/software inventory.. Por supuesto, es aún más fácil utilizando la búsqueda de reglas con la palabra inventory. No confundas esto con el conjunto de reglas Hardware/Software-Inventory (Linux, Windows, Solaris, AIX), que es para el plugin de agente, como veremos más adelante.

En el conjunto de reglas Do hardware/software inventory, algunas reglas que se refieren a las etiquetas de host ya están activas por defecto. Si los hosts que quieres tienen esa etiqueta, el servicio para el inventario de HW/SW ya está configurado. Si no, tienes que crear una regla nueva.

Utiliza Add rule para crear una nueva regla para los host para los que quieras activar el inventario. Allí encontrarás varias opciones de configuración:

Dialog for inventory options.
Por defecto, todas las opciones están desactivadas y no son necesarias

Por ahora deja todo como está preestablecido. Las distintas opciones que verás aquí se comentan a continuación.

En la siguiente activación de cambios, la regla que acabas de crear generará, para cada host, un check activo que recogerá todos los datos de inventario de ese host, ya sea a partir de los datos que se reciben de un agente Checkmk normal, o a través de consultas SNMP adicionales. El nuevo servicio Check_MK HW/SW Inventory se puede encontrar en los hosts de la lista de servicios, y tendrá un aspecto parecido a éste:

Status display of a fresh inventory service.
Sin plugin de agente sólo se informará de algunas entradas por defecto

Por favor, no te preocupes porque el check sólo haya encontrado unos pocos items - esto se debe a que aún no hemos desplegado el Plugin.

Definir el intervalo

Los datos de inventario son algo que raramente cambia, y reconocer un cambio no suele ser crítico para el tiempo de todos modos. Por ello, tiene sentido utilizar un intervalo ajustado durante el cual se realiza la comprobación de inventario, en lugar de utilizar simplemente el intervalo habitual de un minuto, principalmente porque el proceso de los datos de inventario en la comprobación activa requiere un tiempo de computación significativamente mayor que el de un servicio normal.

Los sites Checkmk tienen de serie una regla en el conjunto de reglas Setup > Service monitoring rules > Service Checks > Normal check interval for service checks que fija el intervalo en un día para todos los servicios con el nombre Check_MK HW/SW Inventory:

The rule for setting the interval.
En la práctica, basta con un inventario diario, pero para las pruebas son adecuados periodos más cortos.

Por supuesto, si te parece insuficiente una vez al día, también puedes personalizar esta regla, por ejemplo, a cuatro u ocho horas. Naturalmente, también existe siempre la opción de configurarla de forma diferente utilizando varias reglas para distintos host.

2.2. Desplegar el plugin de agente de inventario en estos hosts

El paso más importante es instalar el plugin de agente para el inventario en los host correspondientes. Puedes hacerlo manualmente o con el Agent bakery (sólo ediciones comerciales).

Instalación manual

Para realizar una instalación manual, primero necesitas el Plugin. Lo encontrarás en las ediciones comerciales a través de la página Setup > Agents > Windows, Linux, Solaris, AIX > Related, y en Checkmk edición Raw directamente en Setup > Agents.. En todas las ediciones, encontrarás entradas de menú para los distintos sistemas operativos. Dependiendo del sistema operativo, utiliza el siguiente Plugin en la caja Plugins:

Sistema operativo Plugin

Windows

mk_inventory.vbs

Linux

mk_inventory.linux

AIX

mk_inventory.aix

Solaris

mk_inventory.solaris

También puedes encontrar estos archivos en la línea de comandos del site de Checkmk, en el subdirectorioshare/check_mk/agents/plugins (Linux/Unix), o en share/check_mk/agents/windows/plugins (Windows).

Copia el Plugin en los host de destino en el directorio correcto para plugins. Para el agente de Windows es C:\ProgramData\checkmk\agent\plugins. Para más detalles, consulta el artículo sobre el agente de Windows.

Para Linux y Unix, el directorio es /usr/lib/check_mk_agent/plugins. Asegúrate de que el archivo es ejecutable (chmod +x). Para más detalles, consulta los artículos sobre el agente de Linux.

Lo importante es que el agente sea llamado por Checkmk, normalmente una vez por minuto. El plugin de agente de inventario, sin embargo, requiere más tiempo de proceso que los plugins normales porque, por ejemplo, debe buscar el software instalado en muchos directorios. También genera cantidades de datos significativamente mayores. Por eso se ha diseñado para que sólo genere y entregue nuevos datos cada cuatro horas (14400 segundos).

Por tanto, si por alguna razón importante has especificado un intervalo inferior a cuatro horas para tu check de inventario, en realidad sólo obtendrás nuevos datos cada cuatro horas. Si realmente quieres recopilar más datos, en tal caso tendrás que modificar el intervalo de cálculo por defecto.

Para Windows, sustituye el número directamente en el archivo Plugin. Busca el número 14400 y sustitúyelo por otro número de segundos. La ubicación donde se encuentra tiene el siguiente aspecto (detalle):

mk_inventario.vbs
Dim delay
Dim exePaths
Dim regPaths

'These three lines are set in the agent bakery
delay = 14400
exePaths = Array("")
regPaths =
Array("Software\Microsoft\Windows\CurrentVersion\Uninstall","Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall")

En Linux y Unix esto funciona un poco diferente. Para ello crea un archivo de configuración /etc/check_mk/mk_inventory.cfg con la siguiente línea (aquí en el ejemplo con 7200 segundos):

/etc/check_mk/mk_inventory.cfg
INVENTORY_INTERVAL=7200

Una nota más: el propio plugin de agente de inventario dicta que sólo se ejecute cada cuatro horas. Por tanto, no utilices el mecanismo del agente para ejecutar asíncronamente plugins a intervalos más largos. Instala el Plugin de la forma sencilla y habitual para su ejecución directa.

Configuración mediante el Agent bakery

Por supuesto, si utilizas la Agent bakery en las ediciones comerciales para configurar tus agentes, las cosas son mucho más sencillas. Sólo hay un conjunto de reglas llamado Hardware/Software-Inventory (Linux, Windows, Solaris, AIX), independiente del sistema operativo. Este conjunto de reglas controla el despliegue del Plugin necesario, así como su configuración. Se encuentra en Setup > Agents > Windows, Linux, Solaris, AIX > Agents > Agent rules:

Input mask with options for the inventory agent plug-in.
Puedes incluir programas portátiles directamente a través de directorios

Para Windows, además del intervalo también puedes especificar las rutas en las que buscar los archivos ejecutables .EXE a la hora de encontrar el software instalado en el sistema. También puedes configurar las rutas en el registro de Windows, que debe tenerse en cuenta como indicador del software instalado.

2.3. Probando

Si has desplegado el Plugin correctamente, deberías encontrar bastantes más registros la próxima vez que ejecutes el check de inventario del host. El resultado tendrá entonces este aspecto:

Status display of an inventory service with a running agent plug-in.
Encontrarás tan pocas entradas sólo en los sistemas recién configurados

3. Trabajar con los datos del inventario

Los datos del inventario están disponibles, por supuesto, para cada host individual, en parte como árbol y en parte como representación de tabla. A continuación se muestra cómo funcionan exactamente y cómo puedes acceder a ellos. Sin embargo, también hay vistas, especialmente búsquedas, que afectan a todo tu entorno de host. Puedes acceder a ellas a través de la entrada Inventory del menú Monitor:

Inventory entries in the Monitor menu.
Vistas globales de los datos del inventario

3.1. Visualización estructurada en árbol

Los datos del inventario de hosts se muestran, por un lado, en una visualización estructurada en árbol por host y, por otro, en forma de tabla. Puedes abrir el diagrama de árbol, por ejemplo, en una vista de host mediante el elemento de menú Host > Inventory > Inventory of host.

Alternativamente, en las vistas de lista de hosts, puedes invocar el menú de un host y a su vez invocar el inventario desde él:

Context menu for viewing the inventory of a host.
Acceso al inventario desde una lista de hosts

En ambos casos acabas con la vista de tabla de los datos de inventario del host. Partiendo de las tres categorías básicas Hardware, Networking y Software, puedes expandir y contraer las sub-ramas del árbol:

Expanded inventory with CPU information.
Una parte muy pequeña del árbol de inventario

En la imagen anterior puedes ver detrás de las entradas individuales las rutas de inventario entre paréntesis, que puedes visualizar utilizando Display > Modify display options y la opción Show internal tree paths:

Option for displaying inventory paths.

Entonces verás las designaciones internas del inventario, así por ejemplo la ruta interna de la sección Processor se llama hardware.cpu. Las designaciones del modelo y arquitectura de la CPU -model y arch- se encuentran más abajo en los datos de la CPU.

Puedes utilizar estas designaciones internas para habilitar sólo rutas individuales para los grupos de contacto. Los usuarios de un grupo de contacto al que sólo se le hayan asignado las entradas hardware.cpu, modelo y arco mostradas anteriormente, verán entonces sólo un inventario recortado:

Inventory with selected records.

3.2. Visualizaciones tabulares

Muchos de los datos del inventario son valores individuales bajo rutas muy específicas en el árbol, por ejemplo, la entrada Hardware > System > Manufacturer > Apple Inc.. Pero también hay lugares en el árbol con tablas de objetos similares. Una muy importante es, por ejemplo, la tabla Software > Packages:

Software packages in the inventory tree.
La lista de paquetes es muy detallada y está muy recortada aquí en la imagen

Lo especial de esta parte de los datos del inventario es que puedes llamar a los paquetes en una vista separada a través de Host > Inventory > Software packages. Allí encontrarás filtros específicos para buscar en los paquetes (muy recortados en la imagen):

Filter list for software packages.
El filtro para el nombre del host ya está precargado

También puedes buscar en paquetes de software en varios host. La vista correspondiente se encuentra en el menú Monitorización, en Monitor > Inventory > Search Software packages, o en el snap-in Views de la barra lateral, en Inventory.. Allí también aparecen otras vistas de tabla para el inventario, incluidas otras búsquedas, por ejemplo, de datos específicos de Oracle.

Ten en cuenta que muchos filtros generales para los host no están disponibles por defecto en las vistas, sino que se obtienen cuando editas la vista y añades filtros de host adicionales.

Otras cosas que puedes hacer con las vistas

Por cierto, también puedes incluir esos datos de inventario en vistas que no sean de tipo tabla. Hay un tipo de columna para cada ruta de inventario conocida en el árbol de inventario, que puedes añadir a las vistas de hosts. Un ejemplo de ello es la vista de ejemplo predefinida CPU inventory of all hosts. Se trata de una tabla de hosts que muestra datos adicionales del inventario por host. Aquí tienes un ejemplo de una de las definiciones de columna que añade una columna a la tabla del número de CPU físicas del host:

Dialog for including columns with inventory data in views.
Los datos del inventario están disponibles en todas las vistas

4. Historial de datos de inventario

Una vez que hayas configurado el inventario de HW/SW para un host, Checkmk registrará todos los cambios en los datos del inventario y también almacenará su historial. Puedes encontrarlos en las vistas con datos de inventario a través de Host > Inventory > Inventory history of host.

Aquí tienes un extracto de un historial. En la tabla puedes ver algunos datos de IP que han cambiado desde el último check:

History of entries in the inventory.
Los cambios en el inventario son visibles inmediatamente en el historial

Si lo deseas, puedes ser informado cada vez que se produzca un cambio en el software o el hardware. Esto se hace a través del estado del servicio Check_MK HW/SW Inventory. Para ello, edita la regla que creaste al principio de este artículo (en el conjunto de reglas Do hardware/software inventory ). Allí, para el valor de la regla encontrarás una serie de ajustes que afectan al historial. El siguiente ejemplo configura el servicio WARN si se producen cambios en el software o el hardware:

Dialog for state change of the inventory check.
Una buena forma de darse cuenta de la TI en la sombra en las estaciones de trabajo

La próxima vez que el check de inventario detecte cambios, pasará a WARN. Entonces tendrá el siguiente aspecto:

Inventory check with warning about detected changes.
Advertencias en la lista de servicios de un solo host

En la siguiente ejecución del check, y si mientras tanto no ha cambiado nada, se restablece automáticamente a OK. Activando manualmente la ejecución también tienes una forma de restablecer manualmente el servicio a OK si no quieres esperar a la siguiente ejecución periódica normal.

5. Datos de estado

El árbol de datos de inventario puede actualizarse automáticamente con los últimos datos de estado adecuados. Esto es muy útil en algunos casos. Un ejemplo de ello son los tablespaces de Oracle.Los datos de inventario actuales sólo contienen información relativamente estática, como el SID, el nombre y el tipo. Los datos de estado actuales pueden complementar esto con información sobre el tamaño actual, el espacio libre, etc.

Si quieres ver datos de estado en tu árbol (y no hay nada malo en ello), sólo tienes que activar la opción correspondiente en la regla que creaste al principio en Do hardware/software inventory:

Dialog for activating the status data.
Los datos de estado amplían la monitorización, en algunos casos considerablemente

Por cierto, ¡un cambio en los datos de estado no precipitará cambios en el historial! Esto casi siempre provocaría cambios constantes y haría inútil esta función. Losdatos de estado no se almacenan en archivos, sino que, al igual que los resultados de las comprobaciones, se guardan directamente en la memoria principal del núcleo de monitorización.

6. Acceso externo a los datos

6.1. Acceso a través de la propia web API

Puedes exportar los datos del inventario de HW/SW de un host a través de la web API propia del inventario.

Nota: La API web propia del inventario que se menciona aquí no es la API web que se eliminó de Checkmk en la versión 2.2.0.

Su URL es:

http://myserver/mysite/check_mk/host_inv_api.py?host=myhost

El formato de salida en este caso es el código fuente de Python. Si prefieres JSON, añade un &output_format=json a la URL:

http://myserver/mysite/check_mk/host_inv_api.py?host=myhost&output_format=json

El resultado se parece a esto de forma abreviada:

mihost.json
result:
    Attributes: {}
    Nodes:
        hardware:
            Attributes: {}
            Nodes:
                memory:
                    Attributes:
                        Pairs:
                            total_ram_usable: 16495783936
                            total_swap: 1027600384
                            total_vmalloc: 35184372087808
                        Nodes: {}
                        Table: {}
                Table: {}
 ... usw. ...
result_code: 0

Del mismo modo, también puedes solicitar la salida en XML:

http://myserver/mysite/check_mk/host_inv_api.py?host=myhost&output_format=xml.

Si introduces la URL correspondiente en la barra de direcciones de tu navegador, verás inmediatamente un resultado, puesto que ya has iniciado sesión en Checkmk. Los datos del inventario de HW/SW se encuentran en el archivo de salida, en la sección posterior a la clave de resultado. Desde un script, es mejor autentificarse como usuario de automatización.

En caso de error, por ejemplo, si no se encuentra el host especificado, el código de resultado se establece en 1 y se imprime un mensaje de error apropiado:

{"result": "Found no inventory data for this host.", "result_code": 1}

Consulta de varios host

También puedes consultar los datos del inventario de HW/SW de varios hosts en una sola salida. Para ello, amplía la consulta a todos los hosts necesarios:

http://myserver/mysite/check_mk/host_inv_api.py?request={"hosts":["myhost","myhost2"]}&output_format=json

El resultado de esta consulta será casi idéntico al de la salida anterior. Sin embargo, en el nivel superior, se utilizan los nombres del host como claves. La información de los hosts sigue a continuación en los árboles de directorios:

result:
    myhost:
        Attributes: {}
        Nodes:
            hardware:
                Attributes: {}
                Nodes:
                    memory:
                        Attributes:
                            Pairs:
                                total_ram_usable: 16495783936
                                total_swap: 1027600384
                                total_vmalloc: 35184372087808
                            Nodes: {}
                            Table: {}
                    Table:
            networking:
                Attributes:
                    Pairs:
                        available_ethernet_ports: 1
                        hostname: "MyServer"
                        total_ethernet_ports: 3
                        total_interfaces: 4
... etc. ...
    myhost2:
        Attributes: {}
        Nodes: {}
        Table: {}
result_code: 0

Si no se encuentran datos de inventario para un host, ese host tendrá una entrada de inventario vacía en lugar del mensaje de error.

Restringir la consulta a datos concretos

Puede que no quieras consultar todos los datos del inventario, sino sólo buscar información específica. En ese caso, especifica las llamadas rutas de inventario para buscar la información que deseas. Entonces sólo recibirás información de los host que tengan esas rutas / información.

Por ejemplo, para ver sólo la información sobre el almacenamiento total y el espacio de intercambio del host myhost, utiliza esta URL:

http://myserver/mysite/check_mk/host_inv_api.py?host=myhost&request={"paths":[".hardware.memory.total_ram_usable",".hardware.memory.total_swap"]}&output_format=json

Recibirás de vuelta la información solicitada:

result:
    Attributes: {}
    Nodes:
        hardware:
            Attributes: {}
            Nodes:
                memory:
                    Attributes:
                        Pairs:
                            total_ram_usable: 16495783936
                            total_swap: 1027600384
                        Nodes: {}
                        Table: {}
                Table: {}
        Table: {}
result_code: 0

6.2. Acceso a través de un archivo

Alternativamente, puedes leer simplemente los archivos que genera el propio Checkmk. Éstos están en formato Python en el directorio ~/var/check_mk/inventory. Para cada host hay un archivo sin comprimir (por ejemplo, myhost) y otro en una variante comprimida (por ejemplo, myhost.gz).

7. Inventario en entornos distribuidos

En las ediciones comerciales, el Inventario de HW/SW también funciona en entornos distribuidos. Aquí los datos del inventario son determinados primero por los sitios locales y almacenados localmente en ~/var/check_mk/inventory.

El daemon proxy Livestatus transferirá periódicamente todos los datos de inventario actualizados del site remoto al site central, y también los almacenará en ~/var/check_mk/inventory. Esto es importante porque estos datos son demasiado grandes para recogerlos en vivo cuando se consultan en este momento.

En cuanto el site central realiza consultas sobre los datos de inventario, estos archivos se leen y luego se agrupan con los datos de estado actuales, que luego se recuperan de los sites remotos a través de Livestatus.

En resumen: no tienes que preocuparte de nada.

No hay proxy Livestatus en Checkmk Raw, por lo que el inventario de HW/SW está incompleto en la GUI del sitio central y sólo muestra los datos de estado. Puedes ayudarte transfiriendo regularmente los archivos del directorio ~/var/check_mk/inventory al sitio central con un script o similar. Basta con copiar los archivos sin la extensión de archivo .gz. Para una transmisión de datos eficaz es adecuado rsync, por ejemplo.

8. Archivos y directorios

8.1. Directorios en el servidor Checkmk

Ruta Descripción

~/share/check_mk/agents/plugins/

Plugins de agente para Linux y Unix

~/share/check_mk/agents/windows/plugins/

Plugin de agente para Windows

~/var/check_mk/inventory/

Datos de inventario de hosts individuales como archivos Python (comprimidos y sin comprimir)

8.2. Directorios en los host monitorizados

Ruta Descripción

C:\ProgramData\checkmk\agent\plugins\

Ubicación de almacenamiento para el Plugin de inventario del agente de Windows

/usr/lib/check_mk_agent/plugins/

Ubicación de almacenamiento del Plugin de inventario para el agente Linux/Unix

/etc/check_mk/mk_inventory.cfg

Configuración del Plugin de inventario para el agente Linux/Unix

En esta página