在使用Telegraf+InfluxDB+Grafana监控服务器资源的时候,若是influxdb中的数据不设置超时过时的机制的话,那么数据就会默认一直保存。这样一直保存的话,数据量就会致使偏大。 这时候就要适当调整influxdb的数据存储时长,保留最近一段时间的数据便可。数据库
InfluxDB的数据保留策略(RP)用来定义数据在InfluxDB中存放的时间,或者定义保存某个期间的数据。 一个数据库能够有多个保留策略, 但每一个策略必须是独一无二的。bash
InfluxDB自己不提供数据的删除操做, 所以用来控制数据量的方式就是定义数据保留策略。 所以定义数据保留策略的目的是让InfluxDB可以知道能够丢弃哪些数据, 节省数据存储空间,避免数据冗余的状况。服务器
show retention policies on 数据库名
复制代码
执行以下:ui
# 选择使用telegraf数据库
> use telegraf;
Using database telegraf
>
>
# 查询数据保留策略
> show retention policies on telegraf
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 true
>
复制代码
从查询的结果来看,默认只有一个策略,而上面这个策略的说明了什么信息呢?spa
# 新建一个策略
CREATE RETENTION POLICY "策略名称" ON 数据库名 DURATION 时长 REPLICATION 副本个数;
# 新建一个策略而且直接设置为默认策略
CREATE RETENTION POLICY "策略名称" ON 数据库名 DURATION 时长 REPLICATION 副本个数 DEFAULT;
复制代码
下面直接新增一个新的默认策略看看,示例以下:code
# 建立新的默认策略以前的策略
> show retention policies on telegraf
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 true
>
>
# 建立新的默认策略role_01保留数据时长1小时
> CREATE RETENTION POLICY "role_01" ON telegraf DURATION 1h REPLICATION 1 DEFAULT;
>
# 查看策略的变化
> show retention policies on telegraf
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 false
role_01 1h0m0s 1h0m0s 1 true
>
复制代码
由于默认策略已经修改成role_01
,那么若是还想用以前的autogen
策略来查询数据,则须要在查询表以前加上策略的名称:"策略名".表名
,以下:cdn
> select * from "autogen".cpu limit 2;
name: cpu
time cpu host usage_guest usage_guest_nice usage_idle usage_iowait usage_irq usage_nice usage_softirq usage_steal usage_system usage_user
---- --- ---- ----------- ---------------- ---------- ------------ --------- ---------- ------------- ----------- ------------ ----------
1574663960000000000 cpu-total locust03 0 0 99.44972486076016 0.05002501250678571 0 0 0 0 0.2501250625248291 0.2501250625430281
1574663960000000000 cpu0 locust03 0 0 99.59959959921699 0.10010010010243535 0 0 0 0 0.20020020020031867 0.10010010005008706
>
复制代码
ALTER RETENTION POLICY "策略名称" ON "数据库名" DURATION 时长
ALTER RETENTION POLICY "策略名称" ON "数据库名" DURATION 时长 DEFAULT
复制代码
在这里示例修改role_01
策略的时长为2h
,以下:server
> show retention policies on telegraf
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 false
role_01 1h0m0s 1h0m0s 1 true
>
>
# 执行修改时长为2小时
> ALTER RETENTION POLICY "role_01" ON "telegraf" DURATION 2h
>
# 能够看到role_01的duration为2h
> show retention policies on telegraf
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 false
role_01 2h0m0s 1h0m0s 1 true
>
复制代码
drop retention POLICY "策略名" ON "数据库名"
复制代码
示例删除role_01
策略,以下:blog
# 查看当前的数据保留策略
> show retention policies on telegraf
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 false
role_01 2h0m0s 1h0m0s 1 true
>
# 删除role_01的策略
> drop retention POLICY "role_01" ON "telegraf"
>
# 查看删除后的策略,能够看到剩余的策略autogen并不会自动设置为默认default策略
> show retention policies on telegraf
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 false
>
# 修改autogen策略为default策略
> ALTER RETENTION POLICY "autogen" ON "telegraf" DEFAULT
>
> show retention policies on telegraf
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 true
>
复制代码
默认的telegraf数据库的存储策略是一直保存数据,并没有限制。那么为了节省数据存储,我下面建立一个保留1小时的策略,而后删除默认的策略,观察存储数据是否变少。flux
在变动策略以前,我特地运行了采集数据服务几天,查看目前的存储数据大小以下:
[root@server influxdb]# du -h --max-depth=1 .
69M ./data
69M .
[root@server influxdb]#
复制代码
能够看到有69M的存储数据。
# 建立新策略
> CREATE RETENTION POLICY "rule_telegraf" ON telegraf DURATION 1h REPLICATION 1 DEFAULT;
>
> show retention policies on telegraf
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 false
rule_telegraf 1h0m0s 1h0m0s 1 true
>
# 删除历史策略
> drop retention POLICY "autogen" ON "telegraf";
>
# 查看当前的数据策略
> show retention policies on telegraf
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
rule_telegraf 1h0m0s 1h0m0s 1 true
>
复制代码
# 删除旧策略以前,数据有69M
[root@server influxdb]# du -h --max-depth=1 .
69M ./data
69M .
[root@server influxdb]#
# 删除旧策略以后,数据只保留15M
[root@server influxdb]# du -h --max-depth=1 .
15M ./data
15M .
[root@server influxdb]#
复制代码
从上面的结果来看,只须要配置管理数据保留策略,就能够控制好数据的存储空间。