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.