En este blog hablaremos sobre la detección automática de anomalías basada en un ítem específico, en este caso relacionado con un alto consumo de CPU tanto en nuestro servidor Zabbix como en un servidor Windows.
Realizar este tipo de configuraciones en tu infraestructura permite detectar rápidamente eventos específicos y ejecutar acciones en consecuencia.
Algunas de las ventajas son:
- Identificación proactiva de problemas;
- Reducción de falsas alarmas;
- Adaptación a comportamientos dinámicos;
- Análisis de tendencias y predicción.
Detectando anomalías en el consumo de CPU con Zabbix
Comenzamos analizando el consumo de CPU de nuestro servidor Zabbix, así como la anomalía. En esta gráfica podemos observar, durante 7 días, cómo ha sido el comportamiento del consumo de CPU. Cuando se presenta un consumo alto, se detecta una anomalía, lo que indica que durante ese periodo está ocurriendo algún evento, ya sea un proceso en ejecución o una tarea de mantenimiento.
Podemos crear un disparador, por ejemplo, para el ítem cuando su valor sea mayor o igual a 2, con el fin de conocer más sobre dicha elevación de consumo.
Para entender la detección, hacemos un cálculo sobre el consumo de nuestro CPU utilizando la condición baselinedev(/host/key,1h:now/h,"d",10)
, la cual calculará el número de veces que dicho intervalo difiere entre la hora anterior y la misma hora, durante un periodo de 7 días previos.
Identificación del consumo de CPU por usuario con PowerShell
¿Y si ahora nos encontramos en una infraestructura donde varios administradores acceden a un servidor para tareas de mantenimiento y se detecta un alto consumo de CPU? ¿Cómo podrías identificar este consumo elevado como una anomalía del servidor, detectar cuál usuario está ejecutando un proceso y reportarlo en el momento?
Este caso lo veremos en relación con un usuario específico.
Esto lo haremos con un script en PowerShell, para lo cual crearemos una carpeta y lo guardaremos en C:\Program Files\Script
. Debemos guardarlo como archivo .ps1
. Este script obtendrá el consumo de CPU del usuario en formato JSON.
Una vez instalado el agente en Windows, debemos detenerlo y modificar el archivo de configuración C:\Program Files\Zabbix Agent\zabbix_agentd.conf
, cambiando los parámetros Timeout y UserParameter.
En el parámetro UserParameter, colocamos custom.user.resource
, que hará referencia a nuestro script, seguido de la condición de ejecución y su ruta.
Una vez configurado esto, debemos verificar en nuestro servidor que esté habilitada la política adecuada en PowerShell:
-
Get-ExecutionPolicy
: Verifica la política de ejecución que debemos tener configurada; -
cmd /c "query user"
: Verifica el funcionamiento del comando query user.
El script, que no requiere permisos elevados, funciona en la mayoría de versiones modernas de Windows, aunque hay algunos aspectos para tener en cuenta:
- Versión de PowerShell: El script utiliza comandos que requieren PowerShell 3.0 o superior. La mayoría de los sistemas modernos tienen PowerShell 5.1 o posterior, pero en sistemas antiguos podrían existir versiones inferiores;
- Comando query user: Este comando es estándar en la mayoría de versiones de Windows, pero su salida exacta puede variar ligeramente entre versiones;
- Configuración de seguridad: En entornos con políticas de seguridad muy restrictivas, algunas operaciones como obtener información de procesos podrían estar bloqueadas incluso sin requerir permisos de administrador.
En resumen, el script debe operar correctamente en la mayoría de los sistemas Windows sin permisos elevados. Sin embargo, es recomendable realizar estas validaciones en sistemas críticos o antiguos para garantizar su funcionamiento adecuado.
Nos dirigimos a nuestro servidor Zabbix desde la consola y verificamos que está devolviendo el consumo de CPU utilizando zabbix_get con la IP que estamos monitoreando.
Tras la verificación, nos dirigimos a nuestro frontend de Zabbix y creamos un ítem, asignándole un nombre para recibir nuestro JSON del consumo de CPU del usuario y actualizamos la configuración.
Ahora creamos un ítem dependiente que llamará a nuestro primer ítem creado, lo identificamos como nuestro primer usuario y configuramos el porcentaje en el apartado de unidad.
En el apartado de Preprocessing agregamos una expresión regular, donde introducimos "CPU":\s*([\d.]+)
, que busca exactamente "CPU"
, \s*
permite espacios opcionales y ([\d.]+)
captura cualquier combinación de dígitos y puntos, lo que funciona para números decimales como 6.07. Finalmente, actualizamos la configuración.
Al combinar el uso de CPU con la anomalía, obtenemos la siguiente gráfica. Este script está basado en un usuario. Podemos observar que el usuario presenta picos que pueden ser normales.
Ampliar el monitoreo a los usuarios administrativos, por ejemplo, userone, usertwo y usertree, y así poder detectar qué usuario administrativo realizó una ejecución que elevó un proceso a nivel de CPU.
A continuación, se muestra un ejemplo de cómo sería el procedimiento si se realiza con varios usuarios.
Conclusión
La implementación de la detección automática de anomalías en Zabbix utilizando scripts personalizados en PowerShell es una estrategia eficiente para monitorear el uso de recursos y detectar eventos inusuales en tiempo real.
Adaptando correctamente la configuración del agente y validando la compatibilidad de los scripts, es posible optimizar la gestión y la reacción ante incidencias en distintos entornos Windows.
Se recomienda siempre validar previamente en sistemas críticos o antiguos para asegurar la fiabilidad del monitoreo.
Confía en los servicios de Zabbix para mejorar la visibilidad de tu infraestructura, acelerar la detección de anomalías y responder con mayor eficacia a cualquier incidencia. Haz clic aquí y conoce nuestros servicios para empresas.