Nunca había visto Checkmk antes y hoy ha tocado jugar un poco con él. La documentación está algo desactualizada, ya que esta muestra los pasos para la versión 1.6 en algunos artículos (entre ellos el de Azure), pero la última es la 2.0 y es la que me gustaría probar. Es por ello que hoy quiero contarte cómo integrar esta herramienta de monitorización Open Source con Microsoft Azure en su última versión.
Instalación de Checkmk de prueba en Docker
Para hacer mis pruebas he usado un contenedor de Docker que contiene la versión de Checkmk Raw:
docker container run --name checkmk \
-p 8080:5000 \
--tmpfs /opt/omd/sites/cmk/tmp:uid=1000,gid=1000 -v/omd/sites \
-v/etc/localtime:/etc/localtime:ro \
--restart always checkmk/check-mk-raw:2.0.0-latest
El usuario es cmkadmin y la constraseña la verás en los logs del contenedor. En este caso, para acceder a la interfaz, una vez arracando el contenedor, podrás hacerlo usando http://localhost:8080
Configurar un Azure Service Principal
Ahora que ya tenemos un Checkmk para hacer nuestras pruebas, lo siguiente que necesito es un service principal que le dé acceso mis recursos. Para ello puedes utilizar el siguiente comando para generar uno, y que almacene el resultado en un archivo llamado auth.json:
#Create an Azure Service Principal
az ad sp create-for-rbac --name checkmk-demo --skip-assignment > auth.json
Una vez que lo tengas debes asignar este con el rol de Reader en tu suscripción:
#Add the service principal as a Reader in the subscription
az role assignment create --role Reader --assignee $(jq -r '.appId' auth.json) --scope /subscriptions/$(az account show --query id -o tsv)
Nota: para ejecutar estos comandos he utilizado la herramienta JQ.
Configurar la monitorización en Checkmk
Ahora que ya tenemos todo lo necesario, vamos a configurar la monitorización para un grupo de recursos en esta herramienta. Lo primero que debes hacer es configurar un host, aunque Azure no tenga uno como tal. Para ello, debes ir en el menú izquierdo a Setup > Hosts.
Y una vez allí seleccionar la opción Add host to the monitoring:

Aquí debes poner un nombre «virtual» a tu host, ya que en este caso va a representar a un grupo de recursos, que es lo recomendado por Checkmk. En este caso lo voy a llamar Tour-Of-Heroes y en la sección Network address, haz clic en la opción que pone show more, que tienes en el lado derecho. Gracias a ello podrás ver el combo llamado IP address family y selecciona No IP (esto me ha costado horas encontrarlo 😖, respecto a la versión 1.6). Haz clic en Save & go to the service configuration.

Ahora que ya tienes un host al que asociar el agente, accede de nuevo al apartado de Setup pero esta vez haz clic sobre Agents > VM, Cloud, Container.
Y selecciona Microsoft Azure:

haz clic en Create rule in folder: Main directory y añade los siguientes valores:

En esta ventana tienes que añadir el id de tu suscripción y el resto de valores que deberías de tener en el archivo auth.json generado cuando creaste el service principal. También especifica que solo quieres la configuración para tu grupo de recursos, en mi caso es el llamado Tour-Of-Heroes, y le asigna esta configuración al host con el mismo nombre en la parte inferior. Cuando termines haz clic en guardar y aplica los cambios en el apartado superior derecho donde debería de poner 2 changes.

Haz clic en el botón Activate on selected sites para aplicar los cambios.

Y una vez que finalice aparecerá un host activo.

Al hacer clic en él verás que ya está funcionando pero falta confirmar de los servicios descubiertos cuales quieres monitorizar.

Si haces clic sobre este verás el aviso con todos los servicios que ha encontrado pero que no se están monitorizando.

Accede de nuevo al host, a través del apartado Setup, selecciona la opción Edit the services of this host, do a service discovery:
Y para este ejemplo haz clic en Fix All:

Si has seguido todos los pasos, ahora tu «host» debería de mostrar el estado de los servicios descubiertos:
y si haces clic en él verás el detalle de los servicios que está recuperando:

A día de hoy, los servicios para los que hay integración son pocos (SQL Database, Storage Account, Virtual Machine y Web Server, que sabe leer información de los App Services), pero podrías llegar a ampliarlo recuperando métricas con las API REST.
¡Saludos!