如何通过配置为InfluxDB设置默认保留策略和持续时间

时间:2017-01-12 18:40:20

标签: configuration influxdb

我正在使用官方的InfluxDB docker镜像。我希望默认情况下将保留政策设置为14 days

我可以设置各种ENV变量来更改InfluxDB的配置,例如INFLUXDB_RETENTION_POLICY。这需要保留策略的名称,例如"默认"用作默认保留策略。

问题是此默认策略的持续时间为7天。我需要将它设置为14天。

文档很差。我找不到任何ENV变量来调整默认持续时间。我还可以将INFLUXDB_RETENTION_POLICY变量设置为其他保留策略的其他名称,但我不知道如何通过配置创建该保留策略。

有人知道: 1)通过配置更改保留的默认持续时间的方法 要么 2)通过配置创建保留策略的方法

4 个答案:

答案 0 :(得分:12)

遗憾的是,无法通过配置设置默认保留策略。原因是通常在数据库创建期间定义保留策略持续时间。

CREATE DATABASE <database_name>
[WITH [DURATION <duration>] [REPLICATION <n>]
      [SHARD DURATION <duration>] [NAME <retention-policy-name>]]

如果允许用户通过配置设置默认保留期限,则命令结果为

CREATE DATABASE mydb 

因实例而异。虽然这不一定有问题,但也不理想。

  

问题是此默认策略的持续时间为7天。我需要将它设置为14天。

InfluxDB中的默认保留策略应该是无限的。

> CREATE DATABASE mydb
> SHOW RETENTION POLICIES ON mydb
name    duration shardGroupDuration replicaN default
----    -------- ------------------ -------- -------
autogen 0s       168h0m0s           1        true

我们在此处看到保留策略的持续时间为0s,这是无限的别名,分片组的持续时间为168h0m0s,为7天。

我认为这里混淆的主要原因是相对普遍的 - 主要是由于保留政策命名不佳。在InfluxDB中,数据库是保留策略的容器,而保留策略是实际时间序列数据的容器。也就是说,保留策略不是一个策略,而是一个容器,它对所包含的所有数据都有策略。

我的建议是在InfluxDB中创建数据库时始终完全明确。这样做将始终保证您的数据库具有正确的保留策略持续时间。因此,要创建具有14天保留策略的数据库,您需要发出命令

CREATE DATABASE mydb WITH DURATION 14d

答案 1 :(得分:1)

这里没有人真正回答过这个问题。答案是您不能使用配置文件或环境变量创建保留策略。因此,为了使解决方案自动化,您将需要创建一个“ K8s Job”,将您的命令导入到Influx CLI中。

例如:

  • 首先创建此命令文件,并将其包装到“ db_init.txt”文件中:

    创建数据库示例创建示例两周内的保留政策 DURATION 14d REPLICATION 1 DEFAULT

  • 第二,创建一个bash脚本以将该文件直接上传到Influx 命令行:

    #!/ usr / bin / env bash

    涌入-import -path = / tmp / db-init.txt

将其包装在图像中并作为作业上载-您将其自动化。

希望我能有所帮助。

答案 2 :(得分:0)

要回答来自具有现有数据库的google的问题(这是我的情况),可以通过三种方法设置保留政策:

  • 在新数据库上,使用数据库创建(如上)
  • 创建保留策略时,通过在create语句的末尾添加DEFAULT
  • 通过更改将现有保留策略作为数据库的默认设置(请参见下文)

创建数据库

  

创建数据库“ NOAA_water_database”,持续时间为3d,复制1次,持续时间为1h,名称为“液体”

创建策略

  

在“ NOAA_water_database”上建立“ one_day_only”保留期限DURATION 1d REPLICATION 1

更新现有策略

  

更改保留政策“ what_is_time”为“ NOAA_water_database” DURATION 3w SHARD DURATION 2h DEFAULT

因此,对于要设置为默认值的现有数据库和保留策略,最简单的解决方案是使用更改保留策略。

答案 3 :(得分:0)

无法通过config为所有数据库influxDB设置保留策略。很有可能是因为retention policy是一个包含实际压缩时间序列数据的容器。这是每个数据库的属性。更改一个数据库的保留策略不会更改任何其他数据库的保留策略。

如果删除保留策略,则包含的所有数据将被删除。但是更改保留策略不会删除任何数据。

这是一个bash脚本,用于自动执行更改保留策略的任务

for db in $(influx -username $INFLUX_USERNAME -password $INFLUX_PASSWORD -execute="SHOW DATABASES"| grep <pattern_to_list_required_db>); do 
influx -username $INFLUX_USERNAME -password $INFLUX_PASSWORD -execute="ALTER RETENTION POLICY \"autogen\" ON \"$db\" DURATION 14d"
influx -username $INFLUX_USERNAME -password $INFLUX_PASSWORD -database="$db" -execute="SHOW RETENTION POLICIES"
done