Ajuste del tiempo de retención de datos en InfluxDB

por | noviembre 8, 2018

Ya habíamos hablado antes de InfluxDB. Desde entonces la instancia de Base de Datos que monté en para las métricas de Collectd ha engordado bastante y me ha tocado repasar el tiempo de retención de datos.

En primer lugar hacemos login en InfluxDB. En mi caso no utilizo la interfaz web así que hago login en la CLI:

influx -host 192.168.1.2 -port 8086

Nos autenticamos:

auth

Introducimos nuestro usuario y contraseña.

Vemos las políticas de retención en la Base de Datos que hayamos creado para Collectd, en mi caso el nombre de la instancia de Base de Datos es collectd_db:

> SHOW RETENTION POLICIES ON collectd_db
name        duration    shardGroupDuration      replicaN    default
autogen     0s          168h0m0s                1           true  

Aclaramos:

  • name es el nombre de la política de retención. En este caso autogen significa que se generó automáticamente cuando creamos la Base de Datos.
  • Duration 0s establece una retención de datos infinita (al menos hasta que aguante nuestro almacenamiento)
  • shardGroupDuration es el tiempo que puede estar un Grupo de Shards «guardando» datos.
  • replicaN es el número de réplicas en el clúster de InfluxDB. En mi caso no aplicaría ya que no tengo configurado InfluxDB en clúster.
  • default especifica que esta política de retención se aplica por defecto para esta instancia de Base de Datos.

Con frecuencia se confunde la propiedad shardGroupDuration con Duration. Un buen artículo aclaratorio es este. En resumen: un shard es un «contenedor» en el que podemos introducir datos. Estos shards se agrupan en entidades lógicas llamadas Grupos de Shard (Shard Groups). ¿Durante cuánto tiempo podemos introducir datos en un Grupo de Shard? Esto es precisamente lo que se especifica en shardGroupDuration. Una vez pasa dicho tiempo (168h, es decir, 7 días por defecto) se deja de introducir datos en dicho Grupo de Shards. Es entonces cuando entra en juego la propiedad Duration, que marca el tiempo de retención de datos desde que se deja de escribir datos en un Grupo de Shards.

Dicho esto, modificamos el tiempo de retención para la política autogen a 10 días:

ALTER RETENTION POLICY "autogen" ON "collectd_db" DURATION 10d SHARD DURATION 168h REPLICATION 1 DEFAULT

Echamos un vistazo a los shards después del cambio:

> show shards;
name: _internal
---------------
id		database		retention_policy		shard_group		start_time				end_time				expiry_time				owners
338		_internal		monitor					338				2018-08-15T00:00:00Z	2018-08-16T00:00:00Z	2018-08-23T00:00:00Z	
339		_internal		monitor					339				2018-08-16T00:00:00Z	2018-08-17T00:00:00Z	2018-08-24T00:00:00Z	
340		_internal		monitor					340				2018-08-17T00:00:00Z	2018-08-18T00:00:00Z	2018-08-25T00:00:00Z	
341		_internal		monitor					341				2018-08-18T00:00:00Z	2018-08-19T00:00:00Z	2018-08-26T00:00:00Z	
342		_internal		monitor					342				2018-08-19T00:00:00Z	2018-08-20T00:00:00Z	2018-08-27T00:00:00Z	
343		_internal		monitor					343				2018-08-20T00:00:00Z	2018-08-21T00:00:00Z	2018-08-28T00:00:00Z	
345		_internal		monitor					345				2018-08-21T00:00:00Z	2018-08-22T00:00:00Z	2018-08-29T00:00:00Z	
346		_internal		monitor					346				2018-08-22T00:00:00Z	2018-08-23T00:00:00Z	2018-08-30T00:00:00Z	


name: collectd_db
-----------------
id		database		retention_policy		shard_group		start_time				end_time				expiry_time				owners
327		collectd_db		autogen					327				2018-08-06T00:00:00Z	2018-08-13T00:00:00Z	2018-08-23T00:00:00Z	
336		collectd_db		autogen					336				2018-08-13T00:00:00Z	2018-08-20T00:00:00Z	2018-08-30T00:00:00Z	
344		collectd_db		autogen					344				2018-08-20T00:00:00Z	2018-08-27T00:00:00Z	2018-09-06T00:00:00Z

Tenemos que fijarnos en la columna expiry_time en la instancia collectd_db. Como vemos es a los 10 días desde end_time, que marca a su vez el tiempo de validez de un grupo de shards.

¿Qué retención tenemos ahora? En cada Grupo de Shard se podrán introducir datos por un período de 7 días, esto no ha cambiado. Estos 7 días están comprendidos entre la fecha start_time y end_time. Una vez cumplido ese plazo, se retendrán los datos por 10 días más hasta la fecha que marca expiry_time y después se descartará ese Grupo de Shard borrando los datos que hubiera en él, tal y como hemos especificado en la propiedad Duration.