
¿Monitorizas lo que únicamente debe funcionar cuando todo lo demás falla?
agosto 26, 2020
Monitorización de Jobs en MSSQL con Zabbix
En entornos que dependen de Microsoft SQL Server, la correcta ejecución de tareas automatizadas —conocidas como jobs— es fundamental. En este artículo te explicamos qué son los jobs en MSSQL, por qué deberías monitorizarlos, y cómo hacerlo de forma eficaz utilizando Zabbix.
¿Qué son los jobs en MSSQL? 🤔
En Microsoft SQL Server, los jobs (o trabajos) son tareas automatizadas que se ejecutan de forma programada o bajo demanda. Se configuran desde SQL Server Agent y permiten ejecutar una o varias acciones en un horario de determinado o en respuesta a ciertos eventos, como:
- Mantenimiento de bases de datos: backups, mantenimiento de índices, chequeos de integridad, limpieza de logs antiguos.
- Integración de datos: procesos ETL (Extraer, Transformar, Cargar) para cargar datos de fuentes externas, transformar datos y transferirlos entre distintas bases de datos.
- Reportes: generar informes, agregar datos y distribuirlos.
- Tareas administrativas: ejecutar scripts, gestionar objetos de la base de datos y monitorizar la salud del servidor.
¿Por qué es importante monitorizar los jobs? 👁️
Debido a sus ventajas y utilidades, es normal que se termine usando mucho esta funcionalidad, en algunos casos demasiado, siendo usada para “parchear” problemas introducidos por las aplicaciones que corren sobre el SQL Server. También vemos muchas veces jobs que quedan configurados, aunque ya no sean útiles pero que nadie se atreve a borrar. Una buena monitorización (o monitoreo) e inventario de los jobs es importante, ya que suelen ser tareas con un impacto significativo en la base de datos.
Los jobs son, por tanto, una parte crítica de la infraestructura de base de datos. Cuando fallan o no se ejecutan a tiempo, pueden producirse consecuencias graves:
- Pérdida de backups recientes.
- Desactualización de datos en procesos ETL.
- Retención innecesaria de logs o datos antiguos.
- Interrupciones en procesos dependientes.
Monitorizar los jobs permite detectar fallos rápidamente, entender su frecuencia de ejecución y anticiparse a problemas recurrentes.
¿Cómo monitorizar jobs de MSSQL con Zabbix? 🔧
Las plantillas por defecto de Zabbix incluyen la monitorización de jobs, por lo que podemos empezar por ahí. Si hemos instalado desde una versión 5 en adelante nos vendrá ya preinstalada en el sistema, si no, podremos descargarla de forma sencilla de la web oficial de Zabbix.
Tendremos dos opciones:
- Monitorización a través del agente 2 de Zabbix: para esta opción deberemos tener instalada en nuestra máquina el agente 2. Este método no nos servirá si tenemos una base de datos como servicio en Azure o AWS, por ejemplo, pero si se trata de una máquina propia, en la nube u on-premise, seguramente tengamos ya el agente instalado para el monitoreo de las diferentes métricas del propio sistema operativo que, lógicamente ayudarán a correlacionar con los distintos eventos de la monitorización de la base de datos.
- Monitorización a través de ODBC: la opción más versátil, aunque implica hacer accesible el puerto de la base de datos al servidor o proxy de Zabbix que estemos usando, así como tener instalado FreeTDS y ODBC en el servidor o proxy.
Por ejemplo, en RedHat / CentOs / AlmaLinux / RockyLinux:
dnf install epel-release
dnf install unixODBC unixODBC-devel freetds
💡 Aquí os dejamos un enlace con más detalles para esta parte: https://www.zabbix.com/documentation/7.0/en/manual/config/items/itemtypes/odbc_checks
En ambos casos, necesitaremos crear un usuario (por ejemplo, zbx_monitor) que tenga los siguientes permisos:
- View Server State
- View Any Definition
Además, para poder monitorizar los jobs, necesitaremos ejecutar:
GRANT SELECT ON OBJECT::msdb.dbo.sysjobs TO zbx_monitor;
GRANT SELECT ON OBJECT::msdb.dbo.sysjobservers TO zbx_monitor;
GRANT SELECT ON OBJECT::msdb.dbo.sysjobactivity TO zbx_monitor;
GRANT EXECUTE ON OBJECT::msdb.dbo.agent_datetime TO zbx_monitor;
Una vez configuremos las claves y los datos del servidor en las plantillas, podremos ya ver los primeros datos. Los jobs es algo que se “descubre” y aquí podemos ver los datos que nos va a obtener para cada trabajo:

