Introducción y motivación
En el mundo de las Tecnologías de la Información, los estándares y las necesidades de los clientes son muy específicos. Los tiempos de indisponibilidad permitidos son cada vez menores, los tiempos de respuesta ante incidentes son cada vez más ajustados y los SLAs son cada vez más exigentes.
Esta tendencia está acompañada de la generación de reportes orientados ya no tanto a la información técnica interna de los sistemas, como era habitual hasta hacía muy poco tiempo, sino al negocio y la disponibilidad de los sistemas.
Sin embargo, detrás de esta necesidad de negocio se encuentra la problemática de cómo implementarla técnicamente:
- ¿Cómo estandarizar los reportes: qué datos son necesarios para cada cliente?
- ¿Cómo evitar un trabajo manual de generación de los reportes para cada cliente?
- ¿Qué opción se les da a los clientes que desean sacar ellos mismos sus reportes?
En Know-How estamos trabajando fuertemente en los puntos mencionados, haciendo hincapié en tres etapas en concreto:
- Definición y obtención de las métricas necesarias
- Presentación de los datos de forma clara, concisa y concreta (“CCC”)
- Automatización de la generación y entrega de reportes
Para estas tres etapas utilizamos las siguientes aplicaciones:
- Zabbix
- Grafana
- Un desarrollo propio hecho en Python combinado con plugins de Grafana
Etapa 1: Recolección de los datos
El contenido de los reportes es altamente dependiente de la especialidad de TI ofrecida al cliente.
La primera etapa consiste en disponer de la información necesaria en Zabbix para todas las bases de datos en todos los servidores del cliente. En KH hemos desarrollado nuestros propios Templates de Zabbix en el formato adecuado como base para la recolección de dicha información. A modo de ejemplo, para MySQL contamos actualmente con 110 datos por instancia más los indicadores propios de cada base de datos:
Etapa 2: Armado del reporte
La gran cantidad de datos que llegan a Zabbix deben ser analizados y procesados de manera de presentar al cliente solo un resumen de las tendencias generales sobre su ambiente.
En este punto entra en acción Grafana, que en adición tiene la ventaja de presentar la información de una manera mucho más limpia y gráfica que Zabbix.
Para el reporte de MySQL, la información se presenta segmentada en los siguientes grupos conceptuales:
- Información general: datos del servidor de BD y disponibilidad mensual del servicio
- Métricas de base de datos: conexiones, consultas lentas y operaciones por segundo, cantidad de commits, cantidad de rollbacks, máximo de conexiones usadas
- Información sobre los tamaños de las bases: tamaños actuales, evolución del tamaño en el último mes
- Métricas del sistema operativo: espacio disponible para datos, respaldos, transacciones; carga sobre la CPU, uso de memoria y swap
Algunas imágenes:
Etapa 3: Automatización de la generación y entrega de los reportes
Una vez diseñados los reportes de servicio, se necesita automatizar su generación. Esto último se debe principalmente a dos motivos:
- Es inviable generar manualmente los reportes mensuales para todos los servicios y clientes
- La automatización permite a los propios clientes generar sus reportes en cualquier momento, pudiendo incluso obtenerlos con un alcance semanal o diario en lugar de mensual
Para la generación de reportes automáticos a partir de dashboards de Grafana, en KH hemos desarrollado una herramienta que es capaz de “ver” el dashboard tal como está definido e imprimirlo en un documento PDF, renderizando las imágenes y armando el informe con paneles de ubicación y tamaño.
La definición del dashboard y sus paneles se extraen de Grafana por intermedio de su API y las imágenes se renderizan utilizando el plugin “Grafana Image Renderer”.
Dado que la información de los reportes es dependiente del cliente, del servidor de BD, de la instancia de MySQL y hasta de la base de datos particular, en Grafana se tienen dasboards dinámicos, es decir, con variables seleccionables por el usuario que se utilizan para obtener los datos correctos en cada panel:
Para generar reportes en forma masiva, conseguimos a través del API de Zabbix “Cliente 1” todas las posibilidades para las variables ({group, host, application, database}).
Ejemplo:
# python generate_pdf.py <cliente> <desde> <hasta> [<host>]
Al script se le envía el nombre del cliente, el período (ej.: <desde>=now-30d; <hasta>=now) y opcionalmente el nombre de un servidor. Si no se especifica ningún host, el script generará un reporte por cada host del cliente.
A partir de entonces es muy sencillo programar la ejecución, incluyendo el envío por mail o incluso integrarlo a un portal de autogestión, lo que le permitirá al cliente elegir los parámetros para la generación del reporte.
Autor: Juan Godoy, System Admin Sr.