InfluxDB 設置數據保留策略,驗證保留的數據存儲大小

需求

在使用Telegraf+InfluxDB+Grafana監控服務器資源的時候,若是influxdb中的數據不設置超時過時的機制的話,那麼數據就會默認一直保存。這樣一直保存的話,數據量就會致使偏大。 這時候就要適當調整influxdb的數據存儲時長,保留最近一段時間的數據便可。數據庫

1.基本概念說明

1.1 InfluxDB 數據保留策略說明

InfluxDB的數據保留策略(RP)用來定義數據在InfluxDB中存放的時間,或者定義保存某個期間的數據。 一個數據庫能夠有多個保留策略, 但每一個策略必須是獨一無二的。bash

1.2 InfluxDB數據保留策略目的

InfluxDB自己不提供數據的刪除操做, 所以用來控制數據量的方式就是定義數據保留策略。 所以定義數據保留策略的目的是讓InfluxDB可以知道能夠丟棄哪些數據, 節省數據存儲空間,避免數據冗餘的狀況。服務器

2.操做示例

2.1 查看數據保留策略

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

  • name 策略名稱:默認autogen
  • duration 持續時間: 0s 表明無限制
  • shardGroupDuration shardGroup數據存儲時間:shardGroup是InfluxDB的一個基本存儲結構, 應該大於這個時間的數據在查詢效率上應該有所下降。
  • replicaN 副本個數:1 表明只有一個副本
  • default 是否默認策略:true 表明設置爲該數據庫的默認策略

2.2 新建數據保留策略

# 新建一個策略
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
> 
複製代碼

2.3 修改數據保留策略

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
> 
複製代碼

2.4 刪除數據保留策略

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
> 
複製代碼

3. 驗證變動策略以後,存儲數據是否會變少

默認的telegraf數據庫的存儲策略是一直保存數據,並沒有限制。那麼爲了節省數據存儲,我下面建立一個保留1小時的策略,而後刪除默認的策略,觀察存儲數據是否變少。flux

3.1 變動策略以前的數據存儲大小

在變動策略以前,我特地運行了採集數據服務幾天,查看目前的存儲數據大小以下:

[root@server influxdb]# du -h --max-depth=1 .
69M	./data
69M	.
[root@server influxdb]# 
複製代碼

能夠看到有69M的存儲數據。

3.2 建立新策略,刪除舊策略

# 建立新策略
> 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
> 
複製代碼

3.3 刪除舊策略以後,確認數據存儲大小

# 刪除舊策略以前,數據有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]# 
複製代碼

從上面的結果來看,只須要配置管理數據保留策略,就能夠控制好數據的存儲空間。

相關文章
相關標籤/搜索