- Si está habilitado o no
- La última vez que fue lanzado
- El último mensaje de estado
- La próxima vez que se lanzará
- La duración de la última vez que se lanzó
- El estado de la última vez que se lanzó, pudiendo ser:
- Failed
- Succeeded
- Retry
- Canceled
Con esta monitorización tenemos ya la posibilidad de ver bastantes cosas:
- Alertas de jobs fallidos
- Alertas de jobs que han tardado más tiempo del debido
- Podemos analizar los tiempos y detectar aquellos procesos que consumen más tiempo y cómo lo hacen viendo sus estadísticos (máximo, mínimo, media, percentiles, etc.). Si esto además lo graficamos en un mapa de calor o un histograma podemos visualmente detectar anomalías.



Aparte de lo que trae por defecto la plantilla de Zabbix, hay algo que puede ser muy interesante que es tener una vista de cuando se ejecutan nuestros jobs y cuanto duran, pudiendo visualizar por tanto su secuenciación:

Para ello tenemos que utilizar una consulta de este estilo:
SELECT
ja.job_id AS JobID,
j.name AS JobName,
'1' as IsRunning
--ja.start_execution_date,
--ISNULL(last_executed_step_id,0)+1 AS current_executed_step_id,
--Js.step_name
FROM msdb.dbo.sysjobactivity ja
LEFT JOIN msdb.dbo.sysjobhistory jh ON ja.job_history_id = jh.instance_id
JOIN msdb.dbo.sysjobs j ON ja.job_id = j.job_id
JOIN msdb.dbo.sysjobsteps js
ON ja.job_id = js.job_id
AND ISNULL(ja.last_executed_step_id,0)+1 = js.step_id
WHERE
ja.session_id = (
SELECT TOP 1 session_id FROM msdb.dbo.syssessions ORDER BY agent_start_date DESC
)
AND start_execution_date is not null
AND stop_execution_date is null;
Monitorizando el resultado de esta consulta podremos obtener la secuenciación de nuestros jobs. Esta monitorización por supuesto viene incluida en las plantillas que usamos en Minerva, junto con un completo dashboard de Grafana que incluye el resto de métricas de Microsoft SQL Server: full scans, users, pages, locks, etc.
Conclusión ✍️
La monitorización de jobs en MSSQL no es solo una buena práctica, sino una necesidad en entornos donde las bases de datos esempeñan un papel crítico en los procesos de negocio.
Gracias a herramientas como Zabbix y Minerva, es posible obtener visibilidad completa sobre su estado, rendimiento y posibles fallos, permitiendo reaccionar de forma proactiva ante cualquier anomalía.
Una correcta configuración y visualización no solo ayuda a detectar errores, sino también a optimizar tiempos de ejecución y asegurar la fiabilidad de las tareas programadas. Esto se traduce en mayor estabilidad operativa, menor carga manual y una infraestructura más predecible y mantenible… pero como ves lleva cierto trabajo y tiempo que muchas veces en el día a día no se tiene.
Por suerte, en Muutech ofrecemos plataforma y servicio, para que tú únicamente te dediques a atajar los jobs en cuanto fallan, revisar secuenciaciones y esos tan lentos que colapsan tu base de datos y molestan a tus usuarios.
Y vosotros, ¿Qué más cosas pensáis que sería interesante monitorizar? Como veis la base de datos tiene un buen registro de la actividad de los jobs, sus steps, resultado, estado actual, etc, aunque es compleja de manejar y no está muy bien documentada.
¿Tienes dudas? ¿Quieres que te echemos una mano? 👇

CEO & MANAGING DIRECTOR
Experto en monitorización IT, sistemas y redes.
Minerva es nuestra plataforma enterprise-grade de monitorización basada en Zabbix y Grafana.
¡Te ayudamos a monitorizar tus equipos de red, comunicaciones y sistemas!
Suscríbete a nuestra Newsletter





