Tabla de Contenidos

, , , , , ,

HouseKeeping

Una de los mayores problemas que podemos tener es que nuestra base de datos de zabbix se coma el espacio en disco disponible de nuestra máquina. Por ejemplo si hacemos una búsqueda en nuestro sistema de ficheros con un tamaño grande

 sudo find / -type f -size +1000M -print 

Nos encontramos que las tablas /var/lib/mysql/zabbix/history_uint.ibd y /var/lib/mysql/zabbix/trends_uint.ibd son ficheros muy grandes. Normalmente es un síntoma de que los parámetros de almacenamiento de datos los tenemos definidos en unos valores altos y en muchos casos no hace falta almacenar tanto.

Para cambiar el número de eventos y alertas que mantenemos guardados tenemos que ir a al menú Administration→General y en el desplegable de la derecha seleccionar Housekeeping.

Nos aparecerá una pantalla donde podemos elegir el número de días que queremos mantener almacenados

Borrar datos obsoletos

Para liberar espacio podemos ejecutar un script que elimine los datos anteriores a una fecha determinada

script original de Michael Foster

-- intervals in days
 SET @history_interval = 7;
 SET @trends_interval = 90;

DELETE FROM alerts WHERE (UNIX_TIMESTAMP(NOW()) - clock) > (@history_interval * 24 * 60 * 60);
DELETE FROM acknowledges WHERE (UNIX_TIMESTAMP(NOW()) - clock) > (@history_interval * 24 * 60 * 60);
DELETE FROM events WHERE (UNIX_TIMESTAMP(NOW()) - clock) > (@history_interval * 24 * 60 * 60);

DELETE FROM history WHERE (UNIX_TIMESTAMP(NOW()) - clock) > (@history_interval * 24 * 60 * 60);
DELETE FROM history_uint WHERE (UNIX_TIMESTAMP(NOW()) - clock) > (@history_interval * 24 * 60 * 60);
DELETE FROM history_str WHERE (UNIX_TIMESTAMP(NOW()) - clock) > (@history_interval * 24 * 60 * 60);
DELETE FROM history_text WHERE (UNIX_TIMESTAMP(NOW()) - clock) > (@history_interval * 24 * 60 * 60);
DELETE FROM history_log WHERE (UNIX_TIMESTAMP(NOW()) - clock) > (@history_interval * 24 * 60 * 60);

DELETE FROM trends WHERE (UNIX_TIMESTAMP(NOW()) - clock) > (@trends_interval * 24 * 60 * 60);
DELETE FROM trends_uint WHERE (UNIX_TIMESTAMP(NOW()) - clock) > (@trends_interval * 24 * 60 * 60);

Copiamos el script a /var/lib/mysql/borrardatosviejos.sql

Ejecutamos el script mediante alguno de los siguientes métodos:

Referencias