在使用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]#
複製代碼
從上面的結果來看,只須要配置管理數據保留策略,就能夠控制好數據的存儲空間。