共计 1960 个字符,预计需要花费 5 分钟才能阅读完成。
近期使用 Influxdb 和 Grafana 搭建了线上服务状态监控,InfluxDB数据占用的空间不断增加,对于线上监控来说保留很长时间的数据意义不是很大,大多30天之内的数据保留着业务监控业务运行正常就可以了。influxdb 也提供了数据保留策略 retention policy
, 其中可配置数据保留的持续时间,可实现数据自动过期删除策略。只不过默认是关闭的需要进入命令行界面进行配置。 以下使用 influx
进入 influxdb 的配置命令行,influxdb 的配置命令比较类似于 mysql 风格。
influx
# out
Connected to http://localhost:8086 version 1.8.6
InfluxDB shell version: 1.8.6
查看 influxdb 中有哪些库(数据集)
show databases
# out
name: databases
name
----
dorthl-bucket
_internal
其中 dorthl-bucket
是监控记录写入的数据集 _internal
为 influxdb 自带的一个,一般不要去直接更改它的配置。和 mysql 的 sys
库类似。
进入需要管理的数据集
use dorthl-bucket
# out
Using database dorthl-bucket
查看当前数据集的数据保留策略
show retention policies
#out
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 true
- name 策略名称,一般这里会自带一个叫
autogen
的默认策略 - duration 数据保留持续时间,0代表无限制,这是默认值。
- shardGroupDuration shardGroup的存储时间,shardGroup是InfluxDB的一个基本储存结构,应该大于这个时间的数据在查询效率上应该有所降低。
- replicaN 全称是REPLICATION,副本个数它决定在集群中存储多少个数据副本,inflxudb集群才会用到的,单机的话默认1就好了。
- default 是否是默认策略
duration 和 shard duration 取值,1h(1小时),1d(1天),1w(1周)
新增数据保留策略
使用 create retention policy
命令 ,rp_7d
为策略名称,dorthl-bucket
为数据集名称,7d
为保留的时间7天,replication 1
副本个数默认1, default
为替换掉 autogen
采用当前创建策略为默认策略,不添加这个参数则只创建,influxdb 允许多个策略同时存在,可以通过之后修改切换。
create retention policy "rp_7d" ON "dorthl-bucket" duration 7d replication 1 default
注意:多个数据保留策略的数据是分开的,在数据上报时如果没有指定要使用的保留策略就会写入默认的策略里,在你在线上使用中切换了默认的保留策略,会看到监控面板上之前写入的数据查询不出来的情况。
在 Grafana 的图表中一般查询数据所采用的是如下语句。
select * from service_qps
查询非默认策略的数据需要指定策略进行查询
select * from rp_7d.service_qps
所以会出现切换数据保留策略后,监控面板之前采集的数据无法查看的问题。
修改数据保留策略
使用 alter retention policy
参数和创建差不多,修改主要是修改 default 数据保留的时间,这里修改为15天。
alter retention policy "rp_7d" ON "dorthl-bucket" duration 15d default
删除数据保留策略
使用 drop retention policy
这里需要注意如果你要删除的保留策略里面有数据的话,这一步将会删掉这个保留策略里面的所有数据。
drop retention policy "rp_7d" ON "dorthl-bucket"
个人实践
由于最开始使用 influxdb 是直接按照官网教程配置,并没有去考虑数据过期的问题。当库已经运行一段时间后创建新的默认策略会导致读取不到数据,我的做法是直接修改系统创建的 autogen
,重新指定数据保存的时间,数据就会按照当前策略进行删除。使用如下命令
alter retention policy autogen on "dorthl-bucket" duration 15d replication 1 shard duration 1d default
shard duration 一般根据你业务的实际查询进行配置或者可以不填写,默认根据RP的duration计算